lea汇编指令

时间:2012-02-05 21:40:07

标签: assembly x86 att addressing-mode

我只是想确保我正确读到这个:

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?

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:7)

指令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不同。< / p>