MIPS真的硬零为零?

Idi*_*ere 6 assembly mips cpu-registers

我对x86-64汇编(可能不是专家)很有帮助,但是从一个平台的汇编程序到下一个汇编程序的许多方面都很相似,所以我也试图回答实际上并不属于我的知识范围的问题,我偶然发现了几个关于MIPS组装的问题.

这唤醒了我对细节的兴趣,所以我查了几个在线资源以获取详细信息.mips.com有很多东西要读,但仅仅是为了我的快速信息:

$zero寄存器只是传统的零或零的硬件?

一些消息来源说,它通常为零,其他人声称它总是零.或者后者只是假设它为零,因为它通常是?

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

mar*_*kgz 8

MSP32®架构的程序员可以找到明确的答案第一卷:MIPS32®架构简介(pdf),可在mips.com上获得(需要注册).根据该文件第2.4.8.1节:

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

  • r0硬连接到零值,并且可以用作要丢弃其结果的任何指令的目标寄存器.当需要零值时,r0也可以用作源.

  • r31是JAL,BLTZAL,BLTZALL,BGEZAL和BGEZALL使用的目标寄存器,未在指令字中明确指定.否则r31用作普通寄存器.

其余寄存器可用于一般用途.


Ale*_*nze 5

排名前5的参考文献称这是一个很难(是| ired)零.

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

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