- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章-自陷程序和子程序.doc
第章 自陷程序和子程序
9.1 LC-3自陷程序
9.1.1 介绍
回忆先前一章的图8.5的程序,为了成功地获得从键盘输入,程序员需知道以下几件事情(第8章):
1、键盘与显示器的硬件数据寄存器:显示器的数据寄存器是为了能够显示一个提示符,而键盘数据寄存器则是让程序知道到哪儿去寻找输入的字符。
2、键盘与显示器的硬件状态寄存器:显示器的状态寄存器是为了让程序知道什么时候可以显示提示符中的下一个字符,而键盘状态寄存器则让程序知道什么时候有人键入了一个。
3、键盘输入和执行程序之间的异步关系。
这是大多数应用程序员不知道的知识。实际上,在现实中,如果应用程序员(或有时称为用户程序员)必须在这个层面上理解输入与输出,那么在商业上将会很少运用输入/输出,程序员也会大大减少。
另外,如果允许用户程序员直接访问KBDR和KBSR等来实现输入/输出的行为,将会造成另外一个问题出现。输入/输出行为包含了被许多程序所共享的设备寄存器的使用,这就意味着,如果一个用户程序员被允许访问硬件寄存器,他/她没有谨慎处理,这会给其他用户程序制造混乱。这样,让用户程序员访问这些寄存器是不明智的。我们说硬件寄存器是有特权的,那些不拥有适当特权级别的程序是不能访问它们的。
特权的概念带来了一大堆麻烦。不幸的是,我们在这里不能做更多的涉及,把它留给以后做更认真的处理。现在,我们只是注意到这里有用户程序不能访问的资源,只有那些被赋予足够特权的程序才可以控制它们,而没有特权的程序则不可以。说完这些,我们继续手头上的问题,如何更好的解决需要输入和/或输出的用户程序。
一个更简单同时也是更安全的解决需要I/O的用户程序问题的方案包括自陷(TRAP)指令和操作系统。操作系统拥有适当的特权级别。
我们已经在第5章介绍了TRAP指令。我们看到,在某些任务中,用户程序通过调用TRAP指令使操作系统做这个工作。这样,用户程序不必要知道前面提到的复杂的细节,并且其他用户程序也会被保护起来,避免用户程序员的不恰当行为的后果。
图9.1显示了一个用户程序在到达地址4000时,需要执行一个输入输出任务。用户程序请求操作系统代表它完成这个任务。操作系统控制机器,处理TRAP指令指定的请求,然后把控制权返还给用户程序。我们经常把这个用户程序的请求称为服务调用或系统调用。9.1.2 TRAP机制
TRAP机制包括一些要素,如下:
一组由操作系统代表用户程序去执行的服务程序。它们是操作系统的一部分,在存储器中的起始地址是任意的。LC-3被设计为总共可以识别256个服务程序。附录A中的表A.2包含了LC-3现有的操作系统服务程序的完整列表。
2、 这256个服务程序的起始地址的一张表。这张表被存储在存储单元的x0000到x00FF中。不同的公司对这张表有不同的命名,一家公司叫它系统控制块,另一家公司叫它Trap向量表。图9.2提供了一个LC-3的Trap向量表的瞬态图。在这些起始地址中,字符输出服务程序(单元0430)包含在单元0021中;键盘输入服务程序(单元04A0)包含在单元0023中,还有,停机服务程序(单元FD70)包含在单元0025中。
3、TRAP指令。当用户程序希望让操作系统代表用户程序执行某一个服务程序,然后把控制权交还给用户程序时,用户程序使用TRAP指令。
4、返回用户程序的一个链接。服务程序必须有一种可以把控制权交还给用户程序的机制。9.1.3 TRAP指令
TRAP指令通过做两件事实现服务程序的执行:
它根据它的trap向量,改变PC的值为相应的服务程序的首地址。
它提供了一个返回调用TRAP指令的程序的路径。这个返回路径指的是链接。
TRAP指令说明如下。TRAP指令由两部分组成:TRAP的操作码1111和trap向量([7:0]位)。[11:8] 位必须为0。trap向量标识了用户程序希望操作系统执行的程序。在下面的例子中,trap向量是23。
在TRAP指令的指令周期的执行阶段,做4件事:
8位的trap向量通过零扩展到16位而形成一个地址,该地址被加载到MAR。对于trap向量23,地址就是0023,它是TRAP向量表中的一条记录的地址;
TRAP向量表位于存储单元x0000到x00FF中。位于x0023中的纪录被读取,它的内容是x04A0(如图9.2),被加载到MDR中;
通用寄存器R7被加载为PC中的当前内容。这会给用户程序提供一个返回路径,这一点马上就会变得更清楚;
MDR的内容被加载到PC中,完成这个指令周期。
由于PC现在包含了04A0,所以处理从存储单元04A0继续下去。
地址04A0是从键盘输入一个字符的操作系统服务程序的起始地址。我们说trap向量指向TRAP程序的起始地址。因此,TRAP x23使操作系统开始执行键盘输
文档评论(0)