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

MIPS栈指针地址计算异常咨询:为何分配后地址非预期值

MIPS栈指针差异原因分析

核心原因:递归调用导致多次栈空间分配

你的代码中,初始a0=5,会触发三次fun的递归调用,每次进入fun都会执行addi sp, sp, -20来分配栈空间:

  • 第一次进入fun:栈指针从初始的0x7FFFF628减20,变为0x7FFFF614
  • 执行addi a0, a0, 1后a0=6,通过jal fun进入第二层递归:栈指针再次减20,变为0x7FFFF600
  • 第二层中a0变为7,继续调用jal fun进入第三层:栈指针进一步减20到0x7FFFF5EC

如果你是在第二层递归完成栈分配后查看sp值,得到的就是0x7FFFF600,这和你仅计算单次分配的预期值自然存在差异。

你的预期值计算存在错误

你预期的0x7FFFF608是0x7FFFF628减去32(十六进制0x20)的结果,但代码中明确是分配20字节栈空间,单次分配后正确的sp值应为0x7FFFF628 - 20 = 0x7FFFF614。显然你误将栈分配大小当成了32字节,导致预期值本身计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:42:44