首页 > 其他 > 详细

学习:数学指令

时间:2019-12-15 20:22:44      阅读:126      评论:0      收藏:0      [点我收藏+]

add指令:加

之前测试的时候用的都是add eax,0x1,其实add不仅可以给寄存器的地址加值add eax,0x1,还可以给取地址的值加值add dword ptr ds:[0x402000],0x2,也同样可以寄存器给寄存器加值add eax,ecx,如下图值为4的原因是自己原本就给了2,为什么是第一个为4呢,因为是倒着来的,实际值应该是00000004
技术分享图片


sub指令:减

跟上面一样,同样可以进行给寄存器的地址减值sub eax,0x1,还可以给取地址的值加值sub dword ptr ds:[0x402000],0x2,也同样可以寄存器给寄存器加值sub eax,ecx,如下图原本值为4减2了,就自然是2了
技术分享图片


adc指令:加的时候需要考虑上进位标志CF

1、修改当前地址的汇编指令为adc eax,0x1
2、单步步过
发现eax中的地址值加1
技术分享图片

3、把C寄存器置为1
4、修改汇编指令adc eax,0x1
5、单步步过

发现eax的地址值为3,也就是说加了2,所以adc指定加的时候需要考虑上进位标志CF
技术分享图片


sbb指令:减的时候需要考虑上进位标志CF

1、修改当前地址的汇编指令为sbb eax,0x1
2、单步步过
发现eax中的地址值减1,eax的地址值为2
技术分享图片

3、把C寄存器置为1
4、修改汇编指令sbb eax,0x1
5、单步步过

发现eax的地址值为0,也就是说减了2,所以sbb指定减的时候需要考虑上进位标志CF
技术分享图片


inc指令:递增

1、修改多个连续地址的汇编指令为inc eax,0x1
2、单步步过

技术分享图片

那么在C语言中,一个变量的值是存储在相应的内存地址中的,我们也可以尝试实现对地址中的数值进行操作,同样可以通过汇编语言实现inc dword ptr ds:[0x402000],这是肯定的
技术分享图片


dec指令:递减

1、把当前的eax的寄存器中的地址值修改为00001234
3、然后修改多个连续地址的汇编指令为dec eax,0x1
2、继续单步步过
技术分享图片

那么在C语言中,一个变量的值是存储在相应的内存地址中的,我们也可以尝试实现对地址中的数值进行操作,同样可以通过汇编语言实现dec dword ptr ds:[0x402000],这是肯定的
技术分享图片

学习:数学指令

原文:https://www.cnblogs.com/zpchcbd/p/12045478.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!