C++代码的汇编实现之一(++i与i++的区别)

时间:2021-09-19 02:12:52

以int类型为例

C++编译器为++i生成的代码是

013E1375  mov        eax,dword ptr [i] 

013E1378  add        eax,1 

013E137B  mov        dword ptr [i],eax

很简单,基本不用分析

第一行是把i的值放到eax中,然后调用add对eax进行+1,最后将eax再放到i中

 

再看看i++

0119137E  mov        eax,dword ptr [i] 

01191381  add        eax,1 

01191384  mov        dword ptr [i],eax 

结果是完全一样,

 

下面再看看有赋值的情况

int c = ++i;

 

012D1384  mov        eax,dword ptr [i] 

012D1387  add         eax,1 

012D138A  mov        dword ptr [i],eax 

012D138D  mov        ecx,dword ptr [i] 

012D1390  mov        dword ptr [c],ecx 

可以看到这个操作在完成了前三部之后做了两个mov把最终的i值放到了c中

 

再看看

int b = i++;

012D1375  mov        eax,dword ptr [i] 

012D1378  mov        dword ptr [b],eax 

012D137B  mov        ecx,dword ptr [i] 

012D137E  add        ecx,1 

012D1381  mov        dword ptr [i],ecx 

结果稍有不同,在把i的值mov到eax之后又立即把eax放到了b中,随后的三步保持与之前一致只不过寄存器换成了ecx,正好符合i++的特性