【问题标题】:lea assembly instructionlea 汇编指令
【发布时间】:2012-02-27 12:35:46
【问题描述】:

我只是想确保我没看错:

movl 12(%ebp), %edx
leal (%edx, %edx, 4), %eax

第一行读为:edx = [epb + 12],第二行读为:eax = edx + edx*4

谁能澄清一下?

另外,如果我有以下两行:

leal (%edx, %edx, 4), %eax
leal (%edx, %edx, 2), %eax

一旦执行第二行,eax 寄存器会被覆盖吗?

eax = edx + edx*4 将地址乘以 4?还是地址内容减4?

【问题讨论】:

标签: assembly x86 att addressing-mode


【解决方案1】:

指令movl 12(%ebp), %edx 的意思是:edx = [ebp + 12]。这是对地址ebp + 12 的内存引用(读取操作),其内容(双字)被读取到edx 寄存器。

指令leal (%edx, %edx, 4), %eax 的意思是:eax = edx * 5(是eax = edx + edx * 4 的简化版)。 leal 指令不做内存引用。它只对寄存器进行算术运算。

作为对第二个问题的回答:是的,eax 将被覆盖,因为指令 leal (%edx, %edx, 2), %eax 表示 eax = edx * 3,这与第一条指令 eax = edx * 5 不同。

【讨论】:

    【解决方案2】:

    你是对的。 LEA 指令用于加载有效地址,可用于地址算术,有时也可用于普通算术,如果您不需要标志。

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      • 2018-07-28
      • 2023-04-02
      • 2012-02-27
      • 2011-09-13
      • 2011-05-30
      相关资源
      最近更新 更多