欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

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

    • 资源ID:3342569       资源大小:342.07KB        全文页数:79页
    • 资源格式: PPT        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    第8章 屏幕处理和键盘输入基本特性,8.1 中断指令INT 8.2 基本屏幕处理 8.3 键盘输入 8.4 屏幕显示和键盘操作(扩充DOS),8.1 中断指令INT,中断指令INT的功能是中断程序的执行,转移到DOS或BIOS处理某一项指定工作后,再回到程序继续执行。中断常用来执行输入或输出操作。为了可靠地返回中断处的程序,所有的中断必须留下踪迹。为了实现这些要求,中断指令INT执行下列的步骤:,中断指令INT的功能是中断程序的执行,转移到DOS或BIOS处理某一项指定工作后,再回到程序继续执行。中断常用来执行输入或输出操作。为了可靠地返回中断处的程序,所有的中断必须留下踪迹。为了实现这些要求,中断指令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通常被称为某项操作的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 ;第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。下面是一个清除整个屏幕的例子:,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 显示字符 通常程序会显示一些信息,以提示程序已经完成或发生错误,或者提示使用者输入信息,或说明下一步的操作。 较早期的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能够找到所要显示的信息。LEA只是装入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 100 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 ; 设置光标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之间的字符是一些特殊的格式控制符,用来作为退位和其他的一些控制,它们将会使光标移动。 建议:键入例8.1中的程序,然后编译、链接,生成一个可执行的文件,如ASCII.EXE,然后执行该文件。,结果:屏幕上显示的第一行,由一个空白开始(00H),然后是两个“笑脸”(01H、02H),再接着是红心,方块和梅花(03H、04H和05H),07H会使喇叭响一声,06H会显示黑桃,但是会被08H到0DH的控制字符所清除,0DH会使光标跳到下一行的开头,0EH是音乐符号,7FH以上的字符都是图形符号。 可以修改例8.1的程序,以便跳过这些控制字符。下面的一段指令可以跳过介于08H 到0DH的所有字符。,CMP 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能够处理。 首先,用于输入的中断必须知道输入信息的最大长度,其目的是在使用者输入太长的信息时发出警告,并且不再接受输入字符。其次,输入操作会计算出真正的输入字符的长度,共占用多少个字节,并将其值放入输入参数表中。,8.3.1 键盘输入字符 下面的例子是首先为输入定义一个参数表。LABEL是一条伪指令,类型为字节类型(BYTE),指示参数表的开始。参数表的第1个字节是限制输入字符的最大长度,因为只占一个字节,所以输入的最大长度为FFH或255。第2个字节是留给DOS存储真正的输入字符长度的。从第3个字节开始,是存放输入字符的地方。,NAMEPAR LABEL BYTE ;参数表的开始 MAXLEN DB 20 ;输入字符的最大长度 ACTLEN DB ? ;真实的输入字符长度 NAMEFLD DB 20 DUP( ) ;键盘输入字符的存储处,此参数表的LABEL是一条伪指令,不占存储空间。利用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)的名字,则输入参数表的内容将成为:,此中断操作同时也传送回输入名字的长度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_ ENDS,;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 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 A20LOOPA30: 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后放字符$ 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 RETQ10CLR 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得到列的位置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)。在子程序E10CODE中的最后一条指令,紧跟着07加入一个“$”,使得子程序E10CENT在显示名字的同时发出嘟的一声。,3) 只输入Enter(回车符) 假如,用户所键入的名字超过参数表中给出的最大长度(本例大于19)时,系统会发出报警的喇叭声,并且只能接受Enter(回车符)。但是,如果只输入一个Enter键,系统会接受,并且在参数表中的输入长度栏中放入一个0,如下所示: 参数表NAMEPAR(十六进制):,在要求输入名字的提示下,用户可以简单地只按下Enter键,来表示输入内容的结束,即当输入名字的长度为0时,本程序确定输入内容已结束。 4) 替换或清除Enter(回车符) 为了实现不同的用途,可以用空格符(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) 清除输入区域 输入区域的内容将被输入的字符所取代,而其他区域仍保留原来的字符,直到另有其他输入字符取代它们为止。假设下面的例子是连续输入的: (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清为空格。如: 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 INC 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 输入设备,键盘为标准输入 1 输出设备,显示器为标准输出 2 错误输出设备,总是显示器 3 辅助设备,一般为通讯设备 4 标准打印机,DOS中断是INT 21H,要求功能调用的功能号码被放至AH中;3FH的功能是输入,40H的功能是输出。设定CX的值为所要输入或显示的字节个数(长度),并且把输入或输出区域的偏移地址送入DX中。 当处理的动作成功时,会把进位标志CF清为0,并且将真正输入或显示的字符个数放在AX中。当处理动作不成功时,进位标志CF将被设置为1,并且会把错误代码(本例为6)放入AX。因为AX的内容可能为长度值,也可能为错误代码,所以能判断错误情况的唯一方法是去测试进位标志CF,虽然键盘和屏幕上出现错误的情况是罕见的。,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之中。因为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,这个位置是要显示字符串“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( ) ;输入区域 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)和不用你输入的换行Line Feed(0AH)。因为这种特色,输入区域的最大数目和长度将另外附加2个字节。假如你所输入的个数比最大长度短时,在存储器中输入字符的存储位置将和上面的例子相同。,当处理动作成功时,将把CF标志清为0(通过测试可得知),并且把输入字节的个数放入AX中。在先前的例子中,长度为14,加上Enter和Line Feed两个字节,也可以说长度为16。如前所述,程序可以确定字符的真正长度。 因为对设备管理的错误,也有可能出现不成功的处理情形。当这种情况发生时,会将CF标志设为1,并把错误代码(本例为6)放入AX中。因为AX可为输入字符的长度,也可以为错误代码,所以唯一能确定是否发生错误情况的方法是测试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。,第一次 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,当提示符“-”出现时,键入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命令,去追踪前面四条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格式 十进制 十六进制 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 或 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,

    注意事项

    本文(屏幕处理和键盘输入基本特性.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开