我正在写一篇有关编程语言发展的文章,并在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类型。
所以我想知道:
答案 0 :(得分:2)
根据程序员的MIPS32™体系结构第一卷:MIPS32™体系结构简介,只有R-Type格式具有function
字段。 BREAK
有一个function
字段,因此它是R型指令。
由于BREAK
指令不接受任何操作数,因此它不使用位6..25。这不是很不寻常;例如,SLL
不使用rs
字段,因此这些位被设置为零,而MULT
不使用rd
或{ {1}}字段,因此所有这些位都设置为零。
关于发生的情况:CP0寄存器13(sa
)中的相关位将被设置为指示由于达到断点而发生了异常。然后,控制权将被转移到某个固定地址处的异常处理程序代码。