第6章 输入与输出中断.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 输入与输出中断

* IBM PC存储空间的分配 常规内存:1MB 基本RAM区:640KB 保留RAM区:128KB 扩展ROM区:128KB 基本ROM区:64KB 扩展内存:用作RAM区 保留ROM 64KB 基本ROM 64KB 扩展RAM ≈15MB 基本ROM 64KB 保留ROM 64KB 扩展ROM 128KB 显示RAM 128KB 系统RAM 640KB 000000H 0A0000H 0C0000H 0E0000H 0F0000H 100000H FE0000H FFFFFFH 常规内存 1MB 扩展内存 15MB * …… 保护现场(将需要保护的寄存器压入堆栈) STI(可选); 恢复现场 IRET 中断处理 例如: PUSH AX PUSH BX PUSH CX … POP CX POP BX POP AX 中断服务程序的一般结构 * 指令系统中没有单独置“1”或清“0”TF的指令,可实现如下: PUSHF; FR的内容压入堆栈 POP AX; FR的内容弹出到AX OR AX,0100H; 使AX中对应TF的位置为“1”, 其他位不变 PUSH AX; 修改后的AX内容压入栈 POPF 弹回到FR(TF=1) 1-TF PUSHF POP AX AND AX, 0F7FFH PUSH AX; POPF 0-TF * 中断指令 STI——开中断指令 将标志寄存器中的中断标志位IF置1,允许CPU响应来自INTR引脚的中断请求 CLI——关中断指令 将标志寄存器中的中断标志位IF清0,使CPU不响应来自INTR引脚的中断请求 INT n——软件中断指令 n为中断号。调用n号中断服务程序 将标志寄存器压栈 将TF置0,禁止单步操作,将IF置0,使CPU处于关中断状态 断点的CS、IP压栈 从中断向量表取n号中断向量→IP、CS 转向n号中断服务程序 * IRET——中断返回指令 中断服务程序的出口指令,从栈顶弹出6个字节依次写入IP、CS和标志寄存器 在执行IRET之前必须保证栈顶是断点地址,否则执行IRET指令将导致系统瘫痪 * 例2:在系统定时器(中断类型8)的中断处理程序中,有一条中断指令INT 1CH,时钟中断每发生1次(每秒中断18.2次),都要调用一次中断类型1CH的处理程序。在ROM BIOS中,1CH的处理程序什么事也没干,就一个IRET指令。请试着编写一个中断处理程序,要求在主程序运行的过程中,每隔5s就在屏幕上显示信息“Time is up!”一次,显示3次后退出。 解:由于1CH为用户的中断类型,因此在编写新的中断程序时应做以下工作: (1)在主程序的初始化部分,先保存当前中断向量表的内容,再置新的中断向量(INT 21H,功能号AH=35H); (2)需要屏蔽定时器中断: IN AL, 21H AND AL, OUT 21H, AL (3)在主程序结束部分恢复保存的1CH向量(INT 21H,功能号AH=25H)。 * 程序代码(主程序) sstack segment STACK db 256 dup (0) ; 定义堆栈段,256字节 sstack ends data segment ; 定义数据段 count dw 1 mess db Time is up!, 0dh, 0ah, $ data ends code segment ; 定义代码段,字符串显示 main proc far assume cs:code, ds:data, ss:sstack start: push ds sub ax, ax push ax mov ax, data mov ds, ax mov ax, sstack mov ss, ax ; 初始化段寄存器 * mov al, 1ch mov ah, 35h int 21h ; 取1CH中断向量 push es push bx push ds ; 保护老的1CH中断基地址和偏移量 mov dx, offset ring mov ax, seg ring mov ds, ax mov al, 1ch mov ah, 25h ; 重新设置1CH中断向量 int 21h pop ds in al, 21h and al, out 21h, al sti ;屏蔽定时器中断 mov di, 07fffh delay: mov si, 0

文档评论(0)

wyjy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档