即使没有加载任何程序,QtSPIM MIPS汇编程序也已经显示了一些代码行,就像在https://ecs-network.serv.pacific.edu/ecpe-170/tutorials/qtspim-tutorial上看到的那样。
我假设这是加载程序所必需的,但我会非常感兴趣的是一个确切的解释来理解所有的细节。
发布于 2020-01-20 23:08:52
一个QtSPIM程序由两部分组成:异常处理程序和用户程序。
缺省异常处理程序包括简短的用户模式启动代码序列(在0x00400000处加载)以及位于内核存储器.ktext中的实际异常处理程序,该异常处理程序在0x80000180处开始,
当您加载您的用户程序时,它被附加到用户模式代码(来自异常处理程序)中,位置大约为0x00400024. 。您还可以看到,在使用main加载程序之前,main的地址(在启动代码中)被视为0,也就是未定义的地址。
您可以使用自己的异常处理程序替换默认的异常处理程序。请使用Simulator菜单、Settings子菜单、MIPS选项卡、Load Exception Handler (或Use default exception handler)。
在您的异常处理程序文件中,您可以将实际的处理程序放在.ktext指令之后,并且将启动序列放在.text指令之后-这是可选的。如果不提供,那么main将无处可返回,因此要正常终止模拟器,您必须通过syscall退出,而不是简单地返回。
另一个流行的模拟器MARS不包括这个默认的用户模式启动代码序列,因此MARS程序总是必须使用syscall从main退出。
默认的异常处理程序打印异常的原因,并不做太多其他的事情。
例如,如果你想做中断驱动的控制台I/O,你可以编写自己的异常处理程序。QtSPIM也支持定时器,它也使用中断机制。你也可以实现陷阱处理程序(teq,tne,teqi,tnei指令),但syscall指令总是由QtSPIM在MIPS异常处理机制之外处理。
https://stackoverflow.com/questions/59823995
复制相似问题