- 1、本文档共106页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
南航微机原理第6章
(2)级联工作编程 读ISR的内容: MOV AL,0BH OUT 0A0H,AL NOP IN AL,0A0H 从片发EOI命令: MOV AL,20H OUT 0A0H,AL ;端口A0H 主片发EOI命令: MOV AL,20H OUT 20H,AL ;端口20H 6.6 中断程序设计 一般过程 1. 设置中断向量表 2. 设置中断控制器 3. 置中断允许标志IF 4. 设计中断服务子程序 中断服务子程序:保护现场 STI CLI EOI命令 恢复现场 IRET … 6.6.1 设计方法 1. 设置中断向量表 可以利用传送指令直接访问中断向量表的相应存储单元; 也可利用DOS系统功能INT 21H的25H和35H子功能修改中断向量: ① 先保存原有中断向量 ② 设置中断向量 ③ 恢复原中断向量 设置中断向量: 把由AL指定中断类型码的中断向量DS:DX置在中断向量表中。 预置 AH=25H, AL=中断类型码 DS:DX=中断向量 执行 INT 21H 读取中断向量: 把由AL指定中断类型码的中断向量从中断向量表中取到ES:BX中。 预置 AH=35H, AL=中断类型码 执行 INT 21H 返回时送: ES:BX=中断向量 ;保存原中断向量的内容 INTSEG DW ? INTOFF DW ? … MOV AH,35H MOV AL,0BH INT 21H MOV INTSEG,ES ;保存原中断向量的段基址 MOV INTOFF,BX ;保存原中断向量的偏移量 ;重新修改中断向量的内容 CLI ;关中断, 设置中断向量新内容 PUSH DS MOV AX,SEG INTPROC MOV DS,AX MOV DX,OFFSET INTPROC MOV AH,25H MOV AL,0BH INT 21H POP DS INTIMR DB ? … IN AL, 21H ;读出IMR MOV INTIMR, AL ;保存原IMR内容 AND AL, 0F7H ;允许IRQ3, 其他不变 OUT 21H, AL ;设置新IMR内容 … ;恢复原先的IMR MOV AL, INTIMR ;取出保留的IMR原内容 OUT 21H, AL ;重写OCW1 2. 设置中断控制器 ① 若用PC机内8259,主要是对已初始化的8259的IMR进行设置,允许相应位开放中断。 ② 否则应对8259进行初始化。 3. 设置CPU的中断允许标志IF ① 初始化时先CLI ; ② 开中断STI 4. 设计中断服务程序 注意:①能在主程序做的尽量不放在中断服务程序中; ②在外中断服务程序中不要使用DOS系统功能调用INT 21H,因为DOS版本的内核是不可重入的; ③中断服务程序若要控制I/O设备,最好调用ROM BIOS 功能或者对I/O接口直接编程。 定义为过程 8259结束中断 保护现场
文档评论(0)