You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何理解含movl的x86汇编代码中-4(%rsp)的含义?

x86 AT&T汇编寻址与lea指令规则解答

你混淆了AT&T汇编的语法规则和其他汇编语法的寻址写法,核心错误点和解释如下:

  • 首先明确:-4(%rsp)是AT&T汇编标准的基址偏移寻址写法,没有你认为的需要额外加双层括号的规则,(-4(%rsp))属于非法语法。
    这类寻址写法的含义默认对应「访问计算出的地址指向的内存空间」,仅在lea指令中有特殊定义:
    • 用于普通指令(如mov)时:先计算地址 = %rsp寄存器值 -4,再读写这个地址对应的内存位置,所以第一行movl $0,-4(%rsp)是完全正确的写法,作用就是把立即数0写入rsp-4对应的内存,对应你注释的t=0逻辑。
    • 用于lea指令时:lea全称是Load Effective Address(加载有效地址),设计目的就是专门做地址计算,它的源操作数哪怕用了内存寻址格式,也不会真的访问内存,只会把计算得到的地址值直接赋值给目标寄存器。你第二行的leap属于笔误,正确写法是leaq -4(%rsp),%rax,作用就是把计算得到的rsp-4地址本身存入%rax,对应你注释的&t逻辑。
  • 可以通过两个指令的对比快速理解差异:
    • movl -4(%rsp), %eax:读取rsp-4地址中存储的t的值,赋值给eax,等价于C逻辑eax = t
    • leal -4(%rsp), %eax:仅计算rsp-4这个地址的数值,赋值给eax,等价于C逻辑eax = &t

内容的提问来源于stack exchange,提问作者dubugger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:36:01