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

问题描述 投票:0回答:1

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

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

assembly stack mips callstack stack-pointer
1个回答
2
投票

模拟器(即 QtSPIM)使用堆栈指针做奇怪的事情;当堆栈指针(在

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.