【发布时间】:2019-04-10 19:35:16
【问题描述】:
我正在写一篇关于编程语言演变的文章,并在 MIPS 汇编中编写了一个小程序,用于计算前 100 个素数。该程序的(伪)指令之一是“rem $t3, $t0, $t2”,它被转换为以下四个本机指令:
bne $10, $0, 0x00000001
break
div $8, $10
mfhi$11
我以前从未注意到中断指令,所以我到处搜索,几乎找不到任何关于中断指令或其类型的提及。
我能找到的仅有的两个文档,其中this one 将“break”声明为调试器使用的指令,this other one 将“break”声明为包含三个部分的指令:特殊(6 位)、代码( 20 位)和中断(6 位),但它没有提及该指令的类型。它肯定不是 R、I 或 J 型。
所以我想知道:
- 中断指令是 MIPS ISA 的一部分还是仅是一条指令 MARS 能识别吗?
- break指令的指令类型是什么?
- 它如何将控制权转移到硬件中的异常处理程序?
- 它会改变程序计数器 (PC) 寄存器吗?
【问题讨论】:
-
机器码字的数值是多少?我忘记了 MARS 是否很容易向您显示,但如果不是,您可以在上面贴上标签并
lw代码字。 -
操作码为 0x00。是的,MARS 显示每条指令的十六进制值。
标签: assembly mips mars-simulator