首页 新闻 会员 周边 捐助

懂汇编语言的高手进来帮忙解释一下,感激不尽。。。。

0
悬赏园豆:20 [已解决问题] 解决于 2014-10-19 08:32

这是一个C语言小程序,通过C++6.0查看他的汇编代码如下,请高手帮忙解释一下

1:    #include <stdio.h>

2:

3:    int main()

4:    {

00401010   push        ebp

00401011   mov         ebp,esp

00401013   sub         esp,44h

00401016   push        ebx

00401017   push        esi

00401018   push        edi

00401019   lea         edi,[ebp-44h]

0040101C   mov         ecx,11h

00401021   mov         eax,0CCCCCCCCh

00401026   rep stos    dword ptr [edi]

5:        int a = 3;

00401028   mov         dword ptr [ebp-4],3

6:        printf("%d\n",a+=a-=a*a);

0040102F   mov         eax,dword ptr [ebp-4]

00401032   imul        eax,dword ptr [ebp-4]

00401036   mov         ecx,dword ptr [ebp-4]

00401039   sub         ecx,eax

0040103B   mov         dword ptr [ebp-4],ecx

0040103E   mov         edx,dword ptr [ebp-4]

00401041   add         edx,dword ptr [ebp-4]

00401044   mov         dword ptr [ebp-4],edx

00401047   mov         eax,dword ptr [ebp-4]

0040104A   push        eax

0040104B   push        offset string "%d\n" (0042201c)

00401050   call        printf (00401090)

00401055   add         esp,8

7:        return 0;

00401058   xor         eax,eax

8:    }

0040105A   pop         edi

0040105B   pop         esi

0040105C   pop         ebx

0040105D   add         esp,44h

00401060   cmp         ebp,esp

00401062   call        __chkesp (00401110)

00401067   mov         esp,ebp

00401069   pop         ebp

蓝天网络的主页 蓝天网络 | 初学一级 | 园豆:162
提问于:2014-10-12 22:23
< >
分享
最佳答案
0

最前面和最后面是编译器用来做栈处理和检查的,就不用解释了吧。

第5行的 int a = 3 翻译成汇编就是把内存地址[ebp-4]的位置写入数字3,后面的[ebp-4]都表示变量a。

然后就是第6行的翻译

eax=a=3; eax=eax*a=3*3=9; ecx=a=3; ecx=ecx-eax=3-9=-6;

a=ecx=-6; edx=a=-6; edx=edx+a=-6+(-6)=-12; a=edx=-12; eax=a=-12;

然后eax压栈作为第二个参数调用printf。输出-12

最后用xor eax,eax将eax置0,作为返回值。

收获园豆:20
winnow | 菜鸟二级 |园豆:292 | 2014-10-18 20:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册