[C語言]小記q = (++j) + (++j) + (++j)的值

根據不一樣的編譯器,生產的代碼不同,致使的結果也會不同。c++

 

代碼以下:spa

1 #include <stdio.h>
2 void main()
3 {
4 int j = 5;
5 int q;
6 q =(++j)+(++j)+(++j);
7 }

 

環境:win7code

編譯器:GCCblog

IDE:vc++6.0  /DEV-C++編譯器

結果:q = 22io

 1 6:    q =(++j)+(++j)+(++j);
 2 00401036   mov         eax,dword ptr [ebp-8]           移動J=5到寄存器eax內
 3 00401039   add         eax,1                                       在寄存器eax值上加1,eax=6
 4 0040103C   mov         dword ptr [ebp-8],eax          把寄存器的值移動到變量j上去,j= 6
 5 0040103F   mov         ecx,dword ptr [ebp-8]           移動J=6到寄存器ecx
 6 00401042   add         ecx,1                                       在寄存器上ecx+1,j=6
 7 00401045   mov         dword ptr [ebp-8],ecx          把寄存器ecx上的值移到J上去,J=7
 8 00401048   mov         edx,dword ptr [ebp-8]         把J=7移動到寄存器edx=7
 9 0040104B   add         edx,dword ptr [ebp-8]          edx值+j  此時j=7,edx=7+7
10 0040104E   mov         eax,dword ptr [ebp-8]          把j=7Move給 第一個寄存器eax
11 00401051   add         eax,1                                       eax再加1,此時寄存器eax=8
12 00401054   mov         dword ptr [ebp-8],eax          把此時的eax的值move給 j=8
13 00401057   add         edx,dword ptr [ebp-8]           edx值= edx+j = 14+8
14 0040105A   mov         dword ptr [ebp-0Ch],edx      edx值 move給 j = 22 

 

 環境:win7編譯

編譯器:GCCclass

IDE: VC++ 2008變量

運行結果:24word

 1  q =(++j)+(++j)+(++j);
 2 003A1815  mov         eax,dword ptr [j]   //eax = 5,j = 5
 3 003A1818  add         eax,1   //eax = 6
 4 003A181B  mov         dword ptr [j],eax  j = 6 
 5 003A181E  mov         ecx,dword ptr [j]  ecx = 6
 6 003A1821  add         ecx,1  ecx = 7
 7 003A1824  mov         dword ptr [j],ecx  j = 7 
 8 003A1827  mov         edx,dword ptr [j]   edx = 7
 9 003A182A  add         edx,1   edx = 8
10 003A182D  mov         dword ptr [j],edx   j = 8 
11 003A1830  mov         eax,dword ptr [j] eax = 8
12 003A1833  add         eax,dword ptr [j] eax = 16
13 003A1836  add         eax,dword ptr [j]  eax = 24
14 003A1839  mov         dword ptr [q],eax 
相關文章
相關標籤/搜索