关于ebp和esp的使用[更新了代码,增加了样例输出],代码是实现了目标 ,不过还没弄明白咋回事,先贴出来,再慢慢研究
程序代码:
#include <stdio.h> int _mul(int a,int b) { int c; int d; c=10; d=16; _asm { mov eax,[ebp+8]; mov ebx,[ebp+12]; imul ebx; idiv DWORD PTR [ebp-4]; idiv DWORD PTR [ebp-8]; } } int main(void) { int a; int b; int c; a=100; b=200; _asm { mov eax,[ebp-4]; mov ebx,[ebp-8]; sub eax,ebx; mov [ebp-12],eax; } printf("使用ebp计算的a(%d) - b(%d)=c(%d)\n",a,b,c); c=_mul(a,b); printf("使用ebp计算的a(%d) X b(%d)/10/16=c(%d)\n",a,b,c); return 0; } F:\c_source\t2\Debug>fc 使用ebp计算的a(100) - b(200)=c(-100) 使用ebp计算的a(100) X b(200)/10/16=c(125)
F:\c_source\t2\Debug>fc
主函数中的变量地址分别是 a= 12ff7c b=12ff78 c=12ff74
使用ebp计算的a(100) - b(200)=c(-100)
子函数中的形参变量地址分别是 a= 12ff20 b=12ff24
子函数中的变量地址分别是 c= 12ff14 d=12ff10
使用ebp计算的a(100) X b(200)/10/16=c(125)
[ 本帖最后由 wp231957 于 2012-12-10 12:28 编辑 ]