【问题标题】:$zero on MIPS really hardware zero?MIPS 上的 $zero 真的是硬件零吗?
【发布时间】:2012-09-14 12:29:27
【问题描述】:

我对 x86-64 汇编有点坚定(也许不是专家),但是从一个平台的汇编器到下一个平台的汇编器,许多方面都是相似的,所以我也在尝试回答实际上不在我范围内的问题知识,我偶然发现了几个关于 MIPS 汇编的问题。

这唤醒了我对细节的兴趣,因此我查看了几个在线资源以获取详细信息。 mips.com 有很多内容要阅读,但仅供参考:

$zero 寄存器只是常规零还是硬件零?

一些消息来源说它通常为零,另一些则声称它始终为零。还是后者只是假设它为零,因为它通常是?

提前感谢您的澄清(和/或指向 MIPS 网站上特定文档的指针,因此我不需要抓取我实际上不需要的信息)。

【问题讨论】:

  • 我很确定这是一个硬件零寄存器。

标签: assembly mips cpu-registers


【解决方案1】:

前 5 名的参考资料说这是一个硬(是|ired)零。

而且,无论这多么令人惊讶,MIPS 并不是唯一拥有如此奇怪的寄存器的人。

作为比较,TI 的 MSP430 有两个特殊寄存器:R2(状态寄存器)和 R3(常数发生器)。当您通过它们读取内存操作数(或直接读取 R3)时,您会获取以下预定义常量之一:-1、0、1、2、4、8。该常量取决于寄存器编号和访问类型(直接、索引、间接、间接+自动增量)。这减少了代码大小和(AFAIR)执行时间,因为否则立即常量占用 16 位并且需要获取。

【讨论】:

  • 接受的答案是否说寄存器不是硬件(are|ired)零?
  • 我明白了,这是对其他正确答案投反对票的好理由。
【解决方案2】:

MIPS32® 程序员架构第一卷:MIPS32® 架构简介 (pdf) 中可以找到对此的权威 答案,@ 987654321@(需要注册)。根据该文档中的第 2.4.8.1 节:

两个 CPU 通用寄存器已分配功能:

  • r0 硬连线为零,可用作目标 注册任何其结果将被丢弃的指令。 r0 可以 当需要零值时,也可以用作源。

  • r31 是 JAL、BLTZAL、BLTZALL 使用的目标寄存器, BGEZAL 和 BGEZALL 没有在 指示词。否则 r31 用作普通寄存器。

其余寄存器可用于通用用途。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-20
    • 2020-05-18
    • 1970-01-01
    • 2016-02-24
    • 2013-06-11
    • 1970-01-01
    • 2014-08-02
    • 2016-05-08
    相关资源
    最近更新 更多