【学习笔记】从汇编看 a+++a与 a+a++的区别

汇编代码查看方法

使用VS2019,新建断点在需要查看的代码文件里,然后点击调试,在调试过程中,点击调试-》窗口-》反汇编,就能看到当前代码的汇编格式了
在这里插入图片描述

a+++a与 a+a++的汇编指令与直译

声明变量 a,b,c的汇编指令
          int a = 1;
00007FF9854D0FDC  mov         dword ptr [rbp+34h],1  
          int b = 1;
00007FF9854D0FE3  mov         dword ptr [rbp+30h],1  
          int c = 1;
00007FF9854D0FEA  mov         dword ptr [rbp+2Ch],1
a+++a的汇编指令
00007FF9854D0FF1  mov         ecx,dword ptr [rbp+34h]  
00007FF9854D0FF4  mov         dword ptr [rbp+28h],ecx  
00007FF9854D0FF7  mov         ecx,dword ptr [rbp+34h]  
00007FF9854D0FFA  inc         ecx  
00007FF9854D0FFC  mov         dword ptr [rbp+34h],ecx  
00007FF9854D0FFF  mov         ecx,dword ptr [rbp+28h]  
00007FF9854D1002  add         ecx,dword ptr [rbp+34h]  
00007FF9854D1005  mov         dword ptr [rbp+2Ch],ecx  
a+++a的汇编指令直译
把变量a内存地址的数据赋给寄存器ecx
寄存器ecx的数据赋给rbp+28h内存地址
把变量a内存地址的数据赋给寄存器ecx
寄存器ecx的值自加1
寄存器ecx的数据赋给变量a内存地址(PS:这个时候就a完成自增并且a=2)
把rbp+28h内存地址的数据赋给寄存器ecx
将寄存器ecx的值与变量a内存地址的值相加,并将值赋予寄存器ecx
寄存器ecx的数据赋给变量c内存地址
a+a++的汇编指令
00007FF9854D100F  mov         ecx,dword ptr [rbp+34h]  
00007FF9854D1012  mov         dword ptr [rbp+24h],ecx  
00007FF9854D1015  mov         ecx,dword ptr [rbp+34h]  
00007FF9854D1018  mov         dword ptr [rbp+20h],ecx  
00007FF9854D101B  mov         ecx,dword ptr [rbp+34h]  
00007FF9854D101E  inc         ecx  
00007FF9854D1020  mov         dword ptr [rbp+34h],ecx  
00007FF9854D1023  mov         ecx,dword ptr [rbp+24h]  
00007FF9854D1026  add         ecx,dword ptr [rbp+20h]  
00007FF9854D1029  mov         dword ptr [rbp+30h],ecx 
a+a++的汇编指令直译
把变量a内存地址的数据赋给寄存器ecx
寄存器ecx的数据赋给rbp+24h内存地址
把变量a内存地址的数据赋给寄存器ecx
寄存器ecx的数据赋给rbp+20h内存地址
把变量a内存地址的数据赋给寄存器ecx
寄存器ecx的值自加1
寄存器ecx的数据赋给变量a内存地址(PS:这个时候就a完成自增并且a=2)
把rbp+24h内存地址的数据赋给寄存器ecx
将寄存器ecx的值与rbp+20内存地址的值相加,并将值赋予寄存器ecx(结果为2)
寄存器ecx的数据赋给变量b内存地址

a+++a与 a+a++的汇编指令的区别

a+++a与 a+a++的汇编指令的直接区别在于a+a++声明了一个新的内存地址,该内存地址装载了a未自增的值,并且参与计算的是该内存地址,而非自增后的a。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值