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 还支持定时器,同样使用中断机制。您还可以实现陷阱处理程序(teq
、tne
、teqi
、tnei
指令),但 syscall
指令始终由 MIPS 之外的 QtSPIM 处理异常处理机制。
即使没有加载程序,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 还支持定时器,同样使用中断机制。您还可以实现陷阱处理程序(teq
、tne
、teqi
、tnei
指令),但 syscall
指令始终由 MIPS 之外的 QtSPIM 处理异常处理机制。