我正在尝试查找有关异常和中断的 MIPS 文档

问题描述 投票:0回答:1

我正在尝试查找有关 MIPS Coprocessor0 的文档,例如命令,以及一般示例以及异常处理和中断背后的逻辑。有人可以帮助我吗?

我期待一些参考书目、pdf 或网站。

exception arm mips interrupt
1个回答
0
投票

您可以在 MARS 的帮助菜单中找到有关 MIPS 协处理器 0 和异常处理的文档。

另外,这里:https://web.archive.org/web/20240905165429/https://courses.missouristate.edu/KenVollmar/mars/Help/MarsExceptions.html

这描述了协处理器0的操作,ecause、epc、eret等..

MARS 模拟 MIPS32 异常机制的基本元素。

MIPS 指令集包括许多基于两个寄存器或常量与寄存器的相对值有条件触发陷阱异常的指令:teq、teqi(如果相等则陷阱)、tne、tnei(如果不相等则陷阱) , tge, tgeu, tgei, tgeiu(大于或等于则陷阱),tlt, tltu, tlti, tltiu(小于则陷阱)

发生异常时,

  1. 协处理器 0 寄存器 $12(状态)位 1 已设置
  2. 协处理器0寄存器$13(原因)位2-6被设置为异常类型(代码如下)
  3. 协处理器0寄存器$14(epc)被设置为触发异常的指令的地址
  4. 如果异常是由无效内存地址引起的,协处理器 0 寄存器 $8 (vaddr) 将设置为无效地址。
  5. 执行流程跳转到内存位置0x800000180处的MIPS指令。内核文本段(.ktext 指令)中的该地址是标准 MIPS32 异常处理程序位置。在 MARS 中更改它的唯一方法是通过“设置”菜单项“内存配置”更改 MIPS 内存配置。
  • 可以通过三种方式在 MIPS 程序中包含异常处理程序
  1. 将异常处理程序编写在与常规程序相同的文件中。下面给出了一个例子。
  2. 将异常处理程序编写在单独的文件中,将该文件存储在与常规程序相同的目录中,然后选择“设置”菜单项“组合目录中的所有文件”
  3. 在单独的文件中编写异常处理程序,将该文件存储在任何目录中,然后在“设置”菜单中打开“异常处理程序...”对话框,选中复选框并浏览到该文件。

如果位置 0x800000180 处没有指令,MARS 将终止 MIPS 程序并显示相应的错误消息。

异常处理程序可以使用

eret
指令将控制权返回给程序。这会将 EPC 寄存器 $14 值放入程序计数器,因此请确保在返回以跳过导致异常的指令之前将 $14 增加 4。  (适用于陷阱,但不适用于外部中断。)

mfc0 和 mtc0 指令用于读取和写入协处理器 0 寄存器。

Cause 寄存器 $13 的位 8-15 也可用于指示待处理的中断。目前仅由键盘和显示模拟器工具使用,其中位 8 表示键盘中断,位 9 表示显示中断。

有关更多详细信息,请参阅该工具的帮助面板。

在 mars.simulator.Exceptions 中声明但不一定实现的异常类型为 ADDRESS_EXCEPTION_LOAD (4)、ADDRESS_EXCEPTION_STORE (5)、SYSCALL_EXCEPTION (8)、BREAKPOINT_EXCEPTION (9)、RESERVED_INSTRUCTION_EXCEPTION (10)、ARITHMETIC_OVERFLOW_EXCEPTION (12)、 (13 )、DIVIDE_BY_ZERO_EXCEPTION (15)、FLOATING_POINT_OVERFLOW (16) 和 FLOATING_POINT_UNDERFLOW (17)。 当编写一个重要的异常处理程序时,您的处理程序必须首先保存通用寄存器内容,然后在返回之前恢复它们。

© www.soinside.com 2019 - 2024. All rights reserved.