MARS(MIPS汇编)上的中断指令是什么类型

时间:2018-11-07 11:12:09

标签: assembly mips mars-simulator

我正在写一篇有关编程语言发展的文章,并在MIPS Assembly中编写了一个小程序来计算前100个素数。该程序的(伪)指令中的“ rem $ t3,$ t0,$ t2”被转换为以下四个本机指令:

bne $10, $0, 0x00000001
break
div $8, $10
mfhi$11

我以前从没注意到过中断指令,所以我到处搜索,几乎找不到提及中断指令或其类型的信息。

我只能找到两个文档,其中this one声明调试器使用的指令为“ break”,而this other one则将调试器的指令声明为“中断”,分为三个部分:特殊(6位),代码(20位)和中断(6位),但未引用此指令的类型。当然不是R,I或J类型。

所以我想知道:

  1. 是MIPS ISA的中断指令部分还是仅一条指令 火星识别吗?
  2. 中断指令的指令类型是什么?
  3. 它如何将控件转移到硬件中的异常处理程序上?
  4. 它会更改程序计数器(PC)寄存器吗?

1 个答案:

答案 0 :(得分:2)

根据程序员的MIPS32™体系结构第一卷:MIPS32™体系结构简介,只有R-Type格式具有function字段。 BREAK有一个function字段,因此它是R型指令。

由于BREAK指令不接受任何操作数,因此它不使用位6..25。这不是很不寻常;例如,SLL不使用rs字段,因此这些位被设置为零,而MULT不使用rd或{ {1}}字段,因此所有这些位都设置为零。

关于发生的情况:CP0寄存器13(sa)中的相关位将被设置为指示由于达到断点而发生了异常。然后,控制权将被转移到某个固定地址处的异常处理程序代码。