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

Mips QtSPIM:未加载程序时显示代码的说明,mips,qtspim,spim,Mips,Qtspim,Spim,QtSPIM MIPS汇编程序已经显示了一些代码行,即使没有加载任何程序,如图所示 我认为这是加载程序所必需的,但我非常希望有一个确切的解释来理解所有细节。QtSPIM程序由两部分组成:异常处理程序和用户程序 默认异常处理程序既包括短用户模式启动代码序列(在0x00400000加载),也包括位于内核内存.ktext中的实际异常处理程序,该异常处理程序从0x80000180开始 加载用户程序时,它会附加到用户模式代码(来自异常处理程序)的大约位置0x00400024。您还可以看到,在使用main加

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异常处理机制之外处理。

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对我来说也很神秘。因此,引用代码的解释仍然会对我有帮助。非常感谢。这个信息正是我要找的。非常感谢。这个信息正是我要找的。