第8章输入/输出与中断 讲授要点 I/O指令与/O程序设计的基本方法 "80X86中断系统。 中断服务程序设计的基本方法。 DOS与BOS服务的用途。 DOS环境下的可执行程序。 驻留程序设计(简介)。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 第8章 输入/输出与中断 讲授要点 ▪ I/O指令与I/O程序设计的基本方法。 ▪ 80x86中断系统。 ▪ 中断服务程序设计的基本方法。 ▪ DOS与BIOS服务的用途。 ▪ DOS环境下的可执行程序。 ▪ 驻留程序设计(简介)
8.1输入/输出 1.IO原理 因ⅣO设备种类繁多、工作原理各异,每个ⅣO设备都通过专门的ⅣO接口与系统相连 IO接口包含多个存放数据、状态和控制信息的寄存器,分别以端口地址标识。 数据的输入输岀是通过ⅣO端口实现的。 ■80x86系统通过O指令实现对O端口的读写。 ⅣO接口的功能越强、内部寄存器的种类和数量越多,程序设计就越复杂。 2.IO指令 N:端口输入 OUT:端口输出 3.实例 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 8.1 输入/输出 1.I/O原理 ▪ 因I/O设备种类繁多、工作原理各异,每个I/O设备都通过专门的I/O接口与系统相连。 ▪ I/O接口包含多个存放数据、状态和控制信息的寄存器,分别以端口地址标识。 ▪ 数据的输入/输出是通过I/O端口实现的。 ▪ 80x86系统通过I/O指令实现对I/O端口的读写。 ▪ I/O接口的功能越强、内部寄存器的种类和数量越多,程序设计就越复杂。 2.I/O指令 ▪ IN:端口输入 ▪ OUT:端口输出 3.实例
8.280x86的中断系统 8.2.1中断的基本概念 1.什么是中断? 在CPU执行程序的过程中,由于出现了某个事件,CPU暂停当前程序,而转去执行 处理该事件的程序,处理完后,返回被暂停的程序处继续执行,这个过程称为中断。 引起中断的事件称作中断源, 处理该事件的程序称作中断服务程序( Interrupt Service Routine,简称SR)。 实现中断的硬件及软件称为中断系统。 2.中断号 80x86系统允许256种中断,每种中断对应0~255之间唯一的编号,称为中断号或中 断类型号。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 8.2 80x86的中断系统 8.2.1 中断的基本概念 1. 什么是中断? 在CPU执行程序的过程中,由于出现了某个事件,CPU暂停当前程序,而转去执行 处理该事件的程序,处理完后,返回被暂停的程序处继续执行,这个过程称为中断。 引起中断的事件称作中断源, 处理该事件的程序称作中断服务程序(Interrupt Service Routine,简称ISR)。 实现中断的硬件及软件称为中断系统。 2. 中断号 80x86系统允许256种中断,每种中断对应0 ~ 255之间唯一的编号,称为中断号或中 断类型号
3.中断向量与中断向量表 每种中断都有一个与之对应的中断服务程序 在实模式下,将中断服务程序的入口地址称作中断向量, 存放256个中断向量的内存区域称为中断向量表。 每个中断向量占4个字节,用32位分段地址来描述。 中断向量表位于内存地址0000~003FFH,共1KB(256*4B)。 对于中断号n,中断向量所在地址为n~4n+3。例如,0号中断的向量位于地址0000H, l号中断的向量位于地址0004H,等等 中断向量表在系统复位时初始化 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 3. 中断向量与中断向量表 每种中断都有一个与之对应的中断服务程序。 在实模式下,将中断服务程序的入口地址称作中断向量, 存放256个中断向量的内存区域称为中断向量表。 每个中断向量占4个字节,用32位分段地址来描述。 中断向量表位于内存地址00000H ~ 003FFH,共1KB(256*4B)。 对于中断号n,中断向量所在地址为n ~ 4n+3。例如,0号中断的向量位于地址00000H, 1号中断的向量位于地址00004H,等等。 中断向量表在系统复位时初始化
4.中断响应 当中断发生时,由硬件自动完成下列工作: (1)标志寄存器 FLAGS进栈。 (2)置IF=0,TF=0。 (3)返回地址(CSP)进栈 (4)根据中断号n,从地址onx4取出4字节的中断向量,低字送IP,高字送CS (5)转去执行中断向量所指的中断服务程序。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 4. 中断响应 当中断发生时,由硬件自动完成下列工作: (1)标志寄存器FLAGS进栈。. (2)置IF = 0,TF = 0。 (3)返回地址(CS:IP)进栈。 (4)根据中断号n,从地址0:n×4取出4字节的中断向量,低字送IP,高字送CS。 (5)转去执行中断向量所指的中断服务程序
8.2.2中断指令 1.中断调用指令:INTn 功能描述 (1)标志寄存器FLAG进栈 (2)置=0,TF=0 (3)CSP(即下一条指令地址, BOUND除外)进栈 (4)根据中断号n(INTO与 BOUND分别为4和5),以n×4为索引,查中断向量表,将相应 地址处的双字送CSP。 对标志位的影响:I=TF=0,不影响其它标志。 2.中断返回指令:IRET 功能描述:从堆栈弹出一个双字到CS:P,再弹出一个字到 FLAGS 对标志位的影响:由栈中弹出值确定。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 8.2.2 中断指令 1. 中断调用指令:INTn 功能描述: (1)标志寄存器FLAGS进栈。 (2)置IF = 0,TF = 0。 (3)CS:IP(即下一条指令地址,BOUND除外)进栈。 (4)根据中断号n(INTO与BOUND分别为4和5),以n×4为索引,查中断向量表,将相应 地址处的双字送CS:IP。 对标志位的影响:IF = TF = 0,不影响其它标志。 2. 中断返回指令:IRET 功能描述:从堆栈弹出一个双字到CS:IP,再弹出一个字到FLAGS。 对标志位的影响:由栈中弹出值确定
3.INT与CALL的主要区别 ■CAL主要用来调用应用程序中的过程,而INT则用来调用系统服务程序。 过程可以有任意多个,而80x86系统最多只支持256个中断服务程序。 ■对过程的调用是指出过程地址,而对中断服务程序的调用则是给出中断号。 ⅣNT总是段间调用。 NT将标志寄存器和返回地址进栈,而CALL指令只将返回地址进栈。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 3. INT与CALL的主要区别 ▪ CALL主要用来调用应用程序中的过程,而INT则用来调用系统服务程序。 ▪ 过程可以有任意多个,而80x86系统最多只支持256个中断服务程序。 ▪ 对过程的调用是指出过程地址,而对中断服务程序的调用则是给出中断号。 ▪ INT总是段间调用。 ▪ INT将标志寄存器和返回地址进栈,而CALL指令只将返回地址进栈
8.2.3中断分类 1.中断分类 中断可分为下列3类。 (1)硬件中断(或称外部中断):由外部硬件触发的,如键盘按键等。 80x86系统的硬件中断包括两类:可屏蔽中断与非屏蔽中断(中断号为2)。 不能被禁止的中断称为非屏蔽中断。可以被禁止的中断称为可屏蔽中断。 CPU对硬件中断的响应时机是在一条指令执行完之后,中断处理后返回到下一条指令 继续执行。 (2)陷入(又称为软件中断):在程序中执行中断调用指令引发的。 当陷入处理程序用RE指令返回后,程序从引起陷入的下一条指令继续执行。 陷入的主要目的是为应用程序提供系统服务,如最常用的ⅠNT2lH。 (3)异常:程序执行过程中因出现错误等内部意外事件而引起的中断。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 8.2.3 中断分类 1. 中断分类 中断可分为下列3类。 (1)硬件中断(或称外部中断):由外部硬件触发的,如键盘按键等。 80x86系统的硬件中断包括两类:可屏蔽中断与非屏蔽中断(中断号为2)。 不能被禁止的中断称为非屏蔽中断。可以被禁止的中断称为可屏蔽中断。 CPU对硬件中断的响应时机是在一条指令执行完之后,中断处理后返回到下一条指令 继续执行。 (2)陷入(又称为软件中断):在程序中执行中断调用指令引发的。 当陷入处理程序用IRET指令返回后,程序从引起陷入的下一条指令继续执行。 陷入的主要目的是为应用程序提供系统服务,如最常用的INT 21H。 (3)异常:程序执行过程中因出现错误等内部意外事件而引起的中断
2.硬件中断、异常和陷入的区别 硬件中断与当前指令的执行无关,通常是由外部事件(如IO设备的数据传送请 求、时钟中断等)所引起的,它的发生与指令的执行是异步的 异常与陷入是由指令的执行而引起的同步事件,与当前指令密切相关。其中, 陷入是程序员预期要执行的处理程序,即INT指令。 ■硬件中断或异常的服务程序是由硬件或异常条件自动触发的,不应在程序中以 INI指令直接调用,如NT9。 3.可屏蔽中断INTR (1)定时器中断:NT8 系统主板包含一个定时器芯片(如8254),约每5毫秒(1/182秒)产生一次中断。 (2)键盘中断:INT9 对于键盘的每个按键动作(按下与释放),都会触发键盘中断。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 2.硬件中断、异常和陷入的区别 ▪ 硬件中断与当前指令的执行无关,通常是由外部事件(如I/O设备的数据传送请 求、时钟中断等)所引起的,它的发生与指令的执行是异步的。 ▪ 异常与陷入是由指令的执行而引起的同步事件,与当前指令密切相关。其中, 陷入是程序员预期要执行的处理程序,即INT指令。 ▪ 硬件中断或异常的服务程序是由硬件或异常条件自动触发的,不应在程序中以 INT指令直接调用,如INT 9。 3.可屏蔽中断INTR (1)定时器中断:INT 8 系统主板包含一个定时器芯片(如8254),约每55毫秒(1/18.2秒)产生一次中断。 (2)键盘中断:INT 9 对于键盘的每个按键动作(按下与释放),都会触发键盘中断
4.中断控制器与CPU的通信端口 中断控制器通过端口20H和21H(用于RQ0~7)以及0AOH和OAH(用于RQ8 15)与CPU通信。 其中,端口20H与0AOH对应于中断命令寄存器,端口2H与0AH对应于中断屏蔽 寄存器。 5.发送中断结束命令的方法 向中断命令寄存器输出字节20H。如下所示。 mov al. 20h out 20h,al;对于RQ8~15,使用端口0AOH 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 4. 中断控制器与CPU的通信端口 中断控制器通过端口20H和21H(用于IRQ 0 ~ 7)以及0A0H和0A1H(用于IRQ 8 ~ 15)与CPU通信。 其中,端口20H与0A0H对应于中断命令寄存器,端口21H与0A1H 对应于中断屏蔽 寄存器。 5. 发送中断结束命令的方法 向中断命令寄存器输出字节20H。如下所示。 mov al, 20h out 20h, al ; 对于IRQ 8 ~ 15,使用端口0A0H