第六章 汇编语言(精品).ppt
第六章 输入输出及中断处理 1、概述 如何利用汇编程序实现主机与外设之间进行信息交换?一、CPU与I/O设备之间的数据传送方式根据外设的性能,采用不同的信息交换方式 无条件传送方式微机提供4种传送方式 查询传送方式 中断传送方式 直接存储器传送方式(DMA)从速度看:无条件传送方式,与DMA方式,适用主机与高速外设之间传送 查询方式与中断传送方式:适用于主机与低速外设之间传送 从采用的技术来看:无条件传送方式与查询传送方式:采用端口技术 中断传送方式:采用中断技术 DMA方式:采用通道技术(由于涉及复杂的通道设备,本章不 介绍此种传送)2汇编语言程序设计 从传送的信息单位看 无条件、查询和中断传送方式:每次传送一个信息单位的数据 (字或字节)DMA方式:一次传送一组信息(如一块512B)注:端口技术是主机与外设之间传送信息最基本的技术二、主机与外设传送的接口与信息 1、端口与接口 每台外设通过一个硬件接口与主机的端口相连,并交换信息 输入 输出接口在外设中,端口在主机中 设备状态寄存器每台外设有一个接口,接口组成:设备控制寄存器 数据寄存器 CPU内存I/O存储空间接口 I/O操作3汇编语言程序设计端口(I/O存储空间)地址:0000H0FFFFH,容量:64KB 对I/O空间的访问,只能用IN /OUT指令访问,其他指令无效接口与端口的连接:每台外设接口种三个寄存器在I/O空间中被指定一固定的地址编 (即为端口地址),CPU通过不同的地址编码来选择外设 *外设接口在端口中固定的地址,可查随机手册获得2、外设与主机交换的信息 控制信息 状态信息 数据 三种信息分别存放在接口的三种寄存器中 (1)控制信息:CPU将控制信息输出到对应外设接口的控制寄存器中,告诉外设应做什么工作,如:I/O设备的启动和停止信号等4汇编语言程序设计 (2)状态信息:从外设状态寄存器输入到对应的端口中,便于 CPU了解设备的状态,如:输入设备:是否准备好的状态 输出设备:“忙”“闲”状态 (3)数据:外设与主机交换的信息:(字或字节数据,视接口 数据寄存器宽度而定)数据分三类:数字量:二进制形式的数字量 开关量:一位二进制表示的量,反映状态,开关的开合,停启等 模拟量:模/数 或数/模转换量5汇编语言程序设计2、程序直接的I/O传送方式 无条件传送方式:不查询外设的状态;直接传送控制 寄存器或数据寄存器的信息。特点:CPU与外设并行工 作 查询传送方式:查询外设状态,决定是否传送信息。特点:CPU与外设串行工作一:IN和OUT指令 IN 外设 主机 OUT 不影响标志位 提供对字和字节操作的两种方式1、输入指令IN 功能:从外设寄存器对应的端口取信息送AL或AX中 格式规定 长格式:若端口地址在00FFH(0255)中,可将地址直接写在 指令中 短格式 :若端口地址在(100H0FFFFH)中,要求将地址=DX 然后再传送信息 6汇编语言程序设计 IN 的格式长格式:IN AL,PORT(字节)(PROT 0,0FFH);(PORT)=AL,直接寻址 IN AX,PORT(字);(PORT+1,PORT)=AX短格式 IN AL,DX(字节);(DX)=AL IN AX,DX(字);(DX+1,DX)=AX如:IN AX,28H;(29H,28H)=AX MOV DAT,AX ;(AX)=DAT如:MOV DX,3FCH IN AX,DX ;(3FDH,3FCH)=AX2、输出指令OUT 功能:把(AX)或(AL)送指定的外设寄存器中长格式:OUT PORT,AL(字节);(AL)=PORT OUT PORT,AX(字);(AX)=PORT+1,PORT 短格式 OUT DX,AL(字节);(AL)=DX OUT DX,AX(字);(AX)=DX+1,DX 7汇编语言程序设计 如:OUT 5,AL;(AL)=5 MOV DX,255H OUT DX,AX ;(AX)=256H,255H二、无条件传送方式的I/O程序设计 特点:不查询外设的状态 利用IN或OUT指令在端口上编程例:扬声器发声程序:通过I/O指令使扬声器的控制寄存器(端口地址为61H)的第一位交替为0和1,使脉冲电流通过或断开发出声音。端口地址:61H 7 1 0 屏蔽振荡器 1/0 0与门放大器8汇编语言程序设计STACK SEGMENT STACK DB 200 DUP(0)STACK ENDSPR SEGMENT ASSUME CS:PR,SS:STACKSTART:MOV DX,100 IN AL,61H AND AL,11111100BSOUND:XOR AL,2 OUT 61H,AL MOV CX,140HWAIT:LOOP WAIT DEC DX JNZ SOUND MOV AH,4CH INT 21H PR ENDS END START9汇编语言程序设计三、查询传送方式I/O程序设计 特点:测试端口中设备状态寄存器的状态 CPU 等待外设工作 1、查询外设状态的例子 如:输入设备 状态寄存器 7 0 “READY”d7=1 准备好 d70未准备好 A:IN AL,STATUS ;取状态寄存器端口中的内容=AL TEST AL,80H JZ A IN AL,DAT_PORT;(DAT_PORT)=AL10汇编语言程序设计如:输出设备 状态寄存器 7 0 B:IN AL,STATUS ;取状态寄存器端口中的内容AL TEST AL,80H JZ B MOV AL,STORE ;STORE单元存贮待输出的一个字节数据 OUT DAT-PORT,AL;数据送输出设备2、例:利用打印机打印(AL)的数据说明:打印机 状态寄存器端口地址:379H 控制寄存器端口地址:37AH 数据寄存器端口地址:378H打印机的控制 7 3 2 1 0 选通位 1:允许读数据控制寄存器 0:正常 一直为1允许 脉冲位1脉冲电流 自动进行位(为1时)读数据请求 d7=0 忙“BUSY”d71 闲11汇编语言程序设计打印数据的控制:0,2,3位均为1,即 000011010DH送控制寄存器然后改送000011000CH,即置选通位为0,即切断数据通路 打印一个字符的子程序:PRINT PROC PUSH AX PUSH DX MOV DX,378H OUT DX,AL ;数据送端口378H中 MOV DX,379H WAT:IN AL,DX TEST AL,80H JZ WAT MOV DX,37AH MOV AL,0DH OUT DX,AL;选通打印字符 MOV AL,0CH OUT DX,AL;恢复选通 12汇编语言程序设计 POP DX POP AX RETPRINT ENDP主程序STACK SEGMENT STACK DB 200 DUP (?)STACK ENDSDATA SEGMENT BUF DB TEST PRINT C=$-BUFDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKS:MOV AX,DATA MOV DS,AX LEA BX,BUF MOV CX,CLA:MOV AL,BX INC BX CALL PRINT13汇编语言程序设计 LOOP LA MOV AH,4CH INT 21HPRINT PROC PRINT ENDPCODE ENDS END S14汇编语言程序设计3、中断传送方式中断技术的作用:提高CPU的效率,实现CPU与外设并行工作(不必等外设)提高系统处理突发事件的能力(如:掉电等)增强系统的灵活性和可靠性(实时地响应事件地请求)中断传送方式的编程任务 设置或取出中断向量 编制中断处理程序一、中断的概念中断:指使CPU中止正在执行的程序,而转去执行处理中断事件的程序,处理结束后,CPU又返回到原来程序的断点处继续往下执行。中断过程:中断请求、中断响应、中断处理和中断返回中断系统:实现中断功能的软件及硬件装置,称为中断系统中断源:引起中断的原因或发生中断请求的来源中断请求:中断源申请CPU中断15汇编语言程序设计中断处理程序(中断服务程序):处理某个中断事件的程序 按中断的程序 中断处理程序 k K+1.断点16汇编语言程序设计 二、PC机的中断源 .中断源分为两类:内中断和外中断 .内中断:指来自CPU内部事件或说是由于程序在执行过程 中 发生了异常情况而引起的中断 处理特点:不受中断允许标志位IF的控制 .外中断:指来自CPU以外的事件而引起的中断。这些事 件与CPU正在执行的程序无关。如:I/O外设请求 引起等 处理特点:受中断允许标志位IF的控制 需要中断控制器(如8259A)的支持和控制 共同的处理特点:需要中断向量表的支持17汇编语言程序设计 不可屏蔽中断NMI(2):硬件故障引起:如掉 外中断 电,内存出错等 可屏蔽中断:INR(80FH):外设请求引起 PC机 除法错(0):除数为0或商越界中断 溢出中断INT0(4):用INT0指令测试溢出 源 内中断 引起的中断 INT n 中断(n)(软中断):INT n引起的中断 单步中断(1):用DEBUG调试程序产生中断 断点中断:INT 3(3):由INT 3引起的中断8086/8088共有256种类型的中断 中断类型号 025518汇编语言程序设计三:中断向量表 1、中断向量表的结构 中断向量表是支持实现中断处理的软件装置 中断向量表:中断类型号与对应的中断处理程序入口地址的 连接表。中断向量表占内存1KB,地址编码00000H003FFH00000H 中断处理程序第一条指令的EA 中断处理程序所在段首址00004H003FCH003FFH0号中断处理 程序的入口地址 -1号中断处理 程序的入口地址 -.255号中断处理 程序的入口地址 -IPCS19汇编语言程序设计每个中断类型号与对应的中断名 中断类型号 中断名 0 除法出错中断 1 单步中断 20H3FH DOS类型中断 .68H6FH 保留 .中断处理程序入口地址在中断向量表中首地址计算为 中断类型号420汇编语言程序设计如:报警中断的类型号为4AH,在对应的中断处理程序入口地址在向量表中的地址为:4AH*4=128H 即:128H,129H 两个字节存放有报警中断处理程序第一条指令的EA 12AH,12BH .所在段的段首址21汇编语言程序设计2、中断类型号的获取(1)除法错、单步中断、断点中断、溢出中断和非屏蔽中分别由MPU芯片内的部件自动提供类型号04(2)软中断INT n 则从指令流中读得中断类型号n(3)外设中断INTR 则由8259A芯片提供中断类型号(非标 准外设则由用户自制电路,利用寄存器组件(如8212芯 片存放类型号,再由MPU响应中断将中断类型号送总 线从而获得)。3、中断向量的设置和取出 设置中断向量:指用户利用保留的中断类型号,将中断 处理程序的入口地址送到中断向量表相 应单元中。(1)中断向量的设置 功能:把由AL指定的中断类型的中断向量DS:DX放置 在中断向量表中。22汇编语言程序设计 用中断调用的方法设置:(AH)=25H (AL)=中断类型号 (DS)=中断处理程序所在段的段首址 (DX)=中断处理程序第一条指令的EA INT 21H(2)取中断向量 功能:把由(AL)指定的中断类型的中断向量,从中断向量表中取出送到ES:BX中 调用:(AH)=35H (AL)=A中断类型号 INT 21H 返回参数:(ES)=中断处理程序的段首址 (BX)=中断处理程序第一条指令地址的EA23汇编语言程序设计四:、软中断指令和中断返回指令 1、软中断指令:INT n SP 功能:保存(FLAGS)=(SP)0=IF,TF 中断(CS)=(SP)(4n2)CS 前的(IP)=(SP)(4n)=IP 断点 信息 被中断程序 转中断处理程序2、中断返回指令:IRET (在中断处理程序中)功能:(SP)=IP 恢复断点地址,返调用程序 (SP)=CS (SP)=FLAGS_(IP)_(CS)_(FLAG)_24汇编语言程序设计例:中断调用:中断处理程序的功能:将AX中的十六位无符号二进 制数,以四位十六进制的形式显示输出(利用空闲的45H号中断)主模块:STACK SEGMENT STACK DB 200 DUP(?)STACK ENDS DATA SEGMENT BUF DW 1234H,5678H,9ABCH N=($-BUF)/2 SPACE DB$IA DW?DATA ENDS CB DW?CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK EXTRN INTR45:FARB:MOV AX,SEG INTR45 MOV AX,350FH MOV DS,AX INT 21H LEA DX,INTR45 MOV IA,BX MOV AX,2545H MOV CB,ES 取出0FH号中断向量 25汇编语言程序设计 INT 21H MOV AX,DATA MOV DS,AX LEA SI,BUF MOV CX,NLOPA:MOV AX,SI INT 45H MOV AH,9 LEA DX,SPACE INT 21H ADD SI,2 LOOP LOPA MOV DX,IA MOV AH,4CH MOV DS,CB INT 21H MOV AX,250FH CODE ENDS INT 21H END B 恢复0FH中断向量26汇编语言程序设计子模块:中断处理程序STACK SEGMENT STACK DB 200 DUP(0)STACK ENDSDATA SEGMENT TAB DB 0123456789ABCDEF BT DB 4 DUP(?),H$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK PUBLIC INTR45INTR45 PROC FAR PUSH BX PUSH CX PUSH SI PUSH DS27汇编语言程序设计MOV BX,DATA MOV DS,BX LEA SI,BT LEA BX,TAB MOV CH,4 MOV CL,4LOP:ROL AX,CL PUSH AX AND AX,0FH XLAT ;(BX)+(AL)=AL MOV SI,AL POP DS INC SI POP SI POP AX POP CX DEC CH POP BX JNE LOP IRET MOV AH,9 INTR45 ENDP LEA DX,BTCODE ENDS INT 21H END28汇编语言程序设计4、屏幕显示程序 一、显示器 微机通过两个适配器接口板联有:单色显示器 彩色/图形显示器或TV 1、单色显示器 工作方式:文本方式:显示黑白字符,每一个字符占一个方块(块分割屏幕)显示格式:80列25行 黑白字符及字符图形(2000个字符)屏幕缓冲区:段首址为0B000H,偏移地址00F9FH共4KB0B000:0000:0001 (0,0):0002:0003 (24,79)字符的ASCII码字符属性字符的ASCII码字符属性字符ASCII码字符属性屏幕:0F9EH:0F9FH29汇编语言程序设计 每个字符需要两个字节表示:字符ASCII码字节和属性字节 单色的属性字节:彩色属性字节:7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 红 绿 兰 闪烁 背景 加亮 前景 闪烁 背景 加亮 前景1闪烁 000黑 1加亮 000黑 8种0不闪 111白 0不加 111白 组合色 16种组合颜色 如:0 001 0 0 0 0:兰底黑字2、彩色/图形显示器工 文本方式 高分辨率:80列25行作 低分辨率:40列25行方 图形方式:以点(象素点)分割屏幕:显示图象式 中分辨率:320点200行(64000点)彩显和黑白 高分辨率:640点200行:只支持黑白显示 用户用指令选择显示方式30汇编语言程序设计二、BIOS 10H中断调用 利用BIOS中10H中断调用(00FH 16种功能)进行显示设计1、设置显示方式(功能号0)入口参数:(AH)=0 0 4025 黑白文本方式 1 4025 彩色文本方式 2 8025 黑白文本方式 3 8025 彩色文本方式 彩显屏幕 4 320200 黑白图形方式 5 320200 彩色图形方式 6 640200 黑白图形方式 7 8025 黑白文本方式:单显屏幕 .一旦置为图形方式,光标即消失 返回参数:无例:MOV AH,0 ;设置显示方式 MOV AL,3 ;彩色文本方式 INT 10H (AL)=31汇编语言程序设计 2、设置光标位置(功能号:2)入口参数:(AH)=2,(BH)=页号,(DH)=行号,(DL)=列号 返回参数:无例:MOV AH,2 ;设置光标位置 MOV BX,0 ;页号为0(帧屏号)MOV DX,1020H ;行号(DH)=10H=16 ;列号(DL)=20H=32 INT 10H 3、屏幕上滚(功能号:6)入口参数:(AH)=6,(AL)=上滚行数,窗口底部为空白输 入行,若(AL)=0,表示整屏为空白(即清屏)(CH,CL)=滚动区的左上角行、列号 (DH,DL)=滚动区的右下角行、列号 (BH)=空白输入行的属性返回参数:无32汇编语言程序设计 例:MOV AX,601H ;屏幕上滚1行 MOV BH,7 ;通常显示(属性),黑底白字 MOV CX,0 ;滚动区左上角的行列号(0,0)MOV DX,184FH ;滚动区右下角的行列号(24,79)INT 10H4、屏幕下滚(功能号:7)入口参数:(AH)=7,其余同6号功能,只是窗口顶部为输入空白行 返回参数:无 利用6、7号功能,可清部分屏幕或全部屏幕5、在当前光标位置写字符(功能号:0AH)入口参数:(AH)=0AH,(BH)=页号 (AL)=要写字符的ASCII码,(CX)=重复次数 出口参数:无33汇编语言程序设计 例如:MOV AH,0AH MOV AL,*MOV BH,0 MOV CX,1 INT 10H 例:建立920上滚窗口,将键入的内容在该窗口中显示出来(8,30)9行空白 输入行 20列 (16,50)34汇编语言程序设计STACK SEGMENT STACK DB 200 DUP(0)STACK ENDSP SEGMENT ASSUME CS:P,SS:STACKA:MOV AH,6 ;MOV AL,0 MOV CH,0 MOV CL,0 清整个屏幕 MOV DH,24 MOV DL,79 MOV BH,7 INT 10H ;PS:MOV AH,2 ;MOV DH,16 MOV DL,30 设置光标在窗口底部 MOV BH,0 INT 10H;35汇编语言程序设计 MOV CX,20 ;空白输入行每次接20字符GET:MOV AH,1 ;INT 21H 接收20个键入的字符显示 CMP AL,3 3为ctrlc的ASCII码 JZ EXIT LOOP GET;MOV AH,6 MOV AL,1 MOV CH,8 向上滚动一行 MOV CL,30 MOV DH,16 MOV DL,50 MOV BH,7 INT 10H JMP PS ;转ps处,设置光标在窗口底部EXIT:MOV AH,4CH INT 21H P ENDS END A36汇编语言程序设计三:图形显示 分为:在文本方式下:显示字符图形 在图形方式下:显示由点组成的图象1、文本方式下的字符图形显示 字符图形的移动显示 步骤:a:先在屏幕指定位置显示该字符 b:延长适当的时间 c:清除该字符 d:改变该字符的行列坐标 e:重复ad步37汇编语言程序设计w例:让“太阳符”(ASCII码:0FH),首先在屏幕(0,0)位置显示,然后沿(1,1),(2,2).直到 25行为止移动 MOVE PROC FAR MOV AH,15;读当前显示状态 INT 10H ;获得当前页号=BH MOV AH,0 MOV AL,2 设置8025黑白文本显示方式 INT 10H MOV CX,1 ;显示字符个数 MOV DX,0REPT:MOV AH,2 设置光标位置(0,0)INT 10H MOV AL,0FH MOV AH,0AH 在光标位置写字符,页号开始即有 INT 10H CALL DELAY ;延时0.5秒 SUB AL,AL ;(AL)=038汇编语言程序设计 MOV AH,0AH ;清除 *INT 10H INC DH ;改变行号 INC DL CMP DH,25 ;判行号是否为25 JNZ REPT;否则继续显示 RET MOVE ENDPDELAY PROC POP CX PUSH CX RET PUSH DX DELAY ENDP MOV DX,50DL500:MOV CX,2801DL10MS:LOOP DL10MS ;10ms,DEC DX;延时0.5秒 JNZ DL500 POP DX39汇编语言程序设计注:可以设计字符组合图形的显示如:40汇编语言程序设计2、图象显示 .用0BH号功能设置背景颜色和调色组 .用0CH号功能在屏幕上写彩点例:在黑底屏幕上自(0,0)起画一条红色斜线STACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACKSTART:MOV AH,0 MOV AL,5设置320200彩色图形显示方式 INT 10H MOV AH,0BH MOV BH,0设置 背景色为黑色 MOV BL,0 INT 10H41汇编语言程序设计 MOV AH,0BH MOV BH,1 选择彩色组(绿/红/黄)MOV BL,0 (0号彩色组)INT 10H MOV DX,0 线段的起始坐标=DX,CX MOV CX,0 LOP:MOV AH,0CH MOV AL,2 在DX,CX指示位置写红点 INT 10H INC DX 行列坐标各增1 INC CX CMP CX,200 JBE LOP ;是否到达终点 MOV AH,4CH INT 21H CODE ENDS END START42汇编语言程序设计