lea assembly instruction

11

我只想确定我理解得对:

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?


https://dev59.com/aHI-5IYBdhLWcg3w0MHx?rq=1 - Ciro Santilli OurBigBook.com
2个回答

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

8

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接