关于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 编辑 ]







要不来解释下?



路过