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

What type is the break instruction on MARS (MIPS Assembly)

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

1
2
3
4
bne $10, $0, 0x00000001
break
div $8, $10
mfhi$11

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

我只能找到两个文档,其中一个将" break"声明为调试器使用的指令,另一个将" break"声明为指令,分为三个部分:特殊(6位),代码(20位)和中断(6位),但未引用此指令的类型。它肯定不是R,I或J类型。

所以我想知道:

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

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

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

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