汇编分析 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 // 最后将值返回给栈
分类:
计算机基础知识
标签:
C、C++、Java
, 汇编
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)