x86简单的mov指令

时间:2011-09-22 16:46:02

标签: x86 att mov

这是一个简单的问题,但我无法在谷歌找到可靠的答案。

这条指令意味着什么:

movl %eax, (%esi, %ecx, 4)

它是否将寄存器eax的值移动到(%esi, %ecx, 4)指向的内存中的值?

(%esi, %ecx, 4)用于数组。所以它意味着Array [Xs + 4i],其中Xs是数组内存的起点,而i只是整数数组中的偏移量。

2 个答案:

答案 0 :(得分:4)

完全正确。这是AT& T语法,因此源首先出现,然后是目的地。因此,它将eax寄存器的内容存储到存储单元esi + 4*ecx

如果您想将此视为一个数组,它会将eax存储到基于ecx的4字节对象数组的esi条目中。

答案 1 :(得分:2)

是的,这就是它的本质。在AT& T语法中,存储器寻址被写为:

offset(base, index, multiplier)

offset是一个带符号的常量,用于指定base的偏移量,base是一个从哪里开始的寄存器,index是指定启动后多远的寄存器在乘以multiplier之后要查看的数组,可以是1,2,4或8。

您必须至少指定offsetbaseindex中的一个。要在没有index的情况下使用base,您需要在其前面加上逗号((, index))。如果您未指定multiplier,则默认为1。

在Intel语法中,这写为:

[base + index*multiplier + offset]

这更容易理解,因为它只是一个数学问题。