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



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

我认为这是加载程序所必需的,但我对理解所有细节的确切解释非常感兴趣。

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

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

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

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

在异常处理程序文件中,您将实际处理程序放在.ktext指令之后,并且将开始序列放在.text指令之后 — 这是可选的。如果您不提供,那么main无处可返回,因此要正常终止模拟器,您必须通过syscall退出,而不是简单地返回。

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

默认异常处理程序打印异常的原因,并且不执行其他操作。

例如,如果要执行中断驱动的控制台 I/O,则可以编写自己的异常处理程序。 QtSPIM还支持定时器,它也使用中断机制。 你也可以实现陷阱处理程序(teqtneteqitnei指令(,但syscall指令总是由MIPS异常处理机制之外的QtSPIM处理。  

最新更新