QtSPIM:未加载程序时显示的代码说明

QtSPIM: Explanation for code shown without loading program

即使没有加载程序,QtSPIM MIPS 汇编程序也已经显示了一些代码行,就像在 https://ecs-network.serv.pacific.edu/ecpe-170/tutorials/qtspim-tutorial.

上看到的一样

我假设这是加载程序所必需的,但我很想知道准确的解释以了解所有细节。

QtSPIM 程序由两部分组成:异常处理程序和用户程序。

默认异常处理程序包括一个简短的用户模式启动代码序列(加载于 0x00400000 以及位于内核内存 .ktext 中的实际异常处理程序,它从 [=12] 开始=],

当您加载用户程序时,它会附加到大约位置 0x00400024 的用户模式代码(来自异常处理程序)。您还可以看到,在您使用 main 加载程序之前,main(在该启动代码中)的地址被视为 0,即未定义。

您可以用自己的异常处理程序替换默认的异常处理程序。使用 Simulator 菜单、Settings 子菜单、MIPS 选项卡、Load Exception Handler(或 Use default exception handler)。

在您的异常处理程序文件中,您可以将您的实际处理程序放在 .ktext 指令之后,并且您可以将您的启动序列放在 .text 指令之后 - 这是可选的。如果你不提供,那么 main 无处可去 return,所以要正常终止模拟器,你必须通过 syscall 而不是简单地 returning 退出.

另一个流行的模拟器 MARS 不包含此默认用户模式启动代码序列,因此 MARS 程序总是必须使用系统调用退出 main

默认的异常处理程序打印异常的原因并且不做其他事情。

如果你想做中断驱动的控制台I/O,你可以编写自己的异常处理程序,例如。 QtSPIM 还支持定时器,同样使用中断机制。您还可以实现陷阱处理程序(teqtneteqitnei 指令),但 syscall 指令始终由 MIPS 之外的 QtSPIM 处理异常处理机制。