assembly - 为什么 MIPS 堆栈基数是 0x7ffffffc 而不是 0x80000000
问题描述
为什么 MIPS 堆栈基数是 0x7ffffffc 而不是 0x80000000?
如果我理解正确,堆栈指针是指放置在堆栈上的最后一项。那么,如果是这种情况,这是否意味着地址 0x7ffffffc 永远不会被使用,因为将整数压入堆栈的传统方法是将 $sp 递减到 0x7ffffff8 并将压入的值放在那里?
解决方案
模拟器(即QtSPIM)用堆栈指针做奇怪的事情;当堆栈指针被修改时,而不是在堆栈内存被存储到时,它们会采取行动——例如为堆栈分配额外的内存。(因此,您可以通过在堆栈指针寄存器中放置一个随机值来给这些模拟器带来严重的痛苦。)
我的猜测是,由于 0x80000000 位于受保护的内核内存中,他们根本不希望寄存器中的该值,是的,这意味着永远不会使用内存字。
我敢说实际的硬件不会有这个问题。
推荐阅读
- python - 我想根据用户选择复选框的方式显示部分表单
- sql-server - 引用同一表的列的 OneToOne、OneToMany 或 ManyToOne 关系
- jquery - 代码仅在输入内写入但在 while 循环中使用 echo 时才有效
- r - RDCOMClient 从非 Outlook 文件路径读取电子邮件
- python - 将 Python 对象传递给 Rust
- python - 应用程序调用。TypeError:在 include() 的情况下,视图必须是可调用的或列表/元组
- python - 如何在数据框中选择一定数量的行?
- html - Vimeo iframe 不显示在 div 的顶部
- vb.net - VB.NET中的嵌套while循环
- java - AWS SDK 无法读取环境变量