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

x86汇编leaq指令运算疑问:为何指定代码执行后%rsi的值为20

汇编指令运行结果解答

涉及的代码段如下:

leaq 20(%rdi),%rsi
subq %rdi, %rsi

运算逻辑拆解

  • leaq是加载有效地址指令,它的核心功能是完成地址数值运算,不会根据计算出的地址去内存读取实际存储的数据,而是直接把运算得到的地址数值赋值给目标寄存器。
  • 第一条指令leaq 20(%rdi),%rsi执行时,20(%rdi)的地址计算规则为「%rdi存储的数值 + 20」,执行完成后%rsi的取值就是%rdi + 20。
  • 第二条指令subq %rdi, %rsi遵循x86汇编subq 源操作数, 目标操作数的运算规则,即目标操作数 = 目标操作数 - 源操作数,代入%rsi当前值计算可得:%rsi = (%rdi + 20) - %rdi = 20。

疑问澄清

你之前的理解和实际逻辑本质是一致的:你提到的「%rdi加20的地址」本身的数值就是%rdi + 20,减去%rdi的取值后结果自然为20,整个过程仅涉及寄存器数值运算,和内存实际存储的内容无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:33:01