收藏 分销(赏)

第15章屏幕处理高级特性.ppt

上传人:xrp****65 文档编号:13782367 上传时间:2026-04-13 格式:PPT 页数:68 大小:342KB 下载积分:10 金币
下载 相关
第15章屏幕处理高级特性.ppt_第1页
第1页 / 共68页
第15章屏幕处理高级特性.ppt_第2页
第2页 / 共68页


点击查看更多>>
资源描述
,第二级,第三级,第四级,第五级,第15章 屏幕处理高级特性,第15章 屏幕处理高级特性,15.1 属性编码,15.2,BIOS,中断10,H,15.3,闪烁、反白和卷动,15.4 其他,DOS,输入输出处理,15.5,BIOS INT 16H,的键盘处理,15.6 扩充功能键,15.1 属 性 编 码,单色显示器有4,K,字节的存储器,即显示缓冲区,只能显示黑白字母、数字和方块图形。显示模式为文本模式时,显示屏幕为80列、25行,即8025个字符。4,K,字节存放每个屏幕字符和字符的属性编码,属性编码将确定显示反白、闪烁、高亮度等。,彩色/图形显示卡,有文本模式和图形模式两种工作模式。在文本模式下显示屏幕有两种格式:8025和4025,显示卡上有16,K,字节的存储器,即显示缓冲区。在屏幕显示8025时,显示缓冲区分成了4个屏幕页(03);显示4025时,显示缓冲区分成了8个屏幕页(07)。系统预置的显示页号数是0,但你也可以使用显示缓冲区的其他页。,单色和彩色的属性编码在文本模式的情况下,将决定每一个被显示字符的特性。对应屏幕上的每个字符位置有两个存储器字节:一个是被显示字符的,ASCII,码,另一个就是显示字符的属性字节。属性字节中的编码不同,决定了被显示字符的特性不同。在单色文本模式下,属性字节确定字符是否闪烁、高亮度、反白显示等。所以,属性的不同编码会使字符以不同的效果在屏幕上显示,单色显示的属性编码如图15-1所示。,图15-1 单色属性字节,RGB,字母分别占一个位,各代表彩色显示器的红、绿、蓝三色。位7(,BL),设定闪烁,位3(,I),设定高亮度。前景指显示的字符,一般是白色;背景是黑色。表15-1列出了前景、背景编码的组合模式。,表15-1 背景、前景编码组合模式,功,能,背,景,前,景,R G B,R G B,不显示,(,黑底黑字,),0 0 0,0 0 0,加底线,(,不适用于彩色,),0 0 0,0 0 1,正常显示,(,黑底白字,),0 0 0,1 1 1,反白显示,(,白底黑字,),1 1 1,0 0 0,彩色显示器并不提供加底线的功能。但是,这一位被用来当作选用蓝色前景,因此显示变为蓝字黑底。表15-2给出了一些典型的单色文本显示模式下的属性编码和对应的显示效果。,表15-2 典型单色属性编码值及显示效果,二进制编码,显示效果,BL,R,G,B,I,R,G,B,0,0,0,0,0,0,0,0,不显示,0,0,0,0,0,0,0,1,黑底白字,下划线,0,0,0,0,0,1,1,1,黑底白字,正常显示,0,0,0,0,1,1,1,1,黑底白字,高亮度,0,1,1,1,0,0,0,0,白底黑字,反白显示,1,0,0,0,0,1,1,1,黑底白字,闪烁,1,1,1,1,0,0,0,0,白底黑字,反白闪烁,这些属性都适用于文字的单色及彩色显示,下一章将介绍如何选定某一特定颜色。当程序设定某一属性之后,它就一直保持这个属性,直到另一个属性改变它为止。例如,将属性设为00,H,,此字节将完全不显示。,15.2,BIOS,中断10,H,BIOS,是,IBM PC,机上提供的一系列基本输入/输出系统功能模块;每一种功能模块完成某种特定的输入/输出功能,它可以使程序编制人员不必了解硬件,I/O,接口的特性,依靠直接调用某个功能模块,就可以完成相应的,I/O,设备的控制和管理。调用前只需在指定寄存器中设置入口参数,使用中断调用指令,INT n,,便能得到希望的结果或返回参数。,其中,BIOS,的,INT 10H,完成的是对屏幕的操作。本节将对中断,INT 10H,的部分功能进行介绍,使用,INT 10H,之前,先将其功能号预置在,AH,中。,(1),AH=00:,设置显示模式。,AL,中预置显示模式字,无返回参数。,AL,的设定如下:,00 4025 黑白模式,01 4025 彩色文本模式 16色,02 8025 黑白模式,03 8025 彩色文本模式 16色,04 320200 彩色图形模式 4色,05 320200 单色图形模式 黑白,06 640200 单色图形模式 黑白,07 8025 单色文本模式 黑白,0,D 320200,彩色图形,EGA 16,色,0,E 640200,彩色图形,EGA 16,色,(,EGA,为增强型图形界面显示卡。),例如,设置显示模式为320200彩色图形模式:,MOV AH,00 ;,设置显示模式,MOV AL,04 ;320200,彩色图形模式,INT 10H ;,调用,BIOS 10 H,中断,(2),AH=01:,文本模式下设置光标大小。,ASCII,码字符集中没有光标。计算机用硬件控制光标,并有一些特殊的,INT,处理为它服务。可以使用,INT 10H,来调整光标的高度。寄存器,CH(,位40)确定光标的上限位置(开始扫描线),寄存器,CL(,位40)确定光标的下限位置(结束扫描线)。你可以在上限和下限之间来调整光标的大小,0/13适用于单色及增强型图形显示器,0/7适用于大部分的彩色显示器。,入口参数:,AH=01,CH=,光标开始扫描线,,CL=,光标结束扫描线,无返回参数。,例如,将光标设置为极限(最大):,MOV AH,01;,要求设置光标大小,MOV CH,00;,光标开始扫描线,MOV CL,13;,光标结束扫描线,INT 10H ;,调用,BIOS 10H,中断,这时光标就像一个闪烁的方块。只要在范围内,你就可以任意地调整光标大小,例如,04/08,03/10等等。光标将一直保持这种状态,直到下一次改变它为止。,CH/CL=12/13(,单色)或,CH/CL=6/7(,彩色)可将光标还原成正常状态。图形模式下如需要,可自行模拟光标。,(3),AH=02:,设置光标位置。,这个操作可以将光标设置在屏幕的任何位置。它是依行、列的坐标而定的。一般显示缓冲区使用0页,但在80行模式下,页数可以是03中的任意一页。,入口参数:,AH=02,BH=,页号,,DH=,行号,,DL=,列号,无返回参数。,例如,将光标移动到第0页的第3行、第 8列:,MOV AH,02 ;,设置光标位置,MOV BH,00 ;,第0页,MOV DH,03 ;,第3行,MOV DL,08 ;,第8列,INT 10H,;,调用,BIOS 10H,中断,该程序段将使光标移动到指定位置。,(4),AH=03:,读当前光标位置。,利用这个功能可以找到当前光标所处的位置,以及光标的大小。,入口参数:,AH=03,BH=,页号。,返回参数:,DH=,行号,,DL=,列号,,CH=,光标开始扫描线,,CL=,光标结束扫描线。,例如,读取第0页光标当前位置:,MOV AH,03 ;,要求读当前光标位置,MOV BH,00 ;,第0页,INT 10H,;,调用,BIOS 10H,中断,该程序段执行完后,在,DX,中得到光标的位置,,DH,为行号,,DL,为列号,在,CX,中得到光标的大小,,CH,为扫描开始线,,CL,为结束扫描线。,(5),AH=04:,读光笔位置。,(6),AH=05:,选择显示页。,入口参数:,AH=05,AL=,页号,无返回参数。,例如:,MOV AH,05;,选择显示页,MOV AL,02;,要显示的页号(07),INT 10H ;,调用,BIOS 10H,中断,在40列的模式中,可以选择编号为07的显示缓冲区显示页;在80列的模式中,可以选择编号为03的显示页。,(7),AH=06:,窗口上卷。,当一个程序的显示内容向下已超过屏幕的底部,下一行应绕到顶部再开始,解决的方法是将屏幕向上滚动。,入口参数:,AH=06,AL=,上卷行数,窗口底部为空白输入行。若,AL=0,表示窗口为空白。,CH、CL=,卷动的左上角行、列号;,DH、DL=,卷动的右上角行、列号;,BH=,空白输入行的属性(正常、反白、闪烁还是设定色彩)。无返回参数。,例如:,MOV AX,0603H,;,向上卷3行,MOV BH,07 ;,正常属性,MOV CX,0410H,;,从左上角第4行、第10,H,列,MOV DX,1130H,;,至右上角第11,H,行、第30,H,列,INT 10H ;,调用,BIOS 10H,中断,该程序段执行完后,第4行、第10,H,列到第11,H,行、第30,H,列的窗口上卷3行。,(8),AH=07:,窗口下卷。,入口参数:,AH=07,,其他的和06号功能相同。此时窗口顶部为输入行。无返回参数。,(9),AH=08:,读当前光标位置的字符和属性。,此操作可在文字或图形模式下读取显示区的字符和属性。,入口参数:,AH=08,BH=,页号。,返回参数:,AL=,读出的字符,,AH=,读出的字符属性。,例如,读取第0页当前光标位置的字符和属性:,MOV AH,8 ;,要求读取字符和属性,MOV BH,0 ;,第0页,INT 10H ;,调用,BIOS 10H,中断,此操作将返回的字符存在,AL,中,而属性放在,AH,中。在图形模式下,,AL,中返回的不是光标处字符的,ASCII,码,而直接反映字符点阵,所以要确定是什么字符,必须将该点阵与字符点阵发生器内的各字符逐一比较,如无字符,AL=0。,(10),AH=09:,在当前光标位置写出字符(包括属性和,ASCII,码)。,入口参数:,AH=09,BH=,页号,,AL=,要显示的字符的,ASCII,码,,BL=,字符属性(文本或图形模式下,其功能包括闪烁、反白等),,CX=,要显示字符数的重复次数。无返回参数。,例如:,MOV AH,09 ;,要求显示,MOV AL,,要显示的字符,MOV BH,,页号,MOV BL,,属性或色彩,MOV CX,,要写的字符次数,INT 10H ;,调用,BIOS 10H,AL,中存放的是一个要显示的字符,可以重复出现多次。,CX,中的值决定,AL,中字符重复出现的次数,显示不同的字符需要重复执行,但并不会使光标前移。图形模式下,利用,BL,来定义前景颜色。如下例所示,在品红背景下,显示五个浅绿色闪烁的星号(彩色文本模式下)。,MOV AH,09 ;,要求显示,MOV AL,*;,显示*,MOV BH,0 ;0,页,MOV BL,0DAH ;,彩色显示属性,MOV CX,05 ;,重复5次,INT 10H ;,调用,BIOS 10H,(11),AH=0AH:,在当前光标位置写字符(属性不改变)。,模式0,A,与09的不同之处是模式0,A,不能设定属性。,入口参数:,AH=0AH,,其余同09号功能。,MOV AH,0AH ;,要求显示,MOV AL,char ;,所要显示的字符,MOV BH,page#;,页数,MOV CX,repetition ;,重复5次,INT 10H,;,调用,BIOS 10H,(12),AH=0EH:,写字符并移动光标位置。,此操作会自动地使光标前进一格,并转到下一行,将屏幕向上卷动。,设定,AH,为0,EH,,要显示的字符放在,AL,中,,BL,中存放前景颜色(图形模式),要显示的页号存放在,BH,中(文字模式)。铃声(07,H)、,退位(08,H)、,换行(0,AH),和回车(0,DH),,会影响此模式的正常执行。,入口参数:,AH=0EH,DX=,要写的字符,,BH=,页号,,BL=,前景颜色(图形模式下),无返回参数。,(13),AH=0FH:,读当前显示状态。,入口参数:,AH=0FH。,返回参数:,AL=,当前显示模式,,AH=,屏幕显示列数,,BH=,当前页号。,(14),AH=13H:,写字符串。,本功能有4 个子功能,在各个子功能里均需,ES:BP,指向一个字符串,,CX,中存放字符串的长度,,BH,中存放字符串的显示页号,,DH,和,DL,中分别存放起始位置行、列。例如:,MOV AH,13H,MOV AL,,子功能号;子功能号:03,MOV BH,,页号,LEA BP,,地址 ;在,ES:BP,位置的字符,MOV CX,,字符串长度,MOV DX,,屏幕起始位置,INT 10H,0子功能:显示字符串,统一属性在,BL,中,光标不移动位置。,1子功能:显示字符串,统一属性在,BL,中,光标移动到显示字符串末尾。,2子功能:显示字符串(包含属性字节),光标不移动位置。,3子功能:显示字符串(包含属性字节),光标移动到显示字符串末尾。,15.3 闪烁、反白和卷动,例15.1所示程序的功能是从键盘接受名字,并将它显示在屏幕上。但是,本程序以反白的模式显示提示语句,依照正常的模式接受输入名字,并且在同一行40列的位置,以反白和闪烁的模式把名字显示在屏幕上。显示格式如下:,Name?Francis Bacon Francis Bacon,0,列 40列,为了控制光标的位置,程序中定义了变量,ROW,来控制列的增加,而变量,COL,是为了在显示提示语句和名字的时候可以水平地移动光标,因为,INT 10H,不会自动使光标向前移动。本程序使屏幕由上向下显示到20行为止;以后,每个增加的提示语句都将使屏幕上卷一行。,在输入方面,子程序,D10INPT,使用,DOS,的,INT 21H,实现。,例15.1 一个闪烁、反白和卷动的综合实例程序。,源程序清单如下:,TITLE NMSCROLL(EXE)REVERSE VIDEO,BLINKING,SCROLLING,;-,STACKSG SEGMENT PARA STACK STACK,DW 32 DUP(?),STACKSG ENDS,;-,DATASG SEGMENT PARA DATA,NAMEPAR LABEL BYTE ;,名字参数表,MAXNLENDB 20 ;,名字最大长度,ACTNLEN DB?;,实际输入字符长度,NAMEFLD DB 20 DUP();,名字,COL DB 00,COUNT DB?,PROMPT DB NAME?,ROW DB 00,DATASG ENDS,;-,CODESG SEGMENT PARA CODE,BEGIN PROC FAR,ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG,PUSH DS,SUB,AX,AX,PUSH AX,MOV AX,DATASG,MOV DS,AX,MOV ES,AX,MOV AX,0600H,CALL Q10CLR ;,清屏,A20LOOP:,MOV COL,0 ;,设置,COL,为0,CALL Q20CURS ;,设置光标位置,CALL B10PRMP ;,显示提示符,CALL D10INPT ;,输入名字,CMP ACTNLEN,0 ;,是否有名字,JNE,A30 ;,有,转,A30,MOV AX,0600H,CALL Q10CLR ;,没有,清屏,RET,A30:,CALL E10NAME ;,显示名字,JMP A20LOOP,BEGIN ENDP,;-,DISPLAY PROMPT:,显示提示-,B10PRMP PROC NEAR,LEA SI,PROMPT ;,取提示符地址,MOV COUNT,05,B20:,MOV BL,70H ;,反白,CALL F10DISP ;,调用显示,INC SI ;,取名字中下一字符,INC COL ;,取下一屏,COL,CALL,Q20CURS,DEC COUNT ;,名字长度减1,JNZ B20 ;,循环,N,次,RET,B10PRMP ENDP,;-ACCEPT INPUT OF NAME:,输入名字-,D10INPT PROC NEAR,MOV AH,0AH,LEA DX,NAMEPAR,INT 21H,RET,D10INPT ENDP,;-DISPLAY NAME WITH BLINKING REVERSE VIDEO:,显示名字-,E10NAME PROC NEAR,LEA SI,NAMEFLD;,取名字首字符地址,MOV COL,40 ;,设置屏幕,COL,E20:,CALL Q20CURS ;,设置光标,MOV BL,0F0H ;,闪烁、反白,CALL F10DISP ;,调用显示,INC SI ;,取名字中下一字符地址,INC COL ;,取下一屏,COL,DEC ACTNLEN ;,名字长度减1,JNZ E20 ;,循环,N,次,CMP ROW,20 ;,是否是屏幕底部?,JAE E30 ;,不是,INC ROW,RET,E30:MOV AX,0601H ;,是,CALL Q10CLR ;,清屏,RET,E10NAME ENDP,;-,DISPLAY CHARACTER:,显示字符-,F10DISP PROC NEAR ;,入口参数在,BL,中,MOV AH,09 ;,显示,MOV AL,SI ;,取名字中字符,MOV BH,00 ;,页号,MOV CX,01 ;,字符数是1,INT 10H,RET,F10DISP ENDP,;-,CLEAR SCREEN:,清屏-,Q10CLR PROC NEAR ;,入口参数在,AX,中,MOV,BH,07,MOV CX,0000,MOV DX,184FH,INT,10H,RET,Q10CLR ENDP,;-,SET CURSOR ROW/COL:,设置光标位置-,Q20CURS PROC NEAR,MOV AH,02,MOV BH,00,MOV DH,ROW,MOV DL,COL,INT 10H,RET,Q20CURS ENDP,CODESG ENDS,END BEGIN,15.4 其他,DOS,输入输出处理,DOS,操作系统为用户提供了许多可以直接调用的子程序,称为系统功能调用。使用系统功能调用的一般过程为,把功能号放入,AH,寄存器,设置入口参数。然后,执行中断,INT 21H。,系统功能调用的类型为20,H3FH,,由于在现有的,PC,机上,28,H3FH,类型号尚未使用,所以只使用了20,H27H,类型号,其中大部分由,DOS,调用,只有少量的允许用户调用。,其中21,H,号功能调用是面向用户的,具有对键盘、显示器、磁盘、打印机和异步通讯进行操作的多种功能,共有80多个子程序功能供用户使用,21,H,使用各子程序功能的调用模式是一样的,调用的格式是:,入口参数相关的寄存器,程序功能号,AH,INT 21H,例如,显示字符串 09号功能调用,在第8章中就已介绍并使用。下面介绍几种较为常见的功能调用。,(1),AH=00:,停止程序运行,无返回参数。,(2),AH=01:,有返回参数的键盘输入。,此功能会返回两种情况其中的一种参数:若,AL,的值不为0,表示输入的为字符的,ASCII,码,例如,字母或数字。反之,若,AL,的值为0,则表示输入的是一个特殊的功能键,例如,,Home、F1,或,PgUp,等。,无入口参数;返回参数:输入字符的,ASCII,码,AL。,功能:等待用户从键盘上输入一个字符键,并对字符键进行检查,如果为,Ctrl+Break,,则退出命令行;否则,将字符的,ASCII,码送给,AL,,并将该字符显示在屏幕上。例如,执行程序段:,MOV AH,01,INT 21H,若在键盘上输入字符,S,,则在,AL,中得到字符,S,的,ASCII,码53(十六进制),并将字符,S,显示在屏幕上。,(3),AH=02:,在屏幕上显示一个字符。,入口参数:被显示字符的,ASCII,码,DL。,无返回参数。,功能:将,DL,中的字符显示在屏幕上。,例如,在屏幕上显示*。,MOV AH,02,MOV DL,*;,或,MOV DL,2AH(2AH,为*的,ASCII,码),INT 21H,(4),AH=05:,打印机输出。,入口参数:要输出字符的,ASCII,码,DL。,功能:打印出要输出的字符。,(5),AH=07:,无返回参数的直接键盘输入。,该功能基本上同,AH=01,的功能,不同的是输入的字符不会在屏幕上显示;对于,Ctrl+Break,请求,不响应。,(6),AH=08:,无返回参数键盘输入。,该功能基本上同,AH=01,的功能,但输入的字符不会在屏幕上显示,响应,Ctrl+Break。,例如,将从键盘上输入的一个字符打印机输出。,MOVAH,08,INT,21H,MOV DL,AL,MOV AH,05,INT 21H,(7),AH=0BH:,检查键盘输入状态。,此功能返回的值将存放在,AL,中,若,AL,的值为,FF(,十六进制),表示输入的字符是有效的,否则,AL,的值为0。此功能常与功能01、07及08连用。,15.5,BIOS INT 16H,的键盘处理,BIOS INT 16H,是对键盘进行的,BIOS,软中断调用。它有以下7个主要功能,功能号在,AH,中,作为入口参数。,(1),AH=00:,读取一个字节。,该功能会将一个由键盘输入的,ASCII,码读入,AL,中,即取出缓冲区队列首字符的,ASCII,码送,AL,,扫描码送,AH。,缓冲区后续字符前移,若缓冲区中无内容,将等待。若被输入的字符是特殊键,例如,Home、F1,等,,AL,的值会被设为00。本功能不会自动返回字符到屏幕上。,(2),AH=01:,决定是否能够读入字节。,本功能将0标志位清0(,ZF=0),为入口参数,用来表示能够读入字节;出口的,AX,内容同上,但不同的是,只对缓冲区的队首读出而不是取出,既不改变缓冲区内容,也不等待,并设置,ZF=0,作为已获得字符(已按过键)的标志。如队列为空,则,ZF=1。,(3),AH=02:,读取特殊功能键状态。,该功能将返回参数存放在,AL,中,,AL,中各二进制位状态含义如下:,位7(,Ins)=1,表示正处于插入状态,位6(,Caps)=1,表示处于字母大写状态,位5(,Num)=1,表示处于数值键状态,位4(,Scroll)=1,表示设定为,Scroll Lock,状态,位3(,Alt)=1,表示,Alt+Shift,被按下,位2(,Ctrl)=1,表示,Ctrl+Shift,被按下,位1(,ShiftL,)=1,表示“左移”被按下,位0(,ShiftR,)=1,表示“右移”被按下,(4),AH=05:,键盘写。,本功能允许对键盘缓冲区的队尾直接写入。,入口参数:,CL=ASCII,码,,CH=,扫描码。,(5),AH=10H:,读扩展键盘(101/102键)。,(6),AH=11H:,取扩展键状态。,(7),AH=12H:,取扩展移位键状态。,15.6 扩 充 功 能 键,整个键盘可分为三种基本的类型:,(1)字符键,例如字母,AZ,,数字09,%、$、#等等。,(2)扩充功能键,例如,Home,End,,退格(,Backspace),,回车(,Enter),Del,Ins,,PgUp,,,PgDn,等。,(3)控制键,例如,Alt,Ctrl,及,Shift,等。它们只能和其他键连用。,扩充功能键实质是在请求一个操作,强迫这些键去完成某一特定的工作。,作为一个程序设计员,你可以任意设定它们的任务,例如当,Home,键按下时,将光标移至屏幕的左上角位置,或者当,End,按下时,将光标移至屏幕上文字的结束位置。你可以很方便地用程序设计它们,来完成一个新的控制。,键盘上的每一个键都有一个特定的扫描码,编号为1(,Esc)101(Del)。,依照这些扫描码,程序可以确定任意一个被按下键的来源。例如,请求键盘输入一个字符,就要做如下操作,将,AH,寄存器设为0,并调用,BIOS INT 16H,,即,MOV AH,00 ;,请求从键盘输入,INT 16H ;,调用,BIOS,此调用的返回参数有两种,根据你所键入的是字符键或扩充键来决定。对于一个字符,例如字母“,A”,,键盘传送返回给计算机会有两种信息:,(1)在,AL,中存放“,A”,的,ASCII,码(41,十六进制)。,(2)字母“,A”,的扫描码(1,E,,十六进制)存放在,AH,中。,若所键入的是扩充功能键,例如,Ins,,键盘也会传送两种信息:,(1),AL,寄存器设为0。,(2),Ins,的扫描码(52,十六进制)存放在,AH,中。,因此,当执行完,INT 16H,指令后,你可以测试,AL,的值。如果是0,该请求是扩充功能键码;如果不是0,该请求操作是传送一个字节。,下面的程序是针对扩充功能键而设计的:,MOV AH,00 ;,要求输入,INT 16H ;,调用,BIOS,CMP AL,00 ;,判断是扩充功能键吗?,JZ EXIT ;,是,跳到,EXIT,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服