IBM-PC汇编语言程序设计 作者 余朝琨 第12章 输入、输出和中断程序设计.pptVIP

IBM-PC汇编语言程序设计 作者 余朝琨 第12章 输入、输出和中断程序设计.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章输入、输出和中断程序设计 (1)当前指令计数器IP内容进栈; (2)将IF和TF位清零,即禁止外部中断和单步中断; (3)从中断向量表4×n字单元取出一个字送入IP,4×n+2字单元内容送到CS; (4)转向中断处理子程序。 中断发生的过程与子程序调用极其相似,所不同之处是在保护中断现场时,除了要保存返回地址CS:IP之外,还保存了标志寄存器PSW的内容。因为标志寄存器记录了中断发生时程序指令运行结果的特征,当CPU处理完中断服务程序返回原程序时,需要保证原程序工作的连续性和正确性,因此中断发生时PSW的内容必须进栈保存。另外一个不同之处是,在中断发生时,CPU会自动清除IF和TF位,其设计目的是让CPU转入中断服务程序后,不允许再发生新的中断。如果程序允许中断嵌套,可以通过STI指令再把IF置1,使中断重新开放。   主程序与硬件完成了以上操作后,CS和IP寄存器已取得了中断处理子程序的段基址和偏移地址(即中断向量),CPU就转去执行中断服务子程序。请读者注意: (1)外部设备发送到CPU的中断请求信号在时间上是随机的(而子程序调用在时间、空间上是可知的),只要未被屏蔽的设备本身的状态是准备就绪的,它就会向CPU发出中断请求信号,若此时CPU正在执行一条指令,那么就要等这条指令执行完毕,才响应中断(在流水方式计算机中一般为精确断点); (2)对加了重复前缀的串指令(如REP MOVSB),要做为一条指令处理,但不是把串操作指令全部重复执行完,而是执行一次重复和串指令即可响应中断; (3)对MOV指令和POP指令,如果处理的对象为段寄存器时,那么本条指令执行完后,接着再执行一条指令才响应中断; (4)对于开中断STI和中断返回指令IRET,要在STI或IRET指令执行完后,再执行一条指令才响应中断。以上是几种特殊情况,对一般指令,只要一条指令的执行周期结束即可响应中断。 中断处理程序的编写方法和标准子程序很类似,以下是编写中断服务子程序的步骤,请注意与子程序编写的一些不同之处。 (1) 保存寄存器内容(保护现场) (2) 如允许中断嵌套,则开中断(STI) (3) 处理中断(中断服务的主体) (4) 关中断 (5) 送中断结束命令(EOI)给中断命令寄存器(8259A内) (6) 恢复寄存器内容(恢复现场) (7) 返回到被中断的程序(IRET) 中断结束命令EOI(如有采用8259A中断控制器时)在程序的什么地方发出,这要看程序员是否要求在其处理过程中允许同级或低级中断。一般设备希望一次中断的处理过程最好是完整的,所以只在中断处理结束之前发出EOI命令。设8259A的控制寄存器地址为20H,EOI在OCW2的D5位上,所以发此命令指令为: MOV AL,20H ;20H是EOI命令位置1 OUT 20H,AL ;本指令中的20H是8259A控制口地址 处理中断部分是中断处理子程序的主体部分,它要完成的任务是各式各样的,这与实际的应用有关。如果它是处理某些错误,那一般是为了显示输出一系列出错信息。如果它是对某一个外设进行服务的,就按其端口地址接收或发送一个字节或字的数据。要注意的是,此时CPU产生一次中断,I/O设备仅完成一个字节或字的输入/输出,所以中断处理子程序所用到的指针变量或数据变量一般应设置存储器单元来保存。 12.3.6 中断程序设计 这里举一个例子来说明中断处理程序的编写方法。 【例12-4】编制除数为0时内中断(中断类型号为0)的处理程序。 在程序的初始化部分(Init)设置新的零型中断向量,显示一条信息,假定除数为零的情况,然后完成终止和驻留后退出DOS。这种结束并驻留的退出形式,它虽然退出用户程序,但本程序仍驻留在内存中(字节数不超过64K),从而使这些内存单元不被以后的应用程序所破坏。 系统调用时,按以下要求设定功能号和调用参数: AH=31H(功能号),结束并驻留该程序在内存中,不被其它应用程序破坏 AL=返回码 DX=欲驻留在内存中的字节数 中断处理部分:中断处理程序(ZDIV)在发生一个被零除发生中断时接收控制。中断处理程序先保存有关寄存器,然后打印出信息询问用户是退出程序(Quit)还是继续(Continue)。在这个中断处理子程序中,可使用DOS显示和键盘I/O功能,这是由于在进入ZDIV中断处理时,已用STI指令开中断了。若键入“C”要

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档