汇编语言 课件 第9章资料

上传人:今*** 文档编号:111810328 上传时间:2019-11-03 格式:PPT 页数:66 大小:241.50KB
返回 下载 相关 举报
汇编语言 课件 第9章资料_第1页
第1页 / 共66页
汇编语言 课件 第9章资料_第2页
第2页 / 共66页
汇编语言 课件 第9章资料_第3页
第3页 / 共66页
汇编语言 课件 第9章资料_第4页
第4页 / 共66页
汇编语言 课件 第9章资料_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《汇编语言 课件 第9章资料》由会员分享,可在线阅读,更多相关《汇编语言 课件 第9章资料(66页珍藏版)》请在金锄头文库上搜索。

1、第9章 BIOS和DOS中断 9.1 键盘I/O 9.2 显示器I/O 9.3 打印机I/O 9.4 串行通信口I/O,9.1 键盘I/O 键盘的中断有3个: (1)DOS的21H号中断,提供功能较强的读键功能; (2)BIOS的16H号中断,提供较低层次的服务; (3)BIOS的9号中断,这是键盘硬中断,每当键盘上有键被按下,键盘都会通过接口向CPU提出9号中断请求。,9.1.1 9号中断与键盘工作原理 键盘上的按键分为普通键和控制键两类。控制键包括Shift、Ctrl、Alt、CapsLock 等,其余为普通键。 对于每个普通键,根据各键在键盘上的分布位置对键进行编码,得到键盘扫描码(P3

2、17)。每个键还有ASCII码。 当发生9号中断请求时,表明键盘有按键信息需要送到主机中,在没有被屏蔽的情况下,CPU将响应该中断,执行一次9号中断服务程序,处理从键盘传来的信息。 9号中断服务程序的功能主要有:如果是控制键被按下或松开,就把BIOS数据区中的键盘状态字节作相应调整;如果是普通键,则把按键的扫描码和ASCII码一起存入键盘缓冲区。,计算机启动后,在内存较低端(物理地址400H起,紧接在中断向量表的后面)有一段供BIOS使用的数据区,其中包括存放各控制键状态的键盘状态字节和存放普通键的32字节键盘缓冲区。 键盘缓冲区是一个先进先出的环形队列,共32字节,可以存放15个键的扫描码和

3、ASCII码。其所占内存区域如下: KBHead DW ? ;其内存地址为0000:041AH,缓冲区头指针 KBTail DW ? ;其内存地址为0000:041CH,缓冲区尾指针 KBBuff DW 16 DUP(?);其内存地址为0000:041EH, 读键时可以从队列首部取走键值,9号中断则把新的按键置入队列尾部。当键盘缓冲区已满,而键盘上还有普通键被按下时,键盘仍然会提出中断申请,但9号中断的服务程序中会忽略该按键,并使计算机的小喇叭发出“嘀”的一声,以表示缓冲区已满。,表9.4 状态字节与控制键的对应关系,键盘状态字节在物理地址417H处,每一位代表一个控制键,为1表示该键处于按下

4、的状态,为0则是松开的。状态字节的各个位与控制键的对应关系见表9.4。,9.1.2 BIOS键盘中断 16H号中断是BIOS提供给用户程序使用的一个软件中断,以INT 16H指令调用,提供基本的键盘服务,包括读键、判断有无普通键按下、读取控制键的状态等子功能。 10号子功能读普通键 如果键盘缓冲区不空,则从缓冲区的环型队列首部取走一个按键,把按键的扫描码放到AH中,ASCII码放到AL中作为出口参数; 如果键盘缓冲区是空的,则等待有效按键输入。,21号子功能不改变缓冲区的读键 当键盘缓冲区中还存放有没取走的有效按键时,出口参数中ZF=0,AX=扫描码与ASCII码。 如果键盘缓冲区已空,则ZF

5、 =1表示无键可读。 1号子功能与0号的差别。 首先,在缓冲区为空时,0号子功能将等待按键,1号子功能则不等待,而是以ZF置1表示(这是很多电脑游戏软件典型的读键方式)。 其次,如果缓冲区不空,0号子功能会取走该键,而1号子功能并不取走,只把它复制到AX中。,32号子功能读控制键状态 直接从BIOS数据区中复制出键盘状态字节的值,放到AL中作为出口参数。 410H号子功能读键并清除键盘缓冲区 读键的情况与0号子功能完全相同,10H号子功能在读完键后还会清除键盘缓冲区中剩余的所有按键数据。,9.1.3 DOS的输入子功能 DOS提供的输入子功能见P320。 17号子功能无回显输入 直接调用前面所

6、说的16H号中断的0号子功能。 28号子功能无回显输入 7号非常接近,只是对按键增加了Ctrl+Break的处理。 30AH号子功能输入字符串(P321) 读入一串字符并存入用户定义的缓冲区中。,40BH号子功能判断按键状态 用于判断键盘缓冲区是否为空,出口参数是: 当键盘缓冲区不空时,AL0FFH; 当键盘缓冲区为空时,AL0FFH。 50CH号子功能清除键盘缓冲区后再读键入口参数: AH0CH; AL清除缓冲区后再执行的功能号,可以是1、7、8。 出口参数: 按AL中的功能号,与DOS的3个子功能出口参数对应相同。 先把键盘缓冲区清空,然后再根据AL中的值,执行DOS的1号、7 号或8号子

7、功能。,9.2.4 封锁键盘的方法 封锁键盘就是让键盘不能工作,使系统不能接收从键盘输入的数据。 屏蔽键盘中断有两种方法:一是把标志寄存器中的IF标志位清0,二是利用系统的中断控制器。 封锁键盘的程序段: IN AL, 21H OR AL, 00000010B OUT 21H, AL,例9.1 用键盘最多输入10个字符,并存入内存变量Buff中,若按“Enter”键,则表示输入结束。 1、方法1 .MODEL SMALL CR EQU 0DH ;定义“回车”键的符号名 .DATA Buff DB 10 DUP(?) .CODE . STARTUP ;p127 MOV CX, 0AH LEA B

8、X, Buff LP: MOV AH, 0H INT 16H ;用BIOS中的中断功能 CMP AL, CR JZ EXIT MOV BX, AL INC BX LOOP LP EXIT: .EXIT 0 END,2、方法2 .MODEL SMALL .DATA Buff DB 10, ?, 10 DUP(?) ;注意缓冲区的定义方式 .CODE .STARTUP LEA DX, Buff MOV AH, 0AH INT 21H ;用DOS中的功能调用 .EXIT 0 END,9.2 显示器I/O 常用的显示分辨率为800600或1024768等。 常用的显示卡类型为VGA、SVGA、EVGA

9、和TVGA等。1、显示模式 计算机系统中的显示器都有二种显示方式:文本显示方式和图形显示方式。在DOS操作系统环境下,其默认的显示方式为文本显示方式,而在Windows操作系统环境下,其显示方式是图形显示方式,其绝大多数操作界面是以图形界面的窗口形式出现的。,1)、文本显示方式 在常用的文本显示模式(模式3)下,每屏最多可显示2000(8025)个字符。 规定:屏幕的左上角坐标为(0, 0),右下角坐标为(24, 79)。 在显示字符时,用一个字节存储该字符的ASCII码,用另一个字节存储的显示属性,即:显示颜色。 彩色显示器的字符显示属性定义如图 (P325),存储内容与显示位置的对应关系下

10、如图:,2)、图形显示方式,图形显示的最小单位是象素,对每个象素可用不同的颜色来显示。所以,在显示缓冲区内记录的信息是屏幕各象素的显示颜色。 由于各种图形显示模式所能显示的颜色和象素是不同的,它决定了显示缓冲区的存储方式也是不同的。下面给出一个具体的图形显示模式及其存储方式。,256色320200图形显示模式,表达256种不同颜色需要8位二进制,即一个字节。在该模式下,其显示缓冲区的存储方式是非常简单的,即:第一个字节存储第一个象素的颜色,第二个字节存储第二个象素的颜色,以此类推,所以,存储满屏象素所需要的字节数为:320200164000。其显示缓冲区的存储方式如图8.10所示。,2、显示缓

11、冲区,显示缓冲区是用来记录屏幕显示信息的。 在文本显示方式下,显示信息包括:每个显示字符的ASCII码及其显示属性。 在图形显示方式下,显示缓冲区内存储每个象素的显示颜色。,文本显示方式下,单色显示器的显示缓冲区段地址为0B000H; 文本显示方式下,彩色显示器显示缓冲区段地址为0B800H; 图形显示方式下,其显示缓冲区段地址为0A000H。,9.2.1 BIOS的10H号中断服务程序 9.2.1.1 对光标的控制 1改变光标的大小 CX0E0FH, 光标是在字符下部的一条小短线; CX080FH, 光标是下半格的小方块; CX0102H, 光标是在字符上部的一条小短线; CX0FFFFH,

12、消隐光标,即不显示闪烁的光标。,2改变光标的位置 其入口参数是: AH2,子功能号; BH显示页的页号; DH光标移动到哪一行,屏幕顶端为第0行; DL光标移动到哪一列,屏幕左端为第0列。,3读光标位置 入口参数: AH3,子功能号; BH显示页的页号。 出口参数: DH/DL该显示页的光标所在行/列坐标; CH/CL该显示页的光标起始线/结束线。,9.2.1.2 清屏与卷屏 AH6/7,子功能号,6为上卷屏,7为下卷屏; AL卷动行数,若AL为0则为清屏; BH卷动后留出的空白部分的属性; CH/CL左上角的行/列坐标; DH/DL右下角的行/列坐标。,下面的程序段可以把屏幕设置成中间是绿色

13、,四周是蓝色的无字画面。 MOV AX,600H MOV BH,1FH XOR CX,CX ;屏幕左上角坐标 MOV DX,184FH ;屏幕右下角坐标 INT 10H ;用蓝底白字把指定窗口清屏 MOV BH,2FH MOV CX,408H ;窗口左上在第4行、第8列 MOV DX,1447H ;窗口右下在第20行、第71列 INT 10H ;用绿底白字把指定窗口清屏,【例9.2】清屏,并为整个屏幕画一个蓝底白字的外框。 【解】 disp MACRO x,y ;定义一个重复使用的程序段为一个宏 MOV AL,x MOV DX,y CALL onechar ENDM code SEGMENT

14、ASSUME CS:code,clrscr PROC NEAR ;以蓝底白字属性清屏子程序 MOV AX,600H MOV BH,1FH XOR CX,CX MOV DX,184FH INT 10H RET clrscr ENDP ;入口:AL待显示字符,DX显示的位置 Onechar PROC NEAR,PUSH AX MOV AH,2 MOV BH,0 INT 10H ;移动光标到DX指定的位置 POP AX MOV CX,1 MOV BL,1FH MOV AH,9 INT 10H ;在当前光标处显示AL中的字符,只显示一个 RET,onechar ENDP,start: CALL clr

15、scr ;清屏 disp 218,0 ;显示外框的左上角 disp 191,4FH ;显示外框的右上角 disp 192,1800H ;显示外框的左下角 disp 217,184FH ;显示外框的右下角 MOV AH,2 MOV DX,1 INT 10H ;移光标到第0行第1列 MOV AX,9C4H MOV BL,1FH MOV CX,78,INT 10H ;显示78个小短线,是外框的顶部 MOV AH,2 MOV DX,1801H INT 10H ;移光标到第24行第1列 MOV AX,9C4H MOV CX,78 INT 10H ;显示78个小短线,是外框的底部 MOV SI,100H ;取第1行第0列的位置 s1: disp 179,SI ;以SI高/低8位作为行/列坐标,显 示一个小竖线 ADD SI,100H ;表示行数的高8位加1 CMP SI,1800H,JB s1 ;没到最底一行转 MOV SI,14FH ;取第1行第79列的位置 s2: disp 179,SI ;以SI高/低

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

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

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