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
相关产品推荐
相关产品推荐

