添加(汇编)指令不像我认为的那样工作

时间:2018-04-29 19:51:11

标签: assembly x86

我有一行add (%ecx,%esi,4),%edx

我正在使用gdb来查看代码,并注意到如果使用x / d在ecx中打印值,它会打印2(如果我使用x / s打印" / 002",idk if这是相关的)。

然后寄存器esi保持0x2。

我认为add的作用类似于edx = ecx + (esi * 4),应该是0xA,但在此edx保持0x6之后。

我已经查找了添加语法,我相信我已经做到了,所以我想知道为什么它出现为0x6。

1 个答案:

答案 0 :(得分:0)

首先你的程序集在 AT& T语法中,这意味着指令如下:

movl src,dest

给出的代码实际上就像 this

一样
  

然后寄存器esi保持0x2。我认为add会像edx = ecx +(esi * 4)一样工作,它应该是0xA,但在此edx保持0x6之后。

它实际上是这样的:将edx的值添加到地址处的值(ecx + esi * 4)