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?
指令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.