小题目大学问--C语言输出问题

原题:C语言输出问题

#include<stdio.h>
int main(void)
{
 int a=5,b=5,q,p;
 //q=(a++)+(a++)+(a++);
 p=(++b)+(++b)+(++b);
 printf("q:%d\n",q);
 printf("p:%d\n",p);
 getchar();
 return 0;
}

 图解:

 

反汇编代码:vc6.0  (不同编译器不同)F5
 
1:    #include<stdio.h>

2:    int main(void)

3:    {

00401010   push        ebp

00401011   mov         ebp,esp

00401013   sub         esp,54h

00401016   push        ebx

00401017   push        esi

00401018   push        edi

00401019   lea         edi,[ebp-54h]

0040101C   mov         ecx,15h

00401021   mov         eax,0CCCCCCCCh

00401026   rep stos    dword ptr [edi]

4:        int a=5,b=5,q,p;

00401028   mov         dword ptr [ebp-4],5

0040102F   mov         dword ptr [ebp-8],5    //b

5:        q=(a++)+(a++)+(a++);

00401036   mov         eax,dword ptr [ebp-4]

00401039   add         eax,dword ptr [ebp-4]

0040103C   add         eax,dword ptr [ebp-4]

0040103F   mov         dword ptr [ebp-0Ch],eax

00401042   mov         ecx,dword ptr [ebp-4]

00401045   add         ecx,1

00401048   mov         dword ptr [ebp-4],ecx

0040104B   mov         edx,dword ptr [ebp-4]

0040104E   add         edx,1

00401051   mov         dword ptr [ebp-4],edx

00401054   mov         eax,dword ptr [ebp-4]

00401057   add         eax,1

0040105A   mov         dword ptr [ebp-4],eax

6:        p=(++b)+(++b)+(++b);

0040105D   mov         ecx,dword ptr [ebp-8]   //ecx=5

00401060   add         ecx,1                 //ecx=ecx+1=6

00401063   mov         dword ptr [ebp-8],ecx   //b=6

00401066   mov         edx,dword ptr [ebp-8]    //edx=ecx=6

00401069   add         edx,1                  //edx=7

0040106C   mov         dword ptr [ebp-8],edx     //b=7

0040106F   mov         eax,dword ptr [ebp-8]     //eax=7

00401072   add         eax,dword ptr [ebp-8]      //eax=eax+b=7+7=14

00401075   mov         ecx,dword ptr [ebp-8]      //ecx=b=7

00401078   add         ecx,1                    // ecx=8

0040107B   mov         dword ptr [ebp-8],ecx      //b=8

0040107E   add         eax,dword ptr [ebp-8]       //eax=eax+b=14+8=22

00401081   mov         dword ptr [ebp-10h],eax     //22

7:        printf("q:%d\n",q);

00401084   mov         edx,dword ptr [ebp-0Ch]

00401087   push        edx

00401088   push        offset string "q:%d\n" (00423024)

0040108D   call        printf (00401470)

00401092   add         esp,8

8:        printf("p:%d\n",p);

00401095   mov         eax,dword ptr [ebp-10h]

00401098   push        eax

00401099   push        offset string "p:%d\n" (0042301c)

0040109E   call        printf (00401470)

004010A3   add         esp,8

9:        getchar();

004010A6   mov         ecx,dword ptr [__iob+4 (00425a34)]

004010AC   sub         ecx,1

004010AF   mov         dword ptr [__iob+4 (00425a34)],ecx

004010B5   cmp         dword ptr [__iob+4 (00425a34)],0

004010BC   jl          main+0D0h (004010e0)

004010BE   mov         edx,dword ptr [__iob (00425a30)]

004010C4   movsx       eax,byte ptr [edx]

004010C7   and         eax,0FFh

004010CC   mov         dword ptr [ebp-14h],eax

004010CF   mov         ecx,dword ptr [__iob (00425a30)]

004010D5   add         ecx,1

004010D8   mov         dword ptr [__iob (00425a30)],ecx

004010DE   jmp         main+0E0h (004010f0)

004010E0   push        offset __iob (00425a30)

004010E5   call        _filbuf (00401140)

004010EA   add         esp,4

004010ED   mov         dword ptr [ebp-14h],eax

10:       return 0;

004010F0   xor         eax,eax

11:   }

004010F2   pop         edi

004010F3   pop         esi

004010F4   pop         ebx

004010F5   add         esp,54h

004010F8   cmp         ebp,esp

004010FA   call        __chkesp (004014f0)

004010FF   mov         esp,ebp

00401101   pop         ebp

00401102   ret

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值