【问题标题】:where can I find a description of *all* MIPS instructions我在哪里可以找到 *all* MIPS 指令的描述
【发布时间】:2008-09-25 20:38:31
【问题描述】:

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

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

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

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

【问题讨论】:

  • syscall 将控制权转移给主管,但它本身并不需要执行权限,这当然是重点。我不确定 MIPS IV(我搜索的手册)是否有任何总是需要特权的指令,或者那可能是因为我查看的 MIPS IV 手册说它只定义了用户模式指令。 (但它们可能都被实现为系统控制处理器(与协处理器 0 相同?)操作,而不是真正的 CPU 指令。从用户模式访问 CoP​​roc 0 显然取决于另一个位设置,显然,来自对“特权”的快速搜索。 )

标签: assembly mips instruction-set mips32


【解决方案1】:

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

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

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

等一下……

This class website at Cornell 包含指向看似是同一手册但实际上是旧版本的链接,而旧版本的volume 2 确实如此实际上包括有关何时首次引入说明的信息。哇哦!

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

【讨论】:

  • 这很酷,但请注意,MIPS32R2 并不包含之前的所有变体。
  • 希望最有可能向您出售他们最新的 CPU。让旧 CPU 更难使用。
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢你,丹顿!这是有史以来最好的 MIPS 书……不幸的是,大学图书馆非常需要它 :-( 希望当我可以借阅时能够复印一些。
【解决方案3】:

不包括指令描述,但 GNU 汇编器的源代码可能尽可能详细地说明在哪些特定 CPU 上可用的指令。

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

【讨论】:

【解决方案4】:

当前的指令集参考手册可在线免费获得:MIPS® Architecture for Programmers Volume II-A: The MIPS32® Instruction Set Manual。该链接是修订版 6.06 2016 年 12 月 15 日。(即它记录了MIPS32 Release 6)。

它详细记录了所有用户和主管/内核模式指令以及所有浮点,包括它们的机器代码编码,并带有一个操作部分来显示它们的作用。它仍然记录了在 MIPS32 第 6 版中删除的所有指令。(MIPS32 第 6 版也移动了很多操作码,这有据可查)。


有关最新版本,请参阅https://www.mips.com/products/architectures/mips32/。 mips.com 有一个关于“经典内核”的部分,但这似乎仍然只能追溯到 MIPS32,而不是历史的东西。


balc 的“可用性和兼容性”部分示例(分支和链接压缩:无分支延迟槽,GRP31 是隐式目标,为offset<<2 释放 26 位):

此指令由第 6 版引入并要求。 Release 6 指令BALC 占用与 pre-Release 6 相同的编码 指令SWC2SWC2 指令已移至 COP2 MIPS 第 6 版中的主要操作码

或者对于LDXC1 fd, index(base)(加载索引到浮点的双字)

此指令已在版本 6 中删除。 自 MIPS64 第 1 版以来的所有 MIPS64 版本中都需要。在 MIPS32 第 1 版中不可用。在 MIPS64 第 1 版中需要 MIPS32 Release 2 和 MIPS32 的所有后续版本。需要时,只要存在 FPU 就需要, 无论是 32 位还是 64 位 FPU,无论是 32 位还是 64 位 FP 寄存器模式(FIRF64=0 或 1,StatusFR=0 或 1)。


对于历史资料,我在 cmu.edu 网页上找到了MIPS IV Instruction Set Revision 3.2 September, 1995。它列出了何时引入指令,例如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 中可用(以及加载延迟槽限制适用于它们的文档)。

【讨论】:

    【解决方案5】:

    web site (archive.org) 描述了大多数 MIPS 指令集及其编码。但它并不完整:至少缺少 nor 以及其他可能的东西。

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

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

    【讨论】:

    猜你喜欢
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2015-07-16
    • 1970-01-01
    • 2014-04-22
    相关资源
    最近更新 更多