即使未加载程序,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不包括此默认用户mnode启动代码序列,因此它们必须使用syscall从main退出而不是返回。
默认的异常处理程序会打印出异常的原因,并且不会执行其他任何操作。
例如,如果要执行中断驱动的控制台I / O,则可以编写自己的异常处理程序。 QtSPIM还支持计时器,该计时器也使用中断机制。您也可以实现陷阱处理程序(teq
,tne
,teqi
,tnei
指令),但是syscall
指令始终由MIPS异常处理机制之外的QtSPIM处理。