lea汇编指令

Chr*_*gis 7 x86 assembly att addressing-mode

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

movl 12(%ebp), %edx
leal (%edx, %edx, 4), %eax
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以澄清一下吗?

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

leal (%edx, %edx, 4), %eax
leal (%edx, %edx, 2), %eax
Run Code Online (Sandbox Code Playgroud)

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

并将eax = edx + edx*4地址乘以4?或者地址的内容由4?

Dan*_*zar 8

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


Smi*_*Smi 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.