<分区>
当你在汇编中同时使用 MOV 和 LEA 指令时,当有人写下它的真正含义是什么:
mov DWORD PTR [esp+4], 0x80484c
lea eax,[ebp-40]
具体来说,当他们将信息写在括号[]中时。我知道 lea 移动地址而 mov 移动内容,但是当他们计算 lea 或 mov 中的地址时,这实际上是如何工作的?和C中的指针运算一样吗?
<分区>
当你在汇编中同时使用 MOV 和 LEA 指令时,当有人写下它的真正含义是什么:
mov DWORD PTR [esp+4], 0x80484c
lea eax,[ebp-40]
具体来说,当他们将信息写在括号[]中时。我知道 lea 移动地址而 mov 移动内容,但是当他们计算 lea 或 mov 中的地址时,这实际上是如何工作的?和C中的指针运算一样吗?
最佳答案
lea
不会移动 地址,它会计算 有效地址并将结果地址存储到目标寄存器中。地址计算是在机器语言中使用常规算法执行的,而不是 C 指针算法。
lea eax,[ebp-40]
从寄存器 ebp
中的值减去 40
并将结果存储在寄存器 eax
中。
mov DWORD PTR [esp+4], 0x80484c
通过将 4
添加到寄存器 esp
中的值来计算目标地址,并存储值 0x80484c
,整数 8407116
,作为一个 32 位整数,在该地址占用 4 个字节,最低有效字节在前。
关于c - 汇编寄存器算术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38685058/