我有一行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。
答案 0 :(得分:0)
首先你的程序集在 AT& T语法中,这意味着指令如下:
movl src,dest
给出的代码实际上就像 this
一样然后寄存器esi保持0x2。我认为add会像edx = ecx +(esi * 4)一样工作,它应该是0xA,但在此edx保持0x6之后。
它实际上是这样的:将edx
的值添加到地址处的值(ecx + esi * 4)