assembly - 为什么 MIPS 堆栈基址是 0x7ffffffc 而不是 0x80000000

标签 assembly stack mips callstack stack-pointer

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

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

最佳答案

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

我的猜测是,由于 0x80000000 位于 protected 内核内存中,因此他们根本不希望寄存器中存在该值,是的,这意味着从未使用过内存字。

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

关于assembly - 为什么 MIPS 堆栈基址是 0x7ffffffc 而不是 0x80000000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64652850/

相关文章:

assembly - Ti-89 68k 程序集中的函数指针

c - 阻止 Keil uvision 在函数调用时推送寄存器

c - 使用 malloc() 和 sizeof() 函数时出错

将大端 MIPS 转换为 C

assembly - 从 x86-64 打印 float 似乎需要保存 %rbp

c - 运行时检查失败 #2-变量 x2 周围的堆栈已损坏

C, 变量 f1 周围的堆栈被破坏

c - MIPS的堆栈让我脑洞大开

io - MIPS 文件打开

c - 使用c模拟x86 32位汇编运行