MARS 上的中断指令是什么类型(MIPS 汇编)
What type is the break instruction on MARS (MIPS Assembly)
我正在写一篇关于编程语言演变的文章,并在 MIPS 汇编中编写了一个小程序来计算前 100 个素数。该程序的(伪)指令之一是 'rem $t3, $t0, $t2',它被转换为以下四个本机指令:
bne , [=10=], 0x00000001
break
div ,
mfhi
我以前从来没有注意到那个 break 指令,所以我到处搜索,几乎找不到任何关于 break 指令或它的类型的信息。
我能找到的仅有的两份文件 this one that states 'break' as an instruction used by the debugger and this other one 将 'break' 声明为包含三个部分的指令:特殊(6 位)、代码(20 位)和中断(6 位)但是它没有提及该指令的类型。它肯定不是R、I或J类型的。
所以我想知道:
- 中断指令是MIPS ISA的一部分还是只是一条指令
MARS 识别?
- 中断指令的指令类型是什么?
- 它如何在硬件中将控制转移到异常处理程序?
- 它会更改程序计数器 (PC) 寄存器吗?
根据 MIPS32™ Architecture For Programmers Volume I: Introduction to the MIPS32™ Architecture,只有 R-Type 格式有一个 function
字段。 BREAK
有一个 function
字段,因此它是一个 R 型指令。
由于 BREAK
指令不接受操作数,因此它不会为此目的使用位 6..25。这并不是那么不寻常;例如,SLL
不使用 rs
字段,因此这些位设置为零,并且 MULT
不使用 rd
或 sa
字段,因此所有这些位都设置为零。
至于会发生什么:CP0 寄存器 13 (Cause
) 中的相关位将被设置为指示由于命中断点而发生异常。然后控制将转移到某个固定地址的异常处理程序代码。
我正在写一篇关于编程语言演变的文章,并在 MIPS 汇编中编写了一个小程序来计算前 100 个素数。该程序的(伪)指令之一是 'rem $t3, $t0, $t2',它被转换为以下四个本机指令:
bne , [=10=], 0x00000001
break
div ,
mfhi
我以前从来没有注意到那个 break 指令,所以我到处搜索,几乎找不到任何关于 break 指令或它的类型的信息。
我能找到的仅有的两份文件 this one that states 'break' as an instruction used by the debugger and this other one 将 'break' 声明为包含三个部分的指令:特殊(6 位)、代码(20 位)和中断(6 位)但是它没有提及该指令的类型。它肯定不是R、I或J类型的。
所以我想知道:
- 中断指令是MIPS ISA的一部分还是只是一条指令 MARS 识别?
- 中断指令的指令类型是什么?
- 它如何在硬件中将控制转移到异常处理程序?
- 它会更改程序计数器 (PC) 寄存器吗?
根据 MIPS32™ Architecture For Programmers Volume I: Introduction to the MIPS32™ Architecture,只有 R-Type 格式有一个 function
字段。 BREAK
有一个 function
字段,因此它是一个 R 型指令。
由于 BREAK
指令不接受操作数,因此它不会为此目的使用位 6..25。这并不是那么不寻常;例如,SLL
不使用 rs
字段,因此这些位设置为零,并且 MULT
不使用 rd
或 sa
字段,因此所有这些位都设置为零。
至于会发生什么:CP0 寄存器 13 (Cause
) 中的相关位将被设置为指示由于命中断点而发生异常。然后控制将转移到某个固定地址的异常处理程序代码。