zoukankan      html  css  js  c++  java
  • [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 
  • 相关阅读:
    Animation用法
    英文口语及书写常用句型汇总1
    Jqplot使用总结之二(双Y轴)
    SqlServer扩展存储过程
    SQL Server常见基础操作
    C# 利用ITextSharp导出PDF文件
    go常量
    ARP协议
    go数组
    go基本数据类型
  • 原文地址:https://www.cnblogs.com/IAmBetter/p/3181915.html
Copyright © 2011-2022 走看看