Mips QtSPIM:未加载程序时显示代码的说明
QtSPIM MIPS汇编程序已经显示了一些代码行,即使没有加载任何程序,如图所示Mips QtSPIM:未加载程序时显示代码的说明,mips,qtspim,spim,Mips,Qtspim,Spim,QtSPIM MIPS汇编程序已经显示了一些代码行,即使没有加载任何程序,如图所示 我认为这是加载程序所必需的,但我非常希望有一个确切的解释来理解所有细节。QtSPIM程序由两部分组成:异常处理程序和用户程序 默认异常处理程序既包括短用户模式启动代码序列(在0x00400000加载),也包括位于内核内存.ktext中的实际异常处理程序,该异常处理程序从0x80000180开始 加载用户程序时,它会附加到用户模式代码(来自异常处理程序)的大约位置0x00400024。您还可以看到,在使用main加
我认为这是加载程序所必需的,但我非常希望有一个确切的解释来理解所有细节。QtSPIM程序由两部分组成:异常处理程序和用户程序 默认异常处理程序既包括短用户模式启动代码序列(在
0x00400000
加载),也包括位于内核内存.ktext
中的实际异常处理程序,该异常处理程序从0x80000180
开始
加载用户程序时,它会附加到用户模式代码(来自异常处理程序)的大约位置0x00400024
。您还可以看到,在使用main
加载程序之前,main
(在该启动代码中)的地址被视为0,即未定义
您可以用自己的异常处理程序替换默认的异常处理程序。使用模拟器菜单、设置子菜单、MIPS
选项卡、加载异常处理程序
(或使用默认异常处理程序
)
在异常处理程序文件中,将实际处理程序放在.ktext
指令之后,并将开始序列放在.text
指令之后-这是可选的。如果不提供一个指令,则main
无处可返回,因此要正常终止模拟器,必须通过syscall
而不是简单地返回
另一个流行的模拟器MARS不包含此默认用户模式启动代码序列,因此MARS程序必须始终使用系统调用从main
退出
默认的异常处理程序打印异常的原因,而不做其他事情
例如,如果您想执行中断驱动的控制台I/O,您可以编写自己的异常处理程序。QtSPIM还支持计时器,它也使用中断机制。您还可以实现陷阱处理程序(teq
,tne
,teqi
,tnei
指令),但是syscall
指令始终由QtSPIM在MIPS异常处理机制之外处理。QtSPIM程序由两部分组成:异常处理程序和用户程序
默认异常处理程序既包括短用户模式启动代码序列(在0x00400000
加载),也包括位于内核内存.ktext
中的实际异常处理程序,该异常处理程序从0x80000180
开始
加载用户程序时,它会附加到用户模式代码(来自异常处理程序)的大约位置0x00400024
。您还可以看到,在使用main
加载程序之前,main
(在该启动代码中)的地址被视为0,即未定义
您可以用自己的异常处理程序替换默认的异常处理程序。使用模拟器菜单、设置子菜单、MIPS
选项卡、加载异常处理程序
(或使用默认异常处理程序
)
在异常处理程序文件中,将实际处理程序放在.ktext
指令之后,并将开始序列放在.text
指令之后-这是可选的。如果不提供一个指令,则main
无处可返回,因此要正常终止模拟器,必须通过syscall
而不是简单地返回
另一个流行的模拟器MARS不包含此默认用户模式启动代码序列,因此MARS程序必须始终使用系统调用从main
退出
默认的异常处理程序打印异常的原因,而不做其他事情
例如,如果您想执行中断驱动的控制台I/O,您可以编写自己的异常处理程序。QtSPIM还支持计时器,它也使用中断机制。您还可以实现陷阱处理程序(teq
,tne
,teqi
,tnei
指令),但是syscall
指令始终由QtSPIM在MIPS异常处理机制之外处理。代码已经注释,因此您可以看到它的作用。用户空间文本段代码只是用来设置一些寄存器,然后调用main
函数。内核文本段代码是默认的exception处理程序。非常感谢您的评论,这也部分回答了我的问题。无论是汇编专家还是C编程专家,代码旁边的评论对我来说都是晦涩难懂的。因此,参考代码所做的解释仍然会对我有帮助。代码已经被注释了,因此您可以看到它的作用。用户空间文本段代码只是用来设置一些寄存器,然后调用您的main
函数。内核文本段代码是默认的异常处理程序。非常感谢您的评论,这也部分回答了我的问题。无论是汇编专家还是C编程专家,代码旁边的注释都是e对我来说也很神秘。因此,引用代码的解释仍然会对我有帮助。非常感谢。这个信息正是我要找的。非常感谢。这个信息正是我要找的。