首页 > 解决方案 > 为什么 MIPS 堆栈基数是 0x7ffffffc 而不是 0x80000000

问题描述

为什么 MIPS 堆栈基数是 0x7ffffffc 而不是 0x80000000?

如果我理解正确,堆栈指针是指放置在堆栈上的最后一项。那么,如果是这种情况,这是否意味着地址 0x7ffffffc 永远不会被使用,因为将整数压入堆栈的传统方法是将 $sp 递减到 0x7ffffff8 并将压入的值放在那里?

标签: assemblystackmipscallstackstack-pointer

解决方案


模拟器(即QtSPIM)用堆栈指针做奇怪的事情;当堆栈指针被修改时,而不是在堆栈内存被存储到时,它们会采取行动——例如为堆栈分配额外的内存。(因此,您可以通过在堆栈指针寄存器中放置一个随机值来给这些模拟器带来严重的痛苦。)

我的猜测是,由于 0x80000000 位于受保护的内核内存中,他们根本不希望寄存器中的该值,是的,这意味着永远不会使用内存字。

我敢说实际的硬件不会有这个问题。


推荐阅读