您的位置:首页 > 编程语言 > C语言/C++

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

2013-10-15 22:38 232 查看
原题: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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息