Idi*_*ere 6 assembly mips cpu-registers
我对x86-64汇编(可能不是专家)很有帮助,但是从一个平台的汇编程序到下一个汇编程序的许多方面都很相似,所以我也试图回答实际上并不属于我的知识范围的问题,我偶然发现了几个关于MIPS组装的问题.
这唤醒了我对细节的兴趣,所以我查了几个在线资源以获取详细信息.mips.com有很多东西要读,但仅仅是为了我的快速信息:
是$zero寄存器只是传统的零或零的硬件?
一些消息来源说,它通常为零,其他人声称它总是零.或者后者只是假设它为零,因为它通常是?
提前感谢澄清(和/或指向MIPS网站的特定文档,因此我不需要抓取我实际上不需要的信息).
对MSP32®架构的程序员可以找到明确的答案第一卷:MIPS32®架构简介(pdf),可在mips.com上获得(需要注册).根据该文件第2.4.8.1节:
两个CPU通用寄存器分配了功能:
r0硬连接到零值,并且可以用作要丢弃其结果的任何指令的目标寄存器.当需要零值时,r0也可以用作源.
r31是JAL,BLTZAL,BLTZALL,BGEZAL和BGEZALL使用的目标寄存器,未在指令字中明确指定.否则r31用作普通寄存器.
其余寄存器可用于一般用途.
排名前5的参考文献称这是一个很难(是| ired)零.
而且,无论多么令人惊讶,MIPS并不是唯一一个拥有如此奇怪的寄存器的人.
为了进行比较,TI的MSP430有两个特殊寄存器:R2(状态寄存器)和R3(常数发生器).当您通过它们读取内存操作数(或直接读取R3)时,您将获取以下预定义常量之一:-1,0,1,2,4,8.常量取决于寄存器编号和访问类型(直接,索引,间接,间接+自动增量).这减少了代码大小和(AFAIR)执行时间,因为否则立即常量占用16位并需要获取.