14

有谁知道一个网站,我可以在其中找到 32 位 MIPS 指令/操作码列表,具有以下功能:

  • 清楚地区分真正的操作码和汇编语言宏(伪指令)
  • 描述指令行为,包括取决于特权级别的差异。
  • 指示在哪个指令集修订版中引入/修订了指令(例如 MIPS I、MIPS II、MIPS32 等)
  • 包括特权指令,例如系统调用。

我知道有许多网站记录了指令集的“一部分”,主要用于教学目的。他们倾向于省略或仅部分描述浮点和特权指令。

如果您想知道,我正在查看 MIPS 处理器子集的 Verilog 代码,并试图弄清楚它在多大程度上符合任何真正的 MIPS 处理器的指令集!

4

5 回答 5

6

好的,我发现了一些东西!

MIPS 提供了一套“MIPS 32 参考手册”,参考了最新的标准化指令集 (MIPS32v2):这里

这些包括几乎所有内容,除了关于指令起源于哪个版本的信息:-(

等一下...

康奈尔的这个课程网站包含看似相同的手册的链接,但实际上是它的旧版本,并且该旧版本的第 2 卷实际上包含有关何时首次引入说明的信息。呜呼!

为什么 MIPS 会从修订后的文档中删除这些信息?修订历史中似乎没有任何解释。

于 2008-09-25T21:34:31.430 回答
3

我只能部分回答这个问题:如果您还没有提到它,我推荐See MIPS Run by Dominic Sweetman。我有这本书的第一版,现在是第二版。

  • 表 8.2 列出了每个操作码和预期行为,区分了汇编器宏并列出了它们分解成的指令。不幸的是,它没有区分用户模式和内核模式。
  • 表 8.6 列出了引入每条指令的 ISA 级别,包括 LSI MiniRISC 等晦涩的变体
  • 系统调用存在于表中,但缺乏太多描述

第一版提到了内核。主管和用户权限级别,但没有讨论每个权限级别允许哪些操作。我不知道第二版做了什么改动。

于 2008-09-25T21:04:52.440 回答
3

不包括指令描述,但 GNU 汇编器的源代码可能与您可以获得的关于在哪些特定 CPU 上可用的指令一样详细。

获取binutils并查看 opcodes/mips-*.c

于 2008-09-25T21:15:21.510 回答
1

当前的指令集参考手册可在线免费获取: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 中可用(并记录了加载延迟槽限制适用于它们)。

于 2017-11-22T10:43:26.237 回答
0

网站 (archive.org)描述了大多数 MIPS 指令集及其编码。但是,它并不完整:至少nor还缺少其他东西。

每个指令效果的伪代码快速参考是https://inst.eecs.berkeley.edu/~cs61c/resources/MIPS_help.html。它不包括编码细节。

MIPS网站也有关于各种内核的技术文档。
例如,我下载了 MIPS 4KE 内核的手册(文档 #MD00103)“MIPS32® 4KE™ 处理器内核系列软件用户手册”,第 10 章包含指令集的详细说明。请注意,您必须注册才能访问这些文件。

于 2008-09-25T21:23:20.337 回答