阐明了x86

时间:2020-08-25 04:17:11

标签: assembly memory x86 addressing-mode

我正在尝试调和x86中寻址内存的主要类别之间的差异,并希望了解我是否正确。如果我对事情的理解正确,则可以使用三种广泛的方法,每种方法都有自己的语法。

以下示例将src用于不同的地址方法:

  1. 文字/即时值。

    • 例如,将十进制值10移到%eax中:

      mov $10, %eax
      
  2. 直接注册寻址。

    • 直接:例如,将%ebx中的值移动到%eax中:

      mov %ebx, %eax
      
    • 间接:这使用#3中讨论的格式。

  3. 偏移/索引/间接寻址:

    • 例如,相对于寄存器:

      mov -4(%ebp), %eax
      
    • 例如,相对于标签或地址:

      mov string(,%edi, 4), %eax
      

但是,我的主要问题是三个主要类别不能互换使用

例如,我们不能在offset寻址中使用立即数,例如:

mov $2(%edi), %eax

或者,在进行直接寄存器寻址时,我们不能使用偏移量,例如:

mov %eax(,%edi,2), %eax

是对内存寻址的三种主要形式的正确理解,还是这里我缺少一些东西?

0 个答案:

没有答案