汇编语言 课件 第9章_第1页
汇编语言 课件 第9章_第2页
汇编语言 课件 第9章_第3页
汇编语言 课件 第9章_第4页
汇编语言 课件 第9章_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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号中断与键盘工作

2、原理号中断与键盘工作原理 键盘上的按键分为普通键和控制键两类。控制键包括键盘上的按键分为普通键和控制键两类。控制键包括Shift、Ctrl、Alt、CapsLock 等,其余为普通键。等,其余为普通键。对于每个普通键,根据各键在键盘上的分布位置对键进行编对于每个普通键,根据各键在键盘上的分布位置对键进行编码,得到键盘扫描码码,得到键盘扫描码(P317)。每个键还有。每个键还有ASCII码。码。当发生当发生9号中断请求时,表明键盘有按键信息需要送到主机中,号中断请求时,表明键盘有按键信息需要送到主机中,在没有被屏蔽的情况下,在没有被屏蔽的情况下,CPU将响应该中断,执行一次将响应该中断,执行一次

3、9号中号中断服务程序,处理从键盘传来的信息。断服务程序,处理从键盘传来的信息。 9号中断服务程序的功能主要有:如果是控制键被按下或松开,号中断服务程序的功能主要有:如果是控制键被按下或松开,就把就把BIOS数据区中的键盘状态字节作相应调整;如果是普通数据区中的键盘状态字节作相应调整;如果是普通键,则把按键的扫描码和键,则把按键的扫描码和ASCII码一起存入键盘缓冲区。码一起存入键盘缓冲区。计算机启动后,在内存较低端计算机启动后,在内存较低端(物理地址物理地址400H起,紧接在中断向量表的起,紧接在中断向量表的后面后面)有一段供有一段供BIOS使用的数据区,其中包括存放各控制键状态的键盘使用的数

4、据区,其中包括存放各控制键状态的键盘状态字节和存放普通键的状态字节和存放普通键的32字节键盘缓冲区。字节键盘缓冲区。键盘缓冲区是一个先进先出的环形队列,共键盘缓冲区是一个先进先出的环形队列,共32字节,可以存放字节,可以存放15个键的个键的扫描码和扫描码和ASCII码。其所占内存区域如下:码。其所占内存区域如下:KBHead DW? ;其内存地址为其内存地址为0000:041AH,缓冲区头指针,缓冲区头指针KBTail DW? ;其内存地址为其内存地址为0000:041CH,缓冲区尾指针,缓冲区尾指针KBBuff DW16 DUP(?);其内存地址为其内存地址为0000:041EH,读键时可以

5、从队列首部取走键值,读键时可以从队列首部取走键值,9号中断则把新的按键置入队列尾部。号中断则把新的按键置入队列尾部。当键盘缓冲区已满,而键盘上还有普通键被按下时,键盘仍然会提出中当键盘缓冲区已满,而键盘上还有普通键被按下时,键盘仍然会提出中断申请,但断申请,但9号中断的服务程序中会忽略该按键,并使计算机的小喇叭发号中断的服务程序中会忽略该按键,并使计算机的小喇叭发出出“嘀嘀”的一声,以表示缓冲区已满。的一声,以表示缓冲区已满。 表9.4 状态字节与控制键的对应关系 位号 76543210控制键InsertCapsLockNum LockScroll LockAltCtrl左shift右shif

6、t键盘状态字节在物理地址键盘状态字节在物理地址417H处,每一位代表一个控制键,处,每一位代表一个控制键,为为1表示该键处于按下的状态,为表示该键处于按下的状态,为0则是松开的。状态字节则是松开的。状态字节的各个位与控制键的对应关系见表的各个位与控制键的对应关系见表9.4。 9.1.2 BIOS键盘中断键盘中断 16H号中断是号中断是BIOS提供给用户程序使用的一个软件中断,提供给用户程序使用的一个软件中断,以以INT 16H指令调用,提供基本的键盘服务,包括读键、判指令调用,提供基本的键盘服务,包括读键、判断有无普通键按下、读取控制键的状态等子功能。断有无普通键按下、读取控制键的状态等子功能

7、。 10号子功能号子功能读普通键读普通键 如果键盘缓冲区不空,则从缓冲区的环型队列首部取走如果键盘缓冲区不空,则从缓冲区的环型队列首部取走一个按键,把按键的扫描码放到一个按键,把按键的扫描码放到AH中,中,ASCII码放到码放到AL中中作为出口参数;作为出口参数; 如果键盘缓冲区是空的,则等待有效按键输入。如果键盘缓冲区是空的,则等待有效按键输入。 21号子功能号子功能不改变缓冲区的读键不改变缓冲区的读键 当键盘缓冲区中还存放有没取走的有效按键时,出口参当键盘缓冲区中还存放有没取走的有效按键时,出口参数中数中ZF=0,AX=扫描码与扫描码与ASCII码。码。 如果键盘缓冲区已空,则如果键盘缓冲

8、区已空,则ZF =1表示无键可读。表示无键可读。 1号子功能与号子功能与0号的差别。号的差别。 首先,在缓冲区为空时,首先,在缓冲区为空时,0号子功能将等待按键,号子功能将等待按键,1号子号子功能则不等待,而是以功能则不等待,而是以ZF置置1表示(这是很多电脑游戏软件表示(这是很多电脑游戏软件典型的读键方式)。典型的读键方式)。 其次,如果缓冲区不空,其次,如果缓冲区不空,0号子功能会取走该键,而号子功能会取走该键,而1号号子功能并不取走,只把它复制到子功能并不取走,只把它复制到AX中。中。 32号子功能号子功能读控制键状态读控制键状态 直接从直接从BIOS数据区中复制出键盘状态字节的值,放到

9、数据区中复制出键盘状态字节的值,放到AL中作为出口参数。中作为出口参数。 410H号子功能号子功能读键并清除键盘缓冲区读键并清除键盘缓冲区 读键的情况与读键的情况与0号子功能完全相同,号子功能完全相同,10H号子功能在读号子功能在读完键后还会清除键盘缓冲区中剩余的所有按键数据。完键后还会清除键盘缓冲区中剩余的所有按键数据。 9.1.3 DOS的输入子功能的输入子功能 DOS提供的输入子功能见提供的输入子功能见P320。 17号子功能号子功能无回显输入无回显输入 直接调用前面所说的直接调用前面所说的16H号中断的号中断的0号子功能。号子功能。 28号子功能号子功能无回显输入无回显输入 7号非常接

10、近,只是对按键增加了号非常接近,只是对按键增加了Ctrl+Break的处理。的处理。 30AH号子功能号子功能输入字符串(输入字符串(P321) 读入一串字符并存入用户定义的缓冲区中。读入一串字符并存入用户定义的缓冲区中。 40BH号子功能号子功能判断按键状态判断按键状态 用于判断键盘缓冲区是否为空,出口参数是:用于判断键盘缓冲区是否为空,出口参数是: 当键盘缓冲区不空时,当键盘缓冲区不空时,AL0FFH; 当键盘缓冲区为空时,当键盘缓冲区为空时,AL0FFH。 50CH号子功能号子功能清除键盘缓冲区后再读键入口参数:清除键盘缓冲区后再读键入口参数: AH0CH; AL清除缓冲区后再执行的功能

11、号,可以是清除缓冲区后再执行的功能号,可以是1、7、8。 出口参数:出口参数: 按按AL中的功能号,与中的功能号,与DOS的的3个子功能出口参数对应相同。个子功能出口参数对应相同。 先把键盘缓冲区清空,然后再根据先把键盘缓冲区清空,然后再根据AL中的值,执行中的值,执行DOS的的1号、号、7 号或号或8号子功能。号子功能。 9.2.4 封锁键盘的方法封锁键盘的方法 封锁键盘就是让键盘不能工作,使系统不能接收从键盘封锁键盘就是让键盘不能工作,使系统不能接收从键盘输入的数据。输入的数据。 屏蔽键盘中断有两种方法:一是把标志寄存器中的屏蔽键盘中断有两种方法:一是把标志寄存器中的IF标标志位清志位清0

12、,二是利用系统的中断控制器。,二是利用系统的中断控制器。封锁键盘的程序段:封锁键盘的程序段: IN AL, 21H OR AL, 00000010B OUT 21H, AL例例9.1 用键盘最多输入用键盘最多输入10个字符,并存入内存变量个字符,并存入内存变量Buff中,若按中,若按“Enter”键,键,则表示输入结束。则表示输入结束。1、方法、方法1.MODEL SMALLCREQU 0DH ;定义定义“回车回车”键的符号名键的符号名.DATABuffDB 10 DUP(?).CODE . STARTUP ;p127 MOV CX, 0AH LEA BX, Buff LP: MOV AH,

13、0H INT 16H ;用用BIOS中的中断功能中的中断功能 CMP AL, CR JZ EXIT MOV BX, AL INC BX LOOP LP EXIT: .EXIT 0 END2、方法、方法2.MODELSMALL.DATABuffDB10, ?, 10 DUP(?) ;注意缓冲区的定义方式注意缓冲区的定义方式.CODE.STARTUPLEADX, BuffMOVAH, 0AHINT21H ;用用DOS中的功能调用中的功能调用.EXIT0END 9.2 显示器显示器I/O 常用的显示分辨率为常用的显示分辨率为800600或或1024768等。等。 常用的显示卡类型为常用的显示卡类型为

14、VGA、SVGA、EVGA和和TVGA等。等。1、显示模式、显示模式 计算机系统中的显示器都有二种显示方式:文本显示方计算机系统中的显示器都有二种显示方式:文本显示方式和图形显示方式。在式和图形显示方式。在DOS操作系统环境下,其默认的显示操作系统环境下,其默认的显示方式为文本显示方式,而在方式为文本显示方式,而在Windows操作系统环境下,其显操作系统环境下,其显示方式是图形显示方式,其绝大多数操作界面是以图形界面示方式是图形显示方式,其绝大多数操作界面是以图形界面的窗口形式出现的。的窗口形式出现的。1)、文本显示方式、文本显示方式在常用的文本显示模式在常用的文本显示模式(模式模式3)下,

15、每屏最多可显示下,每屏最多可显示2000(8025)个字符。个字符。规定:屏幕的左上角坐标为规定:屏幕的左上角坐标为(0, 0),右下角坐标为,右下角坐标为(24, 79)。在显示字符时,用一个字节存储该字符的在显示字符时,用一个字节存储该字符的ASCII码,用另一码,用另一个字节存储的显示属性,即:显示颜色。个字节存储的显示属性,即:显示颜色。彩色显示器的字符显示属性定义如图彩色显示器的字符显示属性定义如图 (P325) 存储内容与显示位置的对应关系下如图存储内容与显示位置的对应关系下如图:2)、图形显示方式、图形显示方式图形显示的最小单位是象素,对每个象素可用不同的图形显示的最小单位是象素

16、,对每个象素可用不同的颜色来显示。所以,在显示缓冲区内记录的信息是屏幕颜色来显示。所以,在显示缓冲区内记录的信息是屏幕各象素的显示颜色。各象素的显示颜色。由于各种图形显示模式所能显示的颜色和象素是不同由于各种图形显示模式所能显示的颜色和象素是不同的,它决定了显示缓冲区的存储方式也是不同的。下面的,它决定了显示缓冲区的存储方式也是不同的。下面给出一个具体的图形显示模式及其存储方式。给出一个具体的图形显示模式及其存储方式。256色色320200图形显示模式图形显示模式表达表达256种不同颜色需要种不同颜色需要8位位二进制,即一个字节。在该二进制,即一个字节。在该模式下,其显示缓冲区的存模式下,其显

17、示缓冲区的存储方式是非常简单的,即:储方式是非常简单的,即:第一个字节存储第一个象素第一个字节存储第一个象素的颜色,第二个字节存储第的颜色,第二个字节存储第二个象素的颜色,以此类推,二个象素的颜色,以此类推,所以,存储满屏象素所需要所以,存储满屏象素所需要的字节数为:的字节数为:320200164000。其显示缓冲区的。其显示缓冲区的存储方式如图存储方式如图8.10所示。所示。2、显示缓冲区、显示缓冲区显示缓冲区是用来记录屏幕显示信息的。显示缓冲区是用来记录屏幕显示信息的。在文本显示方式下,显示信息包括:每个显示字符的在文本显示方式下,显示信息包括:每个显示字符的ASCII码及其显示属性。码及

18、其显示属性。在图形显示方式下,显示缓冲区内存储每个象素的显示颜色。在图形显示方式下,显示缓冲区内存储每个象素的显示颜色。 文本显示方式下,单色显示器的显示缓冲区段地址为文本显示方式下,单色显示器的显示缓冲区段地址为0B000H; 文本显示方式下,彩色显示器显示缓冲区段地址为文本显示方式下,彩色显示器显示缓冲区段地址为0B800H; 图形显示方式下,其显示缓冲区段地址为图形显示方式下,其显示缓冲区段地址为0A000H。 9.2.1 BIOS的的10H号中断服务程序号中断服务程序 9.2.1.1 对光标的控制对光标的控制 1改变光标的大小改变光标的大小 CX0E0FH, 光标是在字符下部的一条小短

19、线;光标是在字符下部的一条小短线; CX080FH, 光标是下半格的小方块;光标是下半格的小方块; CX0102H, 光标是在字符上部的一条小短线;光标是在字符上部的一条小短线; CX0FFFFH,消隐光标,即不显示闪烁的光标。,消隐光标,即不显示闪烁的光标。2改变光标的位置改变光标的位置 其入口参数是:其入口参数是: AH2,子功能号;,子功能号; BH显示页的页号;显示页的页号; DH光标移动到哪一行,屏幕顶端为第光标移动到哪一行,屏幕顶端为第0行;行; DL光标移动到哪一列,屏幕左端为第光标移动到哪一列,屏幕左端为第0列。列。 3读光标位置读光标位置 入口参数:入口参数: AH3,子功能

20、号;,子功能号; BH显示页的页号。显示页的页号。 出口参数:出口参数: DH/DL该显示页的光标所在行该显示页的光标所在行/列坐标;列坐标; CH/CL该显示页的光标起始线该显示页的光标起始线/结束线。结束线。 9.2.1.2 清屏与卷屏清屏与卷屏 AH6/7,子功能号,子功能号,6为上卷屏,为上卷屏,7为下卷屏;为下卷屏; AL卷动行数,若卷动行数,若AL为为0则为清屏;则为清屏; BH卷动后留出的空白部分的属性;卷动后留出的空白部分的属性; CH/CL左上角的行左上角的行/列坐标;列坐标; DH/DL右下角的行右下角的行/列坐标。列坐标。 下面的程序段可以把屏幕设置成中间是绿色,四周是蓝

21、色的下面的程序段可以把屏幕设置成中间是绿色,四周是蓝色的无字画面。无字画面。 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】清屏,并为整个屏幕画一个蓝底白字的外框。】

22、清屏,并为整个屏幕画一个蓝底白字的外框。 【解】【解】 disp MACRO x,y ;定义一个重复使用的程序段为一个宏定义一个重复使用的程序段为一个宏 MOV AL,x MOV DX,y CALL onechar ENDM code SEGMENT ASSUME CS:codeclrscr PROC NEAR ;以蓝底白字属性清屏子程序以蓝底白字属性清屏子程序 MOV AX,600H MOV BH,1FH XOR CX,CX MOV DX,184FH INT 10H RETclrscr ENDP;入口:入口:AL待显示字符,待显示字符,DX显示的位置显示的位置Onechar PROC NEA

23、R 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中的字符,只显示一个中的字符,只显示一个 RETonechar ENDPstart: CALL clrscr ;清屏清屏 disp 218,0 ;显示外框的左上角显示外框的左上角 disp 191,4FH ;显示外框的右上角显示外框的右上角 disp 192,1800H ;显示外框的左下角显示外框的左下角 disp 217,184FH ;显示外框的右下

24、角显示外框的右下角 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位作为行

25、位作为行/列坐标,显列坐标,显 示一个小竖线示一个小竖线 ADD SI,100H ;表示行数的高表示行数的高8位加位加1 CMP SI,1800H JB s1 ;没到最底一行转没到最底一行转 MOV SI,14FH ;取第取第1行第行第79列的位置列的位置s2: disp 179,SI ;以以SI高高/低低8位作为行位作为行/列坐标,显示列坐标,显示 一个小竖线一个小竖线 ADD SI,100H CMP SI,1800H JB s2 MOV AH,0 INT 16H ;保持屏幕上的状态,等待按键保持屏幕上的状态,等待按键 MOV AH,4CH INT 21H code ENDS END sta

26、rt【例【例9.3】设计一个输入并验证口令的程序,口令可以预置】设计一个输入并验证口令的程序,口令可以预置在程序中。在程序中。 【解】【解】 data SEGMENT buf DB 201,21 DUP(205),187, $ DB 186, PASSWORD : ,186, $ DB 200,21 DUP(205),188, $ ;定义画方框定义画方框 的字符串的字符串pass DB 12345678inpass DB 8 DUP(0)passlen DW 0msg1 DB PASSED !$ msg2 DB FAILED !$ data ENDS code SEGMENT ASSUME C

27、S:code,DS:dataclrscr PROC NEAR ;以蓝底白字清屏以蓝底白字清屏 MOV AX,600H MOV BH,1FH XOR CX,CX MOV DX,184FH INT 10H RETclrscr ENDPdisp PROC NEAR ;显示输入口令的画面显示输入口令的画面 MOV CX,3 LEA BX,buf d1: MOV AL,3 SUB AL,CL ADD DH,AL MOV AH,2 INT 10H ;移动光标到第移动光标到第AL+12行、第行、第28列列 MOV DX,BX MOV AH,9 INT 21H ;显示方框的一行显示方框的一行 ADD BX,2

28、4 ;使使BX指向下方框符号串指向下方框符号串buf的下一行的下一行 LOOP d1 ;3次循环,在屏幕中心显示加框的次循环,在屏幕中心显示加框的 PASSWORD字样字样 RETMOV DX,0B1CHdisp ENDPpwd PROC NEAR ;输入口令子程序输入口令子程序 XOR BX,BXp0: MOV DX,0C29H ADD DX,BX MOV AH,2 INT 10H ;移动光标到正确位置移动光标到正确位置 MOV AH,0 INT 16H ;等待按键等待按键 CMP AL,8 JNZ p1 ;不是退格键转不是退格键转 AND BX,BX JZ p0 ;已到最左边,不能退格转已

29、到最左边,不能退格转 DEC BX MOV AH,2 MOV DL,8 INT 21H MOV DL, INT 21H ;退一格,清除前一格上的星号退一格,清除前一格上的星号 JMP p0p1: CMP AL,0DH JZ p3 ;是回车键转是回车键转 MOV inpass+BX,AL ;把按键作为一个口令字符送把按键作为一个口令字符送 入入inpass变量中变量中 MOV AH,2 MOV DL, * INT 21H ;显示一个星号,光标后移显示一个星号,光标后移 INC BX CMP BX,8 JB p0 ;不足不足8个符号转个符号转p3: MOV passlen,BX ;记载口令长度记载

30、口令长度 RETpwd ENDP;出口:出口:CF0,口令正确;,口令正确;CF1,口令错误,口令错误check PROC NEAR ;验证口令子程序验证口令子程序 MOV CX,passlen ;取输入口令长度取输入口令长度 CMP CX,8 JB c1 ;小于小于8转转 LEA SI,pass PUSH DS POP ES LEA DI,inpass CLD REP CMPSB STC ;置口令错标记,作为出口参数置口令错标记,作为出口参数 JNZ c1 ;口令错误转口令错误转 CLC ;置口令正确标记置口令正确标记c1: RETcheck ENDP start: MOV AX,data

31、MOV DS,AX CALL clrscr CALL disp CALL pwd CALL clrscr CALL check JC s1 LEA DX,msg1 JMP s2s1: LEA DX,msg2s2: MOV AH,9 INT 21H ;显示验证口令的结果显示验证口令的结果 MOV AH,4CH INT 21Hcode ENDS END start 【例【例9.4】设计一个菜单控制程序,在屏幕的第】设计一个菜单控制程序,在屏幕的第1行显示有若行显示有若干功能项的菜单条,用左右箭头控制亮条的移动。当亮条移干功能项的菜单条,用左右箭头控制亮条的移动。当亮条移到某一选项后,可以按回车键表

32、示选中该项功能。把最后一到某一选项后,可以按回车键表示选中该项功能。把最后一个选项定为个选项定为“退出退出”,选中该项后程序结束。,选中该项后程序结束。 【解】【解】 itemnum = 5 ;菜单由菜单由5项组成项组成 itemlen = 8 ;每个功能项字符串长度为每个功能项字符串长度为8 data SEGMENT buf DB Menu Item Number selected : $ data ENDSstack SEGMENT STACK DW 4096 DUP(?)stack ENDS code SEGMENT ASSUME CS:code ;=; 改变变量改变变量menubar中

33、的菜单项颜色中的菜单项颜色;=;入口入口: AL = 菜单项号码,菜单项号码,0到到itemnum-1之间之间; DL = 新的颜色属性值新的颜色属性值;= ASSUME DS:codemenuattr PROC NEAR PUSH BX PUSH CX MOV BL,(itemlen+2)*2 MUL BL MOV BX,AX INC BX ;计算需要改变颜色的字符位置计算需要改变颜色的字符位置 MOV CX,itemlen+2attr1: MOV menubar+BX,DL ;设置成新的颜色设置成新的颜色 INC BX INC BX LOOP attr1 AND DL,40H OR DL,

34、3CH ;设置热键的颜色设置热键的颜色 MOV menubar+BX-itemnum*2-6,DL POP CX POP BX RETmenuattr ENDP;=; 菜单控制子程序菜单控制子程序;=; 出口参数出口参数 : AL选中的菜单项号码选中的菜单项号码 ;= MENU PROC NEARPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIPUSH DSPUSH ES CLD MOV AX,code MOV DS,AX MOV AX,0B800H ;彩色显示器的显示缓冲区段地址彩色显示器的显示缓冲区段地址 MOV ES,AX XOR DI,DI MOV AX,7020

35、H MOV CX,80 REP STOSW ;清屏幕第清屏幕第0行行 MOV AL,itemc MOV DL,70H ;白底黑字属性白底黑字属性 CALL menuattr MOV CS:itemc,0menu0: MOV AL,itemc MOV DL,3FH ;湖蓝底色,白字湖蓝底色,白字 CALL menuattr ;置当前菜单项为置当前菜单项为itemc记载值记载值menu1: XOR DI,DI LEA SI,menubar MOV CX,itemnum*(itemlen+2) REP MOVSW ;直写屏方式显示直写屏方式显示 XOR AX,AX INT 16H ;等待按键等待按键

36、 CMP AX,4B00H ;左箭头左箭头 JNZ menu2 MOV AL,itemc MOV DL,70H ;白底黑字白底黑字 CALL menuattr DEC itemc ;记载当前菜单项的变量值减记载当前菜单项的变量值减1,左,左移一项移一项 CMP itemc,0 JGE menu1a ADD itemc,itemnum ;小于小于0则移到最右一项上则移到最右一项上menu1a: MOV AL,itemc MOV DL,3FH ;湖蓝底色,白字湖蓝底色,白字 CALL menuattr JMP menu0menu2: CMP AX,4D00H ;右箭头右箭头 JNZ menu3 M

37、OV AL,itemc MOV DL,70H CALL menuattr INC itemc ;记载当前菜单项的变量值加记载当前菜单项的变量值加1, 右移一项右移一项 CMP itemc,itemnum JB menu1b MOV itemc,0 ;从最右一项再右移,则移到最从最右一项再右移,则移到最 左一项左一项menu1b: MOV AL,itemc MOV DL,3FH CALL menuattr JMP menu0menu3: CMP AL,0DH ;回车键回车键 JZ menu4 MOV AH,2 MOV DL,7 INT 21H ;按键错,发声警告按键错,发声警告 JMP menu

38、0 menu4: MOV AL,itemcPOPESPOPDSPOPDIPOPSIPOPDXPOPCXPOPBX RET menubar DB ,70H, (,70H, 1,7CH, ) ,70H, I,70H DB t,70H, e,70H, m,70H, 1,70H, ,70H DB ,70H, (,70H, 2,7CH, ) ,70H, I,70HDB t,70H, e,70H, m,70H, 2,70H, ,70H DB ,70H, (,70H, 3,7CH, ) ,70H, I,70HDB t,70H, e,70H, m,70H, 3,70H, ,70H DB ,70H, (,70H

39、, 4,7CH, ) ,70H, I,70HDB t,70H, e,70H, m,70H, 4,70H, ,70H DB ,70H, (,70H, 5,7CH, ) ,70H, I,70HDB t,70H, e,70H, m,70H, 5,70H, ,70H itemc DB itemnum-1 MENU ENDP ASSUME DS:data main: MOV AX,DATA MOV DS,AX MOV AH,1 MOV CX,-1 INT 10H ;消隐光标消隐光标 MOV AX,600H MOV BH,17HXOR CX,CX MOV DX,184FH INT 10H ;清屏清屏nex

40、t: CALL MENU CMP AL,itemnum-1 JE finish ;选中最右一项则结束选中最右一项则结束 ADD AL,31H MOV buf+30,AL MOV AH,2 MOV DX,1212H XOR BH,BH INT 10H ;移动光标到第移动光标到第18行行18列列 LEA DX,buf MOV AH,9 INT 21H ;显示刚才选中的是第几项显示刚才选中的是第几项 JMP nextfinish: MOV AX,600H MOV BH,7 XOR CX,CX MOV DX,184FH INT 10H ;清屏清屏 MOV AH,1 MOV CX,0F0FH INT 1

41、0H ;显示光标显示光标 MOV AX,4C00H INT 21Hcode ENDS END main9.3 打印机打印机I/O打印输出是一种硬拷贝输出,也是一种常用的输出形式。打印输出是一种硬拷贝输出,也是一种常用的输出形式。1、打印控制命令、打印控制命令字符值字符值功能描述功能描述09H水平制表符,跳到下一个制表位置水平制表符,跳到下一个制表位置0AH换行换行0CH换页换页0DH回车回车2、DOS功能中的打印输出功能中的打印输出(P337)在在DOS操作系统中,操作系统中,INT 21H提供了一种打印输出的功能提供了一种打印输出的功能调用。其具体描述如下:调用。其具体描述如下:05H向连接

42、在向连接在LPT1端口上的打印机输出一个字符端口上的打印机输出一个字符 40H向先前打开的文件写入指定数量的字节,可以把向先前打开的文件写入指定数量的字节,可以把打印机看作为标准的输出文件打印机看作为标准的输出文件3、BIOS中的打印输出中的打印输出(P337)BIOS系统提供了中断系统提供了中断17H来实现打印输出功能。其具体的功来实现打印输出功能。其具体的功能如下:能如下:00H向指定的打印机输出一个字符向指定的打印机输出一个字符 01H初始化指定的打印机初始化指定的打印机 02H读取指定打印机的状态读取指定打印机的状态例例1 在每页的开始处打印在每页的开始处打印“Assember Lan

43、guage”字符串,并空一行才打印字符串,并空一行才打印其它内容。其它内容。.MODEL SMALL.DATA Title1DB0CH, Assember Language, 0DH, 0AH, 0AH CountEQU$ - Title1.CODE .STARTUP MOV AH, 1 MOV DX, 0 INT 17H ;初始化连接在初始化连接在LPT1上的打印机上的打印机 MOV CX, Count ;待打印的字符个数待打印的字符个数 XOR BX, BXagain: MOV AH, 5H MOV DL, Title1BX INT 21H ;调用调用DOS功能打印字符功能打印字符 INC

44、 BX LOOP again ;可在此打印其它任意字符可在此打印其它任意字符 .EXIT0 END例例2 当打印机不能正常打印当打印机不能正常打印(非硬件故障非硬件故障)时,提示使用者其原时,提示使用者其原因,以便解决打印问题。因,以便解决打印问题。.MODEL SMALL.DATA MSG1DBTime Out$” MSG2DBI/O Error$” MSG3DBOut of Paper$” TOut EQU01H IOErrEQU08H Opaper EQU20H (P287).CODE .STARTUP MOV AH, 1 MOV DX, 0 INT 17H ;初始化连接在初始化连接在LPT1上的打印机上的打印机 MOVAH, 2MOVDX, 0INT17H;读取读取LPT1打印机的状态字节打印机的状态字节TESTAL, TOut or IOErr or OPaperJNZErrMsgErrMsg:TESTAL, TOutJZ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论