汇编寄存器算术?
这个问题在这里已经有了答案:
lea
不会移动地址,它会计算有效地址并将结果地址存储到目标寄存器中。 地址计算是用机器语言以常规算术进行的,而不是C指针算术。
lea eax,[ebp-40]
从寄存器ebp
的值中减去40
,并将结果存储在寄存器eax
。
mov DWORD PTR [esp+4], 0x80484c
通过将寄存器esp
包含的值加上4
来计算目标地址,并将值0x80484c
(整数8407116
存储为该地址处占用4个字节的32位整数,最低有效字节在前。
lea
只是计算表达式并将其保存到变量中。 它实际上并没有对内存或内存地址做任何事情,即使它被命名为“加载有效地址”。
例如lea eax,[ebp-40]
意味着eax = ebp - 40
。
它可以用来计算表达式,否则会采取几个指令,例如:
lea eax, [8 * eax + ebx + 10]
用一条指令计算eax = 8 * eax + ebx + 10
。
另一方面, mov
与[...]
,会从/向内存读取/写入内容,所以它有点像使用C指针。
mov DWORD PTR [esp+4], 0x80484c
这将32位无符号整数( DWORD
)值0x80484c
到内存位置esp + 4
,即与以下伪C相同:
*((uint32_t*)(esp + 4)) = 0x80484c;
链接地址: http://www.djcxy.com/p/72373.html
上一篇: Assembly Register Arithmetic?
下一篇: LEA in x86 assembly