屏幕处理和键盘输入基本特性.ppt

上传人:本田雅阁 文档编号:2587761 上传时间:2019-04-13 格式:PPT 页数:79 大小:342.01KB
返回 下载 相关 举报
屏幕处理和键盘输入基本特性.ppt_第1页
第1页 / 共79页
屏幕处理和键盘输入基本特性.ppt_第2页
第2页 / 共79页
屏幕处理和键盘输入基本特性.ppt_第3页
第3页 / 共79页
亲,该文档总共79页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《屏幕处理和键盘输入基本特性.ppt》由会员分享,可在线阅读,更多相关《屏幕处理和键盘输入基本特性.ppt(79页珍藏版)》请在三一文库上搜索。

1、第8章 屏幕处理和键盘输入基本特性,8.1 中断指令INT 8.2 基本屏幕处理 8.3 键盘输入 8.4 屏幕显示和键盘操作(扩充DOS),8.1 中断指令INT,中断指令INT的功能是中断程序的执行,转移到DOS或BIOS处理某一项指定工作后,再回到程序继续执行。中断常用来执行输入或输出操作。为了可靠地返回中断处的程序,所有的中断必须留下踪迹。为了实现这些要求,中断指令INT执行下列的步骤:,中断指令INT的功能是中断程序的执行,转移到DOS或BIOS处理某一项指定工作后,再回到程序继续执行。中断常用来执行输入或输出操作。为了可靠地返回中断处的程序,所有的中断必须留下踪迹。为了实现这些要求

2、,中断指令INT执行下列的步骤:,(1) 将堆栈指针SP减2,再将标志寄存器PSW内容压入堆栈中。 (2) TF和IF标志位清0。 (3) 将堆栈指针SP减2,再将CS寄存器内容压入堆栈中。 (4) 将堆栈指针SP减2,再将指令指针寄存器IP的内容压入堆栈中。 (5) 执行中断所要求的操作。 (6) 从中断中弹出各个寄存器的内容,再返回到INT指令的下一条指令继续执行。,这些过程是自动完成的,程序员所要做的仅是定义一个足够大的堆栈段,以确保压入和弹出的操作能顺利完成。 本章介绍两种形式的中断:BIOS的INT 10H,它负责屏幕处理;DOS的INT 21H负责输出显示和接受输入。INT 21H

3、通常被称为某项操作的DOS系统功能调用。依照不同的需求目的,分别使用INT 10H 或INT 21H 完成不同的操作。,8.2 基本屏幕处理,本节介绍较早期DOS对屏幕的处理方法。它们是设定光标的位置、清除屏幕和显示字符。 8.2.1 设定光标位置 屏幕是由一格一格的小方格所组成的,光标可以设定在任意的小方格上。例如,典型的监视器有25行(024)、80列(079)。表8-1是光标位置的例子。,表8-1 光 标 位 置,INT 10H的特色是可以把光标定在屏幕的任何位置以及清除屏幕。下面的例子是把光标放在第5行、12列的位置上。 MOV AH, 02 ;功能号定址要求 MOV BH, 00 ;

4、第0页 MOV DH, 05 ;第5行 MOV DL, 12 ;第12列 INT 10H ;中断转移至BIOS,AH的值02通知BIOS要设定光标,行和列的值必须放到DX寄存器中,页数通常是0,放在BH中。其他寄存器的内容不需要。也可以用MOV指令和十六进制的立即数来设定光标位置。例如: MOV DX ,050CH ;第5行、第12列,8.2.2 清除屏幕 系统的提示命令通常都会留在屏幕上,直到新的信息显示或屏幕向上卷动,提示命令才会消失。当程序开始时,若想要清除屏幕,也可以从屏幕的任何位置开始清除到行和列编号较高的位置。方法是把终止行、列的值送入DX中,07送入BH中,设定AX为0600H。

5、下面是一个清除整个屏幕的例子:,MOV AX,0600H ;AH=06(屏幕上卷),AL=00(整个屏幕) MOV BH,07 ;正常属性(黑白) MOV CX,0000 ;起始位置0行、0列 MOV DX,184FH ;终止位置(24/79) INT 10H,上述操作是把屏幕上卷成空白。假如,屏幕右下角坐标所设定的值大于184FH,会使屏幕的卷动超过一帧画面,造成某些地方被清除两次,虽然这种疏忽在单色屏幕上不会造成什么伤害,但是在彩色监视器上,可能会造成严重的错误。,8.2.3 显示字符 通常程序会显示一些信息,以提示程序已经完成或发生错误,或者提示使用者输入信息,或说明下一步的操作。 较早

6、期的DOS将要显示在屏幕上的信息定义在数据段中;设定AH为09(DOS功能调用号),并且使用DOS功能调用INT 21H。要显示的内容以符号“$”作为结束标志,如下所示:,NAMPRMP DB Customer name?,$ MOV AH,09 LEA DX,NAMPRMP INT 21H 符号“$”也可以直接写在提示语句内,如Customer name?$,或写在下一行。但不能用上述的操作将字符“$”显示在屏幕上。如果在提示信息后省略了符号“$”,上述指令会继续显示字符,直到遇到一个“$”字符为止。,LEA指令将NAMPRMP的地址装入DX 寄存器中,使得DOS能够找到所要显示的信息。LE

7、A只是装入NAMPRMP在数据段的偏移地址,DOS利用DS寄存器的值乘以10H加上DX(DS:DX)的值,确定出存储器的物理地址即实际地址。,8.2.4 显示ASCII码字符集 例8.1 显示00HFFH的ASCII字符集。 256个ASCII码字符,大部分都能以一个符号显示在屏幕上,因为00H和FFH没有符号表示,所以显示空白,但是在ASCII码中,真正的空白是20H。 程序清单如下: ; filename:L81.ASM ; 数据段,DATA SEGMENT CTR DB 00H, $ DATA ENDS ; 堆栈段 STACK_ SEGMENT PARA STACK STACK DW 1

8、00 DUP(?) STACK_ ENDS ; 代码段 CODE SEGMENT PARA CODE,; 主程序 MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK_ START: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX CALL BIOCLR CALL CIOSET,CALL DIODISP RET MAIN ENDP ; 清除屏幕 BIOCLR PROC MOV AX,0600H MOV BH,07 MOV CX,0000 MOV DX,184FH INT 10H RET,BIOCLR ENDP

9、 ; 设置光标0行、0列 CIOSET PROC MOV AH,02 MOV BH,00 MOV DX,0C28H INT 10H RET CIOSET ENDP,; 显示ASCII码字符集 DIODISP PROC MOV CX,256 LEA DX,CTR D20: CMP CTR,08H JB D30 CMP CTR,0DH JBE D40 D30: MOV AH,09 INT 21H,D40: INC CTR LOOP D20 RET DIODISP ENDP ; CODE ENDS END START,说明:例8.1会出现如下问题,符号“$”并不显示在屏幕上;介于08H到0DH之间的

10、字符是一些特殊的格式控制符,用来作为退位和其他的一些控制,它们将会使光标移动。 建议:键入例8.1中的程序,然后编译、链接,生成一个可执行的文件,如ASCII.EXE,然后执行该文件。,结果:屏幕上显示的第一行,由一个空白开始(00H),然后是两个“笑脸”(01H、02H),再接着是红心,方块和梅花(03H、04H和05H),07H会使喇叭响一声,06H会显示黑桃,但是会被08H到0DH的控制字符所清除,0DH会使光标跳到下一行的开头,0EH是音乐符号,7FH以上的字符都是图形符号。 可以修改例8.1的程序,以便跳过这些控制字符。下面的一段指令可以跳过介于08H 到0DH的所有字符。,CMP

11、CTR,08H ;低于08H? JB D30 ;不高于/等于,则跳到显示 CMP CTR,0DH ;不高于0DH? JBE D40 ;不高于,则跳过显示 D30: MOV AH,09 ;显示低于08H高于0DH的ASCII码字符 INT 21H D40: INC CTR,8.3 键 盘 输 入,实现从键盘接受输入的程序和显示输出的做法相似。对于早期DOS的输入方法,需设置输入区以指明输入信息的参数,使得中断指令INT能够处理。 首先,用于输入的中断必须知道输入信息的最大长度,其目的是在使用者输入太长的信息时发出警告,并且不再接受输入字符。其次,输入操作会计算出真正的输入字符的长度,共占用多少个

12、字节,并将其值放入输入参数表中。,8.3.1 键盘输入字符 下面的例子是首先为输入定义一个参数表。LABEL是一条伪指令,类型为字节类型(BYTE),指示参数表的开始。参数表的第1个字节是限制输入字符的最大长度,因为只占一个字节,所以输入的最大长度为FFH或255。第2个字节是留给DOS存储真正的输入字符长度的。从第3个字节开始,是存放输入字符的地方。,NAMEPAR LABEL BYTE ;参数表的开始 MAXLEN DB 20 ;输入字符的最大长度 ACTLEN DB ? ;真实的输入字符长度 NAMEFLD DB 20 DUP( ) ;键盘输入字符的存储处,此参数表的LABEL是一条伪指

13、令,不占存储空间。利用AH为10(0AH)的DOS功能调用(INT 21H),可以实现接受键盘输入字符。方法是把参数表(本例中为NAMEPAR)的地址送入DX寄存器中,然后发出INT 21H 调用。 MOV AH,0AH ;请求输入功能号为0AH LEA DX,NAMEPAR ;参数表首地址填入DX INT 21H ;DOS中断,INT 21H指令会等待使用者输入字符,并且检查输入字符个数是否超过参数表中的最大长度(本例中是20)。当使用者按下回车键(0DH)即表示结束输入,结束符(0DH)也会跟着进入到输入字符栏(本例为NAMEFLD)。假如,输入一个叫BROWN(回车Enter)的名字,则

14、输入参数表的内容将成为:,此中断操作同时也传送回输入名字的长度05,存入参数表的第2个字节,在本例中为ACTLEN。回车键字符存放在NAMEFLD+5的位置。因为0DH是不能输出符号的,在此以Enter表示,虽然最大的输入长度为20,但必须包含0DH,所以真正输入的名字只能有19个字符。,8.3.2 键盘输入并显示名字 例8.2 要求用户输入名字,并将它显示在屏幕中央,同时发出嘟的一声响声。通过例8.2对8.3.1节中的内容进行使用。 程序清单如下: ; filename:L82.ASM;STACK_ SEGMENT PARA STACK STACK DW 32 DUP(?)STACK_ EN

15、DS,;DATA SEGMENT PARA DATANAMEPAR LABEL BYTE ;参数表开始MAXNLEN DB 20 ;输入名字的最大长度NAMELEN DB ? ;真正输入名字的长度NAMEFLD DB 20 DUP( ), $ ;输入名字的存放处PROMPT DB NAME?, $ ;提示句,DATA ENDS;CODESG SEGMENT PARA CODEMAIN PROC FAR ASSUME CS:CODESG,DS:DATA,SS:STACK_,ES:DATABEGIN: PUSH DS SUB AX,AX PUSH AX,MOV AX,DATA MOV DS,AX

16、MOV ES,AX CALL Q10CLR ;清屏 A20LOOP: MOV DX,0000 ;设定光标0行0列 CALL Q20CURS ;屏幕设置 CALL B10PRMP ;显示提示语句 MOV CX,20 MOV SI,0000,B30: MOV NAMEFLDSI,20H ;字符存放单元装入20H(空白) INC SI LOOP B30 CALL D10INPUT ;输入名字 CALL Q10CLR ;清屏 CMP NAMELEN,00 JE A30 ;输入字符长度为0,结束 CALL E10CODE ;插入铃声与字符$ CALL F10CENT ;显示输入的名字,JMP A20LO

17、OPA30: RETMAIN ENDP ; 显示提示B10PRMP PROC NEAR MOV AH,09LEA DX,PROMPT INT 21 HRET,B10PRMP ENDP ; 接受输入名字 D10INPUT PROC NEARMOV AH,0AH ;接受输入 LEA DX,NAMEPAR INT 21H RET D10INPUT ENDP,; 插入铃声与$字符E10CODE PROC NEAR MOV BH,00 MOV BL,NAMELEN ;BX中存放输入字符的长度MOV NAMEFLDBX,07 ;回车符(0DH)由07替换 MOV NAMEFLDBX+1, $ ;07后放字

18、符$ RETE10CODE ENDP,; 显示输入的名字F10CENT PROC NEAR MOV DL,NAMELEN ;输入字符的长度送入 DLSHR DL,1 ;右移1位(除以2) NEG DL ;正号变更为负号 ADD DL,40 ;光标列定位值MOV DH,12 ;光标行定位值 CALL Q20CURS ;设置光标位置,MOV AH,09LEA DX,NAMEFLD ;显示名字 INT 21H RET F10CENT ENDP ; 清屏 Q10CLR PROC NEAR MOV AX,0600H MOV BH,07,MOV CX,0000 MOV DX,184FH INT 10H R

19、ETQ10CLR ENDP ; 设置页号与光标位置Q20CURS PROC NEAR,MOV AH,02 MOV BH,00 INT 10H RET Q20CURS ENDP CODESG ENDS END BEGIN,程序说明如下: 1) 屏幕中央 重复执行上述步骤,用户通过键盘输入名字,直到输入一个回车(Enter)为止。假设输入的名字是AI HUALIN。 (1) 将长度09除以2等于4。 (2) 从40减此值等于36。,在子程序F10CENT中,SHR指令将长度09向右移1位,形成除以2的效果,使00001001变成00000100。NEG指令变更正负号,把+4变成-4。ADD加上40

20、得到列的位置36,并将它存入DL寄存器中。光标被设定在第12行、36列的位置,此时显示在屏幕上的名字如下: (12行)AI HUALIN (列) 36 40,2) 响声 子程序E10CODE中的一条指令,是在输入名字栏插入喇叭鸣叫的字符(07),字符07紧跟在输入的名字之后: MOV NAMEFLDBX,07 该条指令前的两条指令用于设定BX寄存器装入输入字符的长度。本条MOV指令的作用是把BX中的长度值与NAMEFLD的偏移地址相结合,并把07送到这个结合后的偏移地址单元中,如一个长度为5个字符的输入,这条指令将把07送入NAMEFLD+05偏移地址的单元中(取代回车符0DH)。在子程序E1

21、0CODE中的最后一条指令,紧跟着07加入一个“$”,使得子程序E10CENT在显示名字的同时发出嘟的一声。,3) 只输入Enter(回车符) 假如,用户所键入的名字超过参数表中给出的最大长度(本例大于19)时,系统会发出报警的喇叭声,并且只能接受Enter(回车符)。但是,如果只输入一个Enter键,系统会接受,并且在参数表中的输入长度栏中放入一个0,如下所示: 参数表NAMEPAR(十六进制):,在要求输入名字的提示下,用户可以简单地只按下Enter键,来表示输入内容的结束,即当输入名字的长度为0时,本程序确定输入内容已结束。 4) 替换或清除Enter(回车符) 为了实现不同的用途,可以

22、用空格符(20H)取代 NAMEFLD中某些处的回车符(0DH)。 NAMELEN这个栏包含了输入的真正长度,并且可以用来提供任何字符的相对偏移地址。例如,假设NAMELEN的值为5,则0DH的偏移地址是NAMEFLD+5。可以把这个长度装入BX寄存器中,并且利用BX当作NAMEFLD的索引地址。如:,MOV BH,00 MOV BL,NAMELEN ;BX为0005 MOV NAMEFLDBX,20H ;清除回车键替换为空格 第3条MOV指令传送一个空格(20H)给NAMEFLD+5单元。,5) 清除输入区域 输入区域的内容将被输入的字符所取代,而其他区域仍保留原来的字符,直到另有其他输入字

23、符取代它们为止。假设下面的例子是连续输入的: (1) BROWN 14 05 42 52 4F 57 4E 0D 20 20 - 20 (2) HAMILTON 14 08 48 41 4D 49 4C 54 4F 4E 0D 20 (3) ADAMS 14 05 41 44 41 4D 53 0D 4F 4E 0D 20,HAMILTON 取代了比较短的名字BROWN。但是,因为ADAMS名字比HAMILTON名字短,所以它只能取代至HAMIL,并且T字符被回车符(0DH)所取代。残留的字符ON,仍紧跟在ADAMS之后。良好的编程习惯是,在送出要求输入的提示语句之前,先把NAMEFLD清为空

24、格。如: MOV CX,20 ;重复20次 MOV SI,0000,B30: MOV NAMEFLDSI,20H ;给名字处存入空格字符 INC SI ;加1 LOOP B30 ;循环20次,若不用SI寄存器,也可以使用DI或BX寄存器。更有效的方法是一次传送一个字的空格字符,只需循环10次。但是,因为NAMEFLD被定义为DB(BYTE)的类型,所以必须用WORD和PTR(Pointer)运算符来更改它的类型。如: MOV CX,10 ;重复10次 LEA SI,NAMEFLD ;设SI为起始地址,B30: MOV WORD PTRSI,2020H ;给名字处写入2个空格 INC SI IN

25、C SI ;加2 LOOP B30 ;循环10次,传送空格的字到SI间接寻址的单元,本例中用LEA指令来设定起始地址值,并对于B30:的MOV指令使用了另外一些处理方法,这是由于不能将此指令写成如下的格式: MOV WORD PTRNAMEFLD,2020H ; 不合理的指令格式 这样,借清除输入区域的方法,可解决输入名字是否比上一次输入短的困扰。,8.4 屏幕显示和键盘操作(扩充DOS),本节将要讨论DOS 2.0以上版本的屏幕显示和键盘操作方法。DOS以文件管理的方式管理设备,在要求I/O设备动作时,只需要把I/O设备的代号送入BX寄存器中即可。下列是标准设备号:,0 输入设备,键盘为标准

26、输入 1 输出设备,显示器为标准输出 2 错误输出设备,总是显示器 3 辅助设备,一般为通讯设备 4 标准打印机,DOS中断是INT 21H,要求功能调用的功能号码被放至AH中;3FH的功能是输入,40H的功能是输出。设定CX的值为所要输入或显示的字节个数(长度),并且把输入或输出区域的偏移地址送入DX中。 当处理的动作成功时,会把进位标志CF清为0,并且将真正输入或显示的字符个数放在AX中。当处理动作不成功时,进位标志CF将被设置为1,并且会把错误代码(本例为6)放入AX。因为AX的内容可能为长度值,也可能为错误代码,所以能判断错误情况的唯一方法是去测试进位标志CF,虽然键盘和屏幕上出现错误

27、的情况是罕见的。,8.4.1 在屏幕上显示 下列指令说明如何使用DOS扩充的功能,要求显示在屏幕上。 DISAREA DB 20 DUP( ) ;显示区域 MOV AH,40H ;要求显示 MOV BX,01 ;输出的设备管理 MOV CX,20 ;最大20个字节 LEA DX,DISAREA ;显示区域 INT 21H ;调用DOS,LEA把DISAREA的偏移地址装入DX中,使得DOS能找到所要显示的内容。操作成功时会把进位标志清为0,并且设定AX的值为所显示字节的个数。不成功的操作也可能发生,其原因在于进行了不正当的管理。此操作将CF标志设为1,并把错误代码(本例为6)放入AX之中。因为

28、AX可以为显示字符的长度值,也可以为错误代码,所以唯一能判断错误情况的方法是测试CF标志。,练习在屏幕上显示 让我们利用DEBUG去检查中断的内部效果。装入DEBUG,当它的提示符“-”出现时,键入A 100,以便在指令代码段偏移地址100处开始输入汇编语言指令。要注意的是,DEBUG假设所有被输入的数都是十六进制。 100 MOV AH,40 102 MOV BX,01,105 MOV CX,09 (输出的长度) 108 MOV DX,10E 10B INT 21 10D RET 10E DB YOUR NAME 上面的程序段设定AH的值为40H,是要求显示功能号,并且设定DX为10EH,这

29、个位置是要显示字符串“YOUR NAME”的地址,在整个程序的最后面,类型被定义成字节。,当键入完上述的指令,再按一次回车键,就会退出A命令。利用U命令(U 100,10D)反汇编此程序,再反复地利用R和T命令去追踪执行。当执行到INT 21H指令时,也就是到达10BH位置时,它的执行会跳往BIOS;利用G命令(G 10D)直接执行到下一条指令。执行完G命令后,YOUR NAME 将被显示在屏幕上,最后利用Q命令,退出DEBUG而将控制权交还给DOS。,8.4.2 从键盘接受输入 下面的例子说明,如何利用DOS扩充功能所提供的方法,实现从键盘接受输入。 INAREA DB 20 DUP( )

30、;输入区域 MOV AH,3FH ;要求输入功能号 MOV BX,00 ;对键盘的设备管理 MOV CX,20 ;最大20个字节 LEA DX,INAREA ;输入区域 INT 21H ;调用DOS,LEA指令将INAREA的偏移地址送入DX。INT 21H中断会使系统停下来等待使用者输入字符,但是并不检查输入字节是否已经超过CX寄存器内容的值(本例为20),键入回车键(0DH)即表示输入的结束。例如,输入的字符串为“PC Vsers Group”,使得INAREA 的内容如下所示: PC Vsers Group,0D,0A 输入的字符串后紧跟着你所输入的Enter(0DH)和不用你输入的换行

31、Line Feed(0AH)。因为这种特色,输入区域的最大数目和长度将另外附加2个字节。假如你所输入的个数比最大长度短时,在存储器中输入字符的存储位置将和上面的例子相同。,当处理动作成功时,将把CF标志清为0(通过测试可得知),并且把输入字节的个数放入AX中。在先前的例子中,长度为14,加上Enter和Line Feed两个字节,也可以说长度为16。如前所述,程序可以确定字符的真正长度。 因为对设备管理的错误,也有可能出现不成功的处理情形。当这种情况发生时,会将CF标志设为1,并把错误代码(本例为6)放入AX中。因为AX可为输入字符的长度,也可以为错误代码,所以唯一能确定是否发生错误情况的方法

32、是测试CF标志的值。,假如,所输入的名字超过CX寄存器的值时,这个处理动作将会接受所有字符。假设CX的内容为08,而使用者输入的字符串为“PC EXCHANGE”,上述的动作会将前面8个字符“PC EXCHA”放入输入区域,在字符“A”后并没有附加Enter和Line Feed两个字符,并且AX的值为08。当遇到下一个INT中断时,它所接受的名字并不是由键盘输入的,而是缓冲器(BUFFER)内的字符串,这是因为此时缓冲器(BUFFER)内仍残留着上一次输入的字符串。输入区域的内容将变成“NGE”加上Enter和Line Feed,AX被设置为5。上述的两个动作都是正常的,并且将CF标志清为0。

33、,第一次 INT 21H:PC EXCHA AX=08 第二次 INT 21H:NGE 0D 0A AX=05 当一个程序告知使用者,他所输入的字符个数是正确的,它必须符合下列两个条件:AX的值小于CX的值;AX的值等于CX的值,并且输入区域最后的两个字符为0D和0A。 早期的DOS对于键盘输入调用功能0AH,因为具有内在的检查能力,所以能提供一个功能更强的操作方法,至少在输入文字方面,它是一个较佳的选择。,练习输入资料 在此提供一个练习,使你能在DEBUG之下观察输入资料所造成的影响。这个程序允许你输入12个字符,包括Enter和Line Feed。装入DEBUG,当提示符“-”出现时,键入

34、A 100,表示在指令代码段位置100处开始输入汇编语言指令。DEBUG状态下的数字,都被认为是十六进制。,100 MOV AH,3F 102 MOV BX,00 105 MOV CX,0C 108 MOV DX,10F 10B INT 21 10D JMP 100 10F DB ,上述程序段设定AH和BX的值,要求作键盘输入操作,CX的值是输入的最大长度,DX被设定为10FH程序最后一条指令DB的位置;输入的字符将被存储在10FH开始的地址位置处。,当你用A命令键入完上述指令,再按一次Enter键,就会退出A命令。用U命令(U100,10D)去反汇编这段程序。利用R命令、重复使用T命令,去追

35、踪前面四条MOV指令所执行的结果。当执行位置到达10BH时,利用G 10DH跳过中断指令(不必追踪BIOS的执行过程)。DEBUG会等待着,让你输入字符,并以Enter告知输入结束。检查AX寄存器的内容和进位标志变化的情况,并利用D 10F显示输入字符存放在存储器中的情况。你可以多次地重复这些动作。最后利用Q命令退出DEBUG。,8.4.3 利用Enter、Line Feed和TAB在屏幕上显示 利用Enter、Line Feed和TAB字符,可让显示在屏幕上的字符串更有可读性,它们分别为回车、换行和跳格。你可使用ASCII格式、十进制或十六进制来表示这些字符, 例如: ASCII格式 十进制

36、 十六进制 CR(Enter) 13 0D LF(Line Feed) 10 0A TAB 09 09,在低版本DOS或扩充版本DOS之下,当需要显示在屏幕上或接受输入时,都可以利用这些字符,使得光标自动地跳到下一行的起始位置。例如: MOV AH,40H ;要求显示功能 MOV BX,01 ;屏幕处理 MOV CX,31 ;最大输出长度 LEA DX,MESSAG1 ;显示的资料位置 INT 21H ;调用DOS,为增强上述程序的可读性,可以利用EQU伪指令来定义处理字符,进行修饰。例如: CR EQU 13 或 EQU 0DH LF EQU 10 或 EQU 0AH TAB EQU 09

37、或 EQU 09H MESSAGE DB TAB,PC Users Group Annual Report,CR,LF,例8.3 在屏幕上显示字符“PC Users Group Annual Report”。 程序清单如下: ;filename:L83.ASM ; DATA SEGMENT MESSAGE DB TAB,PC Users Group Annual Report,CR,LF DATA ENDS ; STACK_ SEGMENT PARA STACK STACK,DB 100 DUP(?) STACK_ ENDS ; CODE SEGMENT CR EQU 13 LF EQU 10 TAB EQU 09 ASSUME CS:CODE,DS:DATA,SS:STACK_,BEG:MOV AX,STACK_ MOV SS,AX MOV SP,100 MOV AX,DATA MOV DS,AX MOV AH,40H MOV BX,01 MOV CX,31,LEA DX,MESSAGE INT 21H MOV AH,4CH INT 21H CODE ENDS END BEG,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1