当前的指令集参考手册可在线免费获取:MIPS® Architecture for Programmers Volume II-A: The MIPS32® Instruction Set Manual。该链接是 2016 年 12 月 15 日修订版 6.06。(即它记录了MIPS32 Release 6)。
它记录了所有用户和主管/内核模式指令,以及所有浮点,包括它们的机器代码编码在内的全部细节,并带有一个显示它们做什么的操作部分。它仍然记录了在 MIPS32 第 6 版中删除的所有指令。(MIPS32 第 6 版也移动了很多操作码,这有据可查)。
有关最新版本,请参阅https://www.mips.com/products/architectures/mips32/。mips.com 有一个“经典内核”部分,但这似乎仍然只能追溯到 MIPS32,而不是历史的东西。
balc
(Branch and Link Compact:无分支延迟槽,GRP31 是隐式目的地,为 an 释放 26 位)的“可用性和兼容性”部分的示例offset<<2
:
此指令由第 6 版引入并要求。第 6 版指令BALC
占用与第 6 版之前的指令相同的编码SWC2
。该SWC2
指令已移至COP2
MIPS 版本 6 中的主要操作码
或 for LDXC1 fd, index(base)
(加载索引为浮点的双字)
此指令已在版本 6 中删除。自 MIPS64 版本 1 以来的所有 MIPS64 版本都需要此指令。在 MIPS32 版本 1 中不可用。在 MIPS32 版本 2 和所有后续版本的 MIPS32 中都需要。需要时,只要存在 FPU,无论是 32 位还是 64 位 FPU,无论是处于 32 位还是 64 位 FP 寄存器模式(FIRF64=0 或 1,StatusFR=0 或 1),都需要。
对于历史资料,我在 cmu.edu 网页上找到了1995 年 9 月的 MIPS IV 指令集修订版 3.2 。它列出了何时引入指令,例如 MIPS I 用于div
, MIPS III 用于dmult
和其他 64 位指令, MIPS II 用于ll
/ sc
。
每个指令效果的伪代码快速参考是https://inst.eecs.berkeley.edu/~cs61c/resources/MIPS_help.html。它不包括编码细节,但确实准确地描述了分支和跳转指令对程序计数器的影响。(这有点棘手:它们与分支延迟槽相对或绝对绝对。)
但是,即使对于 MIPS I 整数指令,它也不完整:它缺少 MIPS I 中存在的未对齐加载辅助指令 LWL 和 LWR 以及相应的 SWL/R 存储。它也不包括任何 FP 内容或更高版本的 MIPS 指令喜欢mul
(仅mult
)。我不知道还有什么可能会丢失;我没有对照完整列表交叉引用它。
上面链接的 MIPS-IV 手册确认lwl
/lwr
在 MIPS I 中可用(并记录了加载延迟槽限制适用于它们)。