TRAP程序和子程序

时间:2024-04-06 18:54:47

LC-3 TRAP程序

由于像硬件I/O操作过于底层,如果直接让用户程序员去自己处理,有两个问题,1门槛过高,如程序要从键盘读取输入,则需要了解详细的硬件底层I/O操作。2如果赋予用户程序员硬件寄存器的读写权限,会造成很多复杂问题,硬件的设备寄存器通常由很多程序共享,如果出现误操作,则会影响其他用户程序的正常执行。所以设备寄存器是有权限的,只能被具有合适权限的程序访问。

为了解决这个问题,我们可以借助于TRAP程序和操作系统(即拥有特权的程序)。

对于特定应用,我们可以通过TRAP指令调用操作系统来帮助完成,通过这种方式,用户程序员不需了解底层细节,也不会出现误处理影响其他用户程序。

 

TRAP机制:

服务程序集合:由操作系统提供,以用户身份执行(即提供的服务集合)

起始地址表(陷入矢量表):服务程序的起始地址。

TRAP指令:用户程序希望操作系统执行特定服务程序,执行完毕后将控制权返回,则可以使用TRAP指令。

链接:通过链接回到用户程序。

 

TRAP指令:

执行服务程序前,需要完成两件事情,

根据陷入矢量表项的内容,将PC值修改为对应的服务程序起始地址。同时提供一种机制,能在服务程序结束后回到用户程序(即保存用户程序调用服务程序后的下一条指令PC值)。

TRAP执行的的4个步骤:

将8bit陷入矢量扩展为16bit,装入MAR。

陷入矢量表对应的内容被读入MDR。

将当期PC值存入寄存器R7,已实现返回用户程序的链接机制。

将MDR内容载入PC。

 

子程序:

在一个用户程序中,某个程序片段在被频繁的使用,这时,我们不希望每次使用都重复实现这些细节。即代码需要被重复使用。

这些代码就叫做子程序(高级语言中通常称为函数)。使用机制称为"调用/返回机制”。

 

调用/返回机制:

首先计算子程序开始地址,并装入PC,然后保存调用返回地址(下一条指令地址),在返回机制中,将把返回地址再装入PC。

JSR(R)指令

子程序调用指令操作码是0100,该指令的寻址模式由两种:PC相对地址寻址和基地址寻址。

该指令完成两件事:首先将返回地址存入R7,然后是计算子程序起始地址并装入PC,返回地址是跳转前已经增量过的PC,它指向用户程序中紧随JSR(R)指令之后的那条指令

TRAP程序和子程序