汇编分析 int x = 2; x = x++ + ++x;

汇编分析下、VC6.0

int x = 2;

x = x++ + ++x;

// x 地址赋值
mov dword ptr [x], 2 // x = 2
// 这里把x值赋值给eax寄存器运算、最后在返回给x
mov eax,dword ptr [x]
add eax,1 
mov dword ptr [x],eax // x += 1
// 把当前为3的x值赋值给ecx寄存器
mov ecx,dword ptr [x]
// x当前为3
add ecx,dword ptr [x] 
// x += x
mov dword ptr [x],ecx
// 现在x=6
mov edx,dword ptr [x]
// x += 1
add edx,1
// 最终 x = 7
mov dword ptr [x],edx

 本来按照正常理解 x ++ 后加、应该是 x = 2 + 3 = 5的、然后结果却是 7、按照汇编解析出的逻辑顺序如下

int x = 2;
/*
x = x++ + ++x 分解为
x = x地址 + x地址;
++x先加1了、然后上面就是 x = 3 + 3、然后在加一个后置++
大概如下:
*/
++ x;
x += x;
x ++;

上述的是在VC6编辑器上测试的、而在Java jdk8中、结果却是6、

x = x ++ + ++x; // 2 + 3、返回给x后在后置++

javap查看

int x = 2;
x = x++ + ++x;
// javap分析
iconst_2 // int x = 2;
istore_1 // 将int类型值存入局部变量1
iload_1 // 从局部变量1中装载int类型值
iinc 1, 1 // 把一个常量值加到一个int类型的局部变量上: x ++
iinc 1, 1 // x ++、此时 x = 4
iload_1
iadd // 栈顶为2、最后2+4、最终结果为6
istore_1 // 最后将值返回给栈
posted @   鐡道  阅读(311)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示