我正在尝试调和x86中寻址内存的主要类别之间的差异,并希望了解我是否正确。如果我对事情的理解正确,则可以使用三种广泛的方法,每种方法都有自己的语法。
以下示例将src
用于不同的地址方法:
文字/即时值。
例如,将十进制值10
移到%eax
中:
mov $10, %eax
直接注册寻址。
直接:例如,将%ebx
中的值移动到%eax
中:
mov %ebx, %eax
间接:这使用#3中讨论的格式。
偏移/索引/间接寻址:
例如,相对于寄存器:
mov -4(%ebp), %eax
例如,相对于标签或地址:
mov string(,%edi, 4), %eax
但是,我的主要问题是三个主要类别不能互换使用。
例如,我们不能在offset
寻址中使用立即数,例如:
mov $2(%edi), %eax
或者,在进行直接寄存器寻址时,我们不能使用偏移量,例如:
mov %eax(,%edi,2), %eax
是对内存寻址的三种主要形式的正确理解,还是这里我缺少一些东西?