80x86汇编语言程序设计 教学课件 ppt 作者 王成耀 第8章

上传人:E**** 文档编号:89343598 上传时间:2019-05-23 格式:PPT 页数:19 大小:125KB
返回 下载 相关 举报
80x86汇编语言程序设计 教学课件 ppt 作者  王成耀 第8章_第1页
第1页 / 共19页
80x86汇编语言程序设计 教学课件 ppt 作者  王成耀 第8章_第2页
第2页 / 共19页
80x86汇编语言程序设计 教学课件 ppt 作者  王成耀 第8章_第3页
第3页 / 共19页
80x86汇编语言程序设计 教学课件 ppt 作者  王成耀 第8章_第4页
第4页 / 共19页
80x86汇编语言程序设计 教学课件 ppt 作者  王成耀 第8章_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《80x86汇编语言程序设计 教学课件 ppt 作者 王成耀 第8章》由会员分享,可在线阅读,更多相关《80x86汇编语言程序设计 教学课件 ppt 作者 王成耀 第8章(19页珍藏版)》请在金锄头文库上搜索。

1、2019/5/23,80x86汇编语言程序设计,第8章 输入/输出与中断,讲授要点,I/O指令与I/O程序设计的基本方法。 80x86中断系统。 中断服务程序设计的基本方法。 DOS与BIOS服务的用途。 DOS环境下的可执行程序。 驻留程序设计(简介)。,2019/5/23,80x86汇编语言程序设计,8.1 输入/输出,1I/O原理 因I/O设备种类繁多、工作原理各异,每个I/O设备都通过专门的I/O接口与系统相连。 I/O接口包含多个存放数据、状态和控制信息的寄存器,分别以端口地址标识。 数据的输入/输出是通过I/O端口实现的。 80x86系统通过I/O指令实现对I/O端口的读写。 I/

2、O接口的功能越强、内部寄存器的种类和数量越多,程序设计就越复杂。 2I/O指令 IN:端口输入 OUT:端口输出 3实例,2019/5/23,80x86汇编语言程序设计,8.2 80x86的中断系统,8.2.1 中断的基本概念,1. 什么是中断? 在CPU执行程序的过程中,由于出现了某个事件,CPU暂停当前程序,而转去执行处理该事件的程序,处理完后,返回被暂停的程序处继续执行,这个过程称为中断。 引起中断的事件称作中断源, 处理该事件的程序称作中断服务程序(Interrupt Service Routine,简称ISR)。 实现中断的硬件及软件称为中断系统。 2. 中断号 80x86系统允许2

3、56种中断,每种中断对应0 255之间唯一的编号,称为中断号或中断类型号。,2019/5/23,80x86汇编语言程序设计,3. 中断向量与中断向量表 每种中断都有一个与之对应的中断服务程序。 在实模式下,将中断服务程序的入口地址称作中断向量, 存放256个中断向量的内存区域称为中断向量表。 每个中断向量占4个字节,用32位分段地址来描述。 中断向量表位于内存地址00000H 003FFH,共1KB(256*4B)。 对于中断号n,中断向量所在地址为n 4n+3。例如,0号中断的向量位于地址00000H,1号中断的向量位于地址00004H,等等。 中断向量表在系统复位时初始化。,2019/5/

4、23,80x86汇编语言程序设计,4. 中断响应 当中断发生时,由硬件自动完成下列工作: (1)标志寄存器FLAGS进栈。. (2)置IF = 0,TF = 0。 (3)返回地址(CS:IP)进栈。 (4)根据中断号n,从地址0:n4取出4字节的中断向量,低字送IP,高字送CS。 (5)转去执行中断向量所指的中断服务程序。,2019/5/23,80x86汇编语言程序设计,8.2.2 中断指令,1. 中断调用指令:INT n 功能描述: (1)标志寄存器FLAGS进栈。 (2)置IF = 0,TF = 0。 (3)CS:IP(即下一条指令地址,BOUND除外)进栈。 (4)根据中断号n(INTO

5、与BOUND分别为4和5),以n4为索引,查中断向量表,将相应地址处的双字送CS:IP。 对标志位的影响:IF = TF = 0,不影响其它标志。 2. 中断返回指令:IRET 功能描述:从堆栈弹出一个双字到CS:IP,再弹出一个字到FLAGS。 对标志位的影响:由栈中弹出值确定。,2019/5/23,80x86汇编语言程序设计,3. INT与CALL的主要区别 CALL主要用来调用应用程序中的过程,而INT则用来调用系统服务程序。 过程可以有任意多个,而80x86系统最多只支持256个中断服务程序。 对过程的调用是指出过程地址,而对中断服务程序的调用则是给出中断号。 INT总是段间调用。 I

6、NT将标志寄存器和返回地址进栈,而CALL指令只将返回地址进栈。,2019/5/23,80x86汇编语言程序设计,8.2.3 中断分类,1. 中断分类 中断可分为下列3类。 (1)硬件中断(或称外部中断):由外部硬件触发的,如键盘按键等。 80x86系统的硬件中断包括两类:可屏蔽中断与非屏蔽中断(中断号为2)。 不能被禁止的中断称为非屏蔽中断。可以被禁止的中断称为可屏蔽中断。 CPU对硬件中断的响应时机是在一条指令执行完之后,中断处理后返回到下一条指令继续执行。 (2)陷入(又称为软件中断):在程序中执行中断调用指令引发的。 当陷入处理程序用IRET指令返回后,程序从引起陷入的下一条指令继续执

7、行。 陷入的主要目的是为应用程序提供系统服务,如最常用的INT 21H。 (3)异常:程序执行过程中因出现错误等内部意外事件而引起的中断。,2019/5/23,80x86汇编语言程序设计,2硬件中断、异常和陷入的区别 硬件中断与当前指令的执行无关,通常是由外部事件(如I/O设备的数据传送请求、时钟中断等)所引起的,它的发生与指令的执行是异步的。 异常与陷入是由指令的执行而引起的同步事件,与当前指令密切相关。其中,陷入是程序员预期要执行的处理程序,即INT指令。 硬件中断或异常的服务程序是由硬件或异常条件自动触发的,不应在程序中以INT指令直接调用,如INT 9。 3可屏蔽中断INTR (1)定

8、时器中断:INT 8 系统主板包含一个定时器芯片(如8254),约每55毫秒(1/18.2秒)产生一次中断。 (2)键盘中断:INT 9 对于键盘的每个按键动作(按下与释放),都会触发键盘中断。,2019/5/23,80x86汇编语言程序设计,4. 中断控制器与CPU的通信端口 中断控制器通过端口20H和21H(用于IRQ 0 7)以及0A0H和0A1H(用于IRQ 8 15)与CPU通信。 其中,端口20H与0A0H对应于中断命令寄存器,端口21H与0A1H 对应于中断屏蔽寄存器。 5. 发送中断结束命令的方法 向中断命令寄存器输出字节20H。如下所示。 mov al, 20h out 20

9、h, al ; 对于IRQ 8 15,使用端口0A0H,2019/5/23,80x86汇编语言程序设计,6. 禁止/允许相应的硬件中断的方法 中断屏蔽寄存器的8位对应8个硬件中断源, 其中,端口21H的第0 7位对应IRQ0 IRQ7,端口0A1H的第0 7位对应IRQ8 IRQ15。 通过设置某位为1/0,以禁止/允许相应的硬件中断。 7. CPU对可屏蔽中断的响应条件 该设备的中断请求未被屏蔽,即相应的中断屏蔽位为0。 CPU允许中断,即IF=1。,2019/5/23,80x86汇编语言程序设计,8.3 DOS与BIOS服务,1DOS系统调用:INT 21H AH = 25H:设置中断向量

10、 AH = 35H:获取中断向量 AH = 31H:程序终止并驻留内存 2BIOS服务 (1)INT 10H:显示器输出 AH = 0AH:显示字符 AH = 0EH:显示字符 (2)INT 16H:键盘输入 AH = 0:从键盘读一键 AH = 1:判断是否有键可读 AH = 2:返回变换键的当前状态,2019/5/23,80x86汇编语言程序设计,8.4 DOS环境下的可执行程序,8.4.1 程序段前缀PSP,当程序在执行前装入内存时,DOS确定当前可用内存的最低地址作为程序装入的起点,在该起点处首先建立一个256(100H)字节的程序段前缀PSP(Program Segment Pref

11、ix),随后装入程序本身。 PSP中包含许多信息,但其中的大多数信息用处不大,有些因过时而已经被弃用。,2019/5/23,80x86汇编语言程序设计,8.4.2 .EXE文件与.COM文件,1.EXE文件 可以包含多个代码段、数据段和堆栈段,执行的起始地址可任意指定。 磁盘上的.EXE文件由两部分构成:文件头与程序本身。其中,文件头是由连接器LINK生成的,包含文件的重定位等信息,供DOS装入文件时使用。 通常,段地址在程序装入内存前是无法确定的,因此,在.EXE文件中只能使用相对地址,在装入内存时,根据程序装入的起始地址转换为绝对地址。 2.COM文件 只包含一个段,同时作为代码段、数据段

12、和堆栈段。 在段首必须预留100H个字节的空间,装入内存后由PSP占用。 程序执行的起始偏移地址必须为100H。 磁盘上的.COM文件与装入内存后的内容完全一样,不包含文件头等附加信息。因此,在.COM文件中不能(也没有必要)使用需要重定位的指令。,2019/5/23,80x86汇编语言程序设计,8.5 中断服务程序设计,8.5.1 中断服务程序(ISR)设计的基本方法,中断服务程序的基本结构。 设计中断服务程序应注意的问题: 中断服务程序是FAR过程,必须执行IRET指令实现返回。 在ISR的执行过程中,若允许硬件中断,应使用STI指令。 必须保护所有要修改的寄存器,尤其是硬件中断或异常的I

13、SR。 对于硬件中断服务程序,应在返回之前,向中断控制器发送中断结束命令。 主程序的基本结构。 实例。,2019/5/23,80x86汇编语言程序设计,8.5.2 驻留程序设计,(1)什么是驻留程序(TSR程序)? 驻留程序在执行结束后,使程序的一部分仍留在内存,受到操作系统的保护,可以由其它程序再次激活。 (2)驻留程序的基本框架 通常分为两部分:常驻部分和暂驻部分。当TSR程序执行时,由暂驻部分完成初始化,将某个中断向量指向常驻部分对应的ISR,然后驻留退出。将来真正起作用的是常驻部分。 在设计TSR程序时,为了不浪费内存空间,最好将常驻部分放到低内存地址,使暂驻部分位于高地址。较简单的方

14、法是把要常驻的代码和数据组织在一个段中,并使之作为装入内存的第1个段。 (3)设计驻留程序应注意的问题 由于已驻留的TSR程序随时可能会中断其它程序的执行,因此,必须保护要修改的所有寄存器的值。此外,由于INT 21H是不可重入的,因此,在驻留的中断服务程序中,要避免调用INT 21H。,2019/5/23,80x86汇编语言程序设计,8.5.3 键盘程序设计,1. 扫描码 键盘上每个键的位置编码。 每次按键产生两个扫描码,分别为接通扫描码(按下)和断开扫描码(释放)。 2. 键盘输入处理机制 每当按键动作产生时,系统做如下处理: 将扫描码放入I/O端口60H,并触发键盘中断INT 9。 如果

15、允许键盘中断则进入INT 9的中断服务程序。 INT 9 ISR从端口60H读扫描码,并根据扫描码所对应的按键作相应处理。 对于某些扫描码为多个字节的键,每次按下会触发多次键盘中断。,2019/5/23,80x86汇编语言程序设计,3. 与键盘有关的BIOS数据:段地址为40H 键盘缓冲区:地址为40:1EH 变换键状态字节:地址为40:17H 4. 键盘硬件接口 端口64H:读端口64H,可获取主板上键盘微控制器的状态字节。 端口60H:保存键盘发送给CPU的扫描码或应答数据。 5. 实例,2019/5/23,80x86汇编语言程序设计,本章小结,中断是CPU与I/O设备之间进行信息交换的一种方式,也是系统为应用程序提供服务的重要手段。 80x86系统的中断可分为3种类型:硬件中断、异常和陷入。 硬件中断与当前指令的执行无关,是由外部硬件随机触发的。 异常是由指令执行中的错误等意外事件引起的。 陷入是程序员预期要执行的INT指令。 对于硬件中断或异常的处理程序,是由硬件或异常条件自动触发的,通常不应在程序中以INT指令直接调用,如INT 9。 基于DOS的应用程序可通过下列三种途径来控制和访问硬件: 通过I/O指令对硬件直接编程。 调用BIOS服务程序来访问硬件。 调用DOS提供的INT 21H功能来访问硬件。DOS扩充了BIOS的某些功能,提供了更高级的I/O接口。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号