我只是想确保我正确读到这个:
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?
答案 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>