汇编语言序设计第八章 输入输出程序设计
发布时间:2024-04-29 09:04:23浏览次数:40汇编语言序设计主 题: 第八章 输入输出程序设计(第 2-3 节)内 容:第八章 输入输出程序设计 概述 本周继续学习输入输出程序设计,中断传送方式及相应程序举例。采用向量中断的方法,大大加快了中断处理的速度,因为计算机可直接通过中断向量表转向相应处理程序,而不需要 CPU 去逐个检测和确定中断原因。第八章内容实际上可以看作是汇编语言程序设计的应用,是结合硬件基础和语言编程的应用,另外在实用方面也是很值得学习的,硬件开发最终都要通过接口来实现功能。第 2 节 中断传送方式3)8086 中断分类:(1)内中断(2)外中断:包括 非屏蔽中断 NMI 外部设备的中断请求,也即可屏蔽中断说明:微机配置的外部设备一般有磁盘,显示器和各种打印机等,它们通过 8259A 可编程中断控制器和 CPU 相连,8259A 可接收来自外设的中断请求信号,并把中断源的中断类型号送到 CPU。中断允许位 IF 和中断屏蔽寄存器 IMR 决定 CPU 是否响应外设的中断请求,中断屏蔽寄存器的 I/O 端口地址是 21H,其示意图如下:
7 6 5 4 3 2 1 0打印机软盘硬盘串行通信口1串行通信口2保留键盘 定时器R SL EOI 0 0 L2 L1 L0中断命令寄存器 (20H)中断屏蔽寄存器 (21H) 0 允许 1 屏蔽 说明:非屏蔽中断和 IF 位无关,非屏蔽中断类型号为 2,CPU 不能禁止非屏蔽中断。中断命令寄存器中的 L2-L0 三位指定 IRO 到 IR7 中最低优先级的中断请求,SL 和 R 控制 IR0 到 IR7 的中断优先级顺序。4)中断类型号:中断指令中的 N 就是中断类型号5)中断向量表:80x86 中断系统能处理 256 种类型的中断,类型号为 0 到 0FFH,每种类型的中断都由相应的中断处理程序来处理,中断向量表就是各种类型的中断处理程序的入口地址表,存储器中最低 1KB,地址从 0000 到 3FFH 存放中断向量,中断向量表中的 256 项中断向量对应 256 种中断类型,每项占用四个字节,其中两个字节存放中断处理程序的段地址(高双字节),另两个字节存放偏移地址(低双字节)。中断类型号乘 4 可以算出其相应的中断程序入口地址:中断向量地址6)中断处理过程如下: 取中断类型号 N 标志寄存器内容入栈 当前代码段寄存器内容入栈 当前指令计数器内容入栈 禁止硬件中断和单步中断(IF=0,TF=0) 从中断向量表中取 4*N 的字内容送 IP,去 4*N+2 字内容送 CS
转入中断处理程序 说明:中断发生过程很像我们熟悉的子程序调用,不同的是在保护中断现场时,除了保护返回地址 CS:IP 外,还保存了标志寄存器 FLAGS 的内容,因为标志寄存器记录了中断发生时,程序指令运行的结果特征,当 CPU 处理完中断请求返回原程序时,要保证原程序的连续性和正确性;另一个不同的地方是,中断发生时,CPU 还自动清除了 IF 和 TF 位,这样设计的目的是使 CPU 转入中断处理程序后,不允许再产生新的中断,当然如果可以通过 STI 指令把 IF 设为 1 而允许中断过程中接受中断申请。还需要注意的是,中断程序返回指令是 IRET,而不是 ENDP 7)中断优先级:当多个中断源都发出中断请求的时候,就必须给每个中断源安排个中断优先级,8086 规定的中断优先级次序是: 优先级高 软件中断(除法错,INTO,INT) 非屏蔽中断(NMI) 可屏蔽中断(INTR) 低 单步中断可屏蔽中断的优先级又分为八级,正常优先级方式下,次序是 IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7,也就是说定时器优先级最高,键盘其次,打印机优先权最低,另外可以通过改变 8259A 中命令寄存器的 6,7 位控制各中断请求的优先级8)中断嵌套:正在运行的中断处理程序,又被其他中断源中断,这种情况叫做中断嵌套。第 3 节 键盘程序 1)字符码与扫描码:采用 ASCⅡ 表示字母,数字,专用字符和一些非打印字符,键盘上的控制键和功能键的 ASCⅡ 为 0,必须用扫描码来识别;键盘上的每个键都对应一个扫描码,扫描码是按键的位置排列的,我们需要把扫描码转换为 ASCⅡ 码 2)键盘程序一如下: Main proc far … Lea bx,scatab ;码表 SCATAB 假设已经定义
换码指令默认 BX 寄存器KEY_IN: IN AL,60H ;间接端口寻址方式 TEST AL,80H ;检测是否是通码,最高位 0 则表示按键按下 JNZ KEY_IN ;为 1,则继续检测 PUSH AX ;为 1,有按键按下,把数据保存入栈 IN AL,61H ;设置应答位,最高位置 1 OR AL,80H OUT 61H,AL ;复位应答位,最高位置 0 AND AL,7FH OUT 61H,AL POP AX ;AX 数据出栈 CMP AL,01 JZ EXIT ;按 ESC,则退出程序 XLATB ;字节换码 CMP AL,0 JZ NO_DISP CALL DISP_CHAR ;调用回显子程序 DISP_CHAR NO_DISP: JMP KEY_IN EXIT: …. MAIN ENP ;****************************** DISP_CHAR PROC NEAR ;回显子程序 MOV AH,2 MOV DL,AL INT 21H RET DISP_CHAR ENDP 3)键盘程序二:纤细内容可以参看课件,这里不再列出本周要求掌握的内容如下:基本概念:中断传送方式、中断过程、中断概念、中断源、中断源和中断向量表、中断优先级、
中断嵌套基本理论:理解中断的作用,会用中断类型号算中断向量地址,熟悉常见中断源的中断优先级,理解中断过程与子程序的区别之处习题:1、中断屏蔽寄存器的地址是多少: 21H2、中断返回指令是: (A)END (B)ENDS (C)ENDP (D)IRET D3、关于键盘扫描码和字符码的描述正确的是: (A)字符码是 ASCⅡ 码 (B)扫描码是 ASCⅡ 码 (C)字符码需要转换成扫描码 (C)扫描码需要转换成字符码 AD