c - 汇编寄存器算术?

标签 c assembly pointer-arithmetic

<分区>

当你在汇编中同时使用 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/

相关文章:

c - 尽管未设置 AI_PASSIVE,Getaddrinfo() 返回通配符地址

c - C 变量无法解释的变化

c - 用c语言在localhost上传adobe reader文件

c - 如何在 x86 中编写 C "&&"运算符?

assembly - 处理器是否将数据从 'L1 code' 缓存切换到 'L1 data' 缓存?

c++ - 不明白为什么while(* ptr++)输入while循环以获取0值(字符串终止符)

c - 指针运算和数组 : what's really legal?

C 语言我在执行二分搜索函数并将数组传递给函数时遇到问题?

c - 指针算术有效,但指针解除引用无效

c - 为什么这个 x86_64 汇编代码不起作用?