[C语言]小记q = (++j) + (++j) + (++j)的值

根据不同的编译器,生产的代码不一样,导致的结果也会不一样。

 

代码如下:

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

 

环境:win7

编译器:GCC

IDE:vc++6.0  /DEV-C++

结果:q = 22

 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

编译器:GCC

IDE: VC++ 2008

运行结果:24

 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 

 

转载于:https://www.cnblogs.com/IAmBetter/p/3181915.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值