资源预览内容
第1页 / 共68页
第2页 / 共68页
第3页 / 共68页
第4页 / 共68页
第5页 / 共68页
第6页 / 共68页
第7页 / 共68页
第8页 / 共68页
第9页 / 共68页
第10页 / 共68页
亲,该文档总共68页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第七章第七章 DOS与与BIOS中断及程序设计中断及程序设计 本章讲述DOS与BIOS中断功能调用,这些都是系统提供给汇编语言程序员的现成资源,几乎每个DOS程序都要用到这些资源。本章中要求掌握DOS 功能调用的概念、调用方法及基本的功能调用,熟悉磁盘文件读写的操作过程。 7.1 DOS中断与系统功能调用 7.2 BIOS功能调用7.1 DOS中断与系统功能调用 7.1.1 DOS中断 7.1.2 DOS系统功能调用 7.1.3 磁盘文件管理返回本章首页返回本章首页7.1.1 DOS中断中断 DOS除了给用户提供了命令行服务以外,还为汇编语言程序员提供了大量的子程序,这些子程序包含了从基本输入输出到内存管理、磁盘读写、文件系统等各个方面,使用这些子程序,使得汇编语言程序员不必搞清大量的设备接口、数据结构等细节,即可完成所需功能,从而极大简化了汇编语言的编程。由于DOS提供的这些子程序被看作是DOS系统功能的一部分,因而人们把对这些子程序的调用又称为DOS功能调用。每个汇编语言程序员必须熟悉一些最常用的DOS功能调用,否则很难编写出有实用价值的程序。 DOS提供的这些子程序位于DOS的基本系统文件IBMBIO.COM和IBMDOS.COM中,随着DOS的加载而进入内存,即只要能启动DOS就可以使用。DOS的这些子程序是以中断的方式向系统及应用程序提供服务的,故必须用内中断指令INT进行调用,而不是用传统的CALL指令。 DOS提供的中断服务如表7-1所示:表7-1 DOS中断功能表中断号(十六进制)功 能20系统终止返回21系统功能调用22程序结束处理23CTRLC处理25严重错误处理25绝对磁盘读26绝对磁盘写27程序结束驻留282FDOS保留 在DOS发展过程中,中断号的分配显得有些混乱,最初的时候DOS提供的功能很少,而且也为了与以前流行的操作系统CP/M在中断号方面保持兼容,所以占用了上表所示的中断号。但后来随着DOS的发展,所提供的功能(子程序)越来越多,不可能每一个子程序都占用一个中断号,于是想出了让它们共用一个中断号,即21H号的办法,进入这一个中断后,DOS再根据用户程序中入口参数的设置来确定用户程序到底想调用哪一个子功能。这样,实际上DOS所有的功能都可通过21H中断调用来实现。早期版本中独占一个中断号的旧功能为兼容缘故并没有被撤销,而是保留了下来,这样就形成了有些功能既可以通过调用21H号中断来实现,又可以通过调用别的中断实现,如:终止程序功能,调用20H号中断与调用21H号中断之00H号子功能,效果完全相同。 一般情况下,将调用21H号以外的DOS中断,称为DOS中断调用。而将调用21H号中断的各个子功能,称为DOS功能调用。事实上DOS功能调用也是一个DOS中断调用,并且有时也不太区分二者的差别。返回本章首页返回本章首页返回本节首页返回本节首页进入下一节进入下一节7.1.2 DOS系统功能调用 本节中介绍DOS功能调用的方法及常用的DOS I/O功能调用。DOS最核心的功能调用文件操作功能调用将在下节中介绍。 1. DOS功能调用的方法 调用DOS功能调用需要进行如下三项工作: 调置入口参数,如果所调用的子程序不需参数,则可省略此步。 欲调用的子程序编号AH。 发中断调用指令INT 21H。2. DOS基本I/O功能调用(1) 键盘输入(1号调用)功能:功能:此调用扫描键盘,若有键按下,先检查是否是Ctrl-Break键,若是,则退出命令执行并调用DOS的Ctrl-Break处理程序;若否,则将字符ASCII码设置到AL中,同时在屏幕上显示这个字符,然后返回。若无键按下,该调用等待直到有键按下为止。调用示例:调用示例:MOVAH,1INT21H入口参数:入口参数:无出口参数:出口参数:所读取的字符ASCII码在AL内。(2) 键盘输入(8号调用) 同1号类似,但是不在屏幕上显示输入的字符,在读取密码时常用本功能。调用示例:调用示例: MOV DL,AMOVAH,2INT21H(3) 键盘输入(7号调用) 同8号类似,并且不特殊检查Ctrl-Break键(当作普通字符)。(4) 在屏幕上显示一个字符(2号)入口参数:入口参数:DL=待显示字符的ASCII码出口参数:出口参数:无功能:功能:将字符显示在屏幕上。但如果字符是控制符,则实际执行相应的功能,如:在屏幕上显示一个换行符(0AH),实际上将光标转到下一行上去。(5) 显示或读取字符(6号调用) 此功能调用既可显示字符也可接收字符,这取决于入口参数中DL的设置,若DL=FFH,表示从键盘读取字符;若DLFFH,表示显示字符。具体为:显示字符:入口参数:入口参数:DL=待显示字符的ASCII码(但不能为FFH)出口参数:出口参数:无功能:功能:将字符显示在屏幕上。但如果字符是控制符,则实际执行相应的功能。调用示例:调用示例:MOVDL,$MOVAH,6INT21H读取字符:入口参数:入口参数:DL=FFH出口参数:出口参数:若读到字符,ZF=0,AL=键入字符的ASCII码。若未读到字符,ZF=1。功能:功能:从键盘读取字符,但不等待按键,即不论有无键按下都立即返回,并且也不特殊检查Ctrl-Break键。当要求用户必须立即做出反应时可用此调用读取键盘,如在游戏程序中。调用示例:调用示例:在本示例中,通过一个循环来实现等待读取一个字符。L1: MOVAH,6MOVDL,0FFHINT21HJZL1(6) 打印一个字符(5号)入口参数:入口参数: DL=待打印字符的ASCII码出口参数:出口参数:无功能:功能:在打印机上打印字符,若打印机出现错误,则在屏幕上显示相应错误信息。(7) 字符串显示(9号)入口参数:入口参数: DS:DX指向待显示字符串,且字符串必须以“$”作为结束符出口参数:出口参数:无功能:功能:结束符之前的字符都被显示在屏幕上。调用示例:DATASEGMENTBUFDBTHIS ISA TEST!$DATAENDSCODESEGMENTSTART: MOVAX,DATAMOVDS,AXMOVDX,OFFSET BUFMOVAH,9INT21HMOVAH,4CHINT21HCODEENDSEND START(8) 字符串输入(10号)入口参数:入口参数: DS:DX指向输入缓冲区。输入缓冲区必须由用户在调用前准备好,且具有如下格式: 第一个字节必须放一非0数据,该数值指明准备接收的最大字符数,这个字符数包括用户在结束时必须输入的回车符,如果键入的字符数达到了此数减一,那么系统将不再接收字符(按键时会发出“嘟嘟”声,而且光标不再向右移动),直到用户按回车为止。 第二个字节保留,由DOS在功能调用结束后填入实际输入的字符个数(这个数并不包括最后的回车符)。用户输入的字符串从第三个单元开始存放。出口参数:出口参数:用户实际输入字符个数在缓冲区第二个单元中。调用示例:调用示例:DATA SEGMENTBUFDB8;指明最大字符数DB?;保留,供DOS填入实际字符数DB8 DUP(0);用户输入的字符存放区DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSET BUFMOVAH,10INT21H;其它操作MOVAH,4CHINT21HCODE ENDSENDSTART例7-1:字符串的输入输出 编一程序先提示用户输入一个字符串,然后读取用户的输入,并将用户输入的数据在下行输出。程序如下:DATASEGMENTMESSAGE DB“PLEASEINPUT A STRING:$”;定义输入提示BUF DB 255,?,255 DUP(0);用户输入缓冲区,可接收255个字符DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOVDS,AXMOV DX,OFFSET MESSAGEMOV AH,9INT21H;显示输入提示信息MOVDX,OFFSET BUFMOVAH,10INT21H;接收用户输入MOVAH,2MOVDL,0AH;0AH为换行符ASCII码INT21H;屏幕换行MOVBL,BUF+1;用户实际输入字符数BLMOVBH,0;使BX=用户实际输入字符数MOVBYTE PTRBUF+2BX,$ ;在字符结束处放置一个“$”MOVDX,OFFSET BUF+2 ;用户实际输入字符起始处DXMOVAH,9INT21H ;显示用户输入的字符MOVAH,4CHINT21HCODE ENDSENDSTART返回本节首页返回本节首页返回本章首页返回本章首页进入下一节进入下一节7.1.3磁盘文件管理 磁盘文件的管理是DOS的主要功能之一,为此DOS提供了二组相关的功能调用,一组是DOS1.0版时提出的,使用文件控制块FCB管理文件,这种办法相当麻烦而且功能又弱(如不支持目录结构),因而早已被淘汰;另一组是DOS2.0版时提出的,使用文件句柄来管理文件,我们主要介绍这组功能调用。1. 文件名 要访问一个文件,必须先指定文件名。DOS要求用ASCIIZ串来描述文件名,即一个ASCII码字符串,后面跟一个全0字节为结束符。例如:FILENAME DB “C:DOSWWW.TXT”,0 文件名中可以包含绝对路径或相对路径,但总长度不能多于63个字符。2. 文件属性 很多操作都涉及文件属性,文件属性用一个字节描述,各位含义如下:D7D6D5D4D3D2D1D000归档子目录卷标系统隐含只读常用文件属性值为: 00一普通文件。 01一只读文件,该文件不能为写而打开。 02 一隐含文件,用DIR查不到该文件。 03 一系统文件,用DIR查不到该文件。 04一软盘的卷标号。 10一子目录。 20一已写入并关闭了文件(硬盘用)。 一个文件可以同时具有几种属性,也就是说可以把字节中的几位同时置1,如IBMBIO.COM和IBMDOS.COM文件既是只读文件,又是隐含文件和系统文件。3. 错误返回码 文件操作的功能调用返回时,以标志寄存器的CF位指示调用是否成功,若调用失败,CF=1,AX内为错误返回码,这些错误返回码都取自一个统一的信息表,如表7-2所示。表7-2 文件操作的错误返回码错误返回代码错误返回代码01 02 03040506070809非法功能号文件未找到路径未找到同时打开的文件太多拒绝存取非法文件代号内存控制块被破坏内存不够非法存储块地址101112131415161718非法环境非法格式非法存取代码非法数据(未用)非法指定设备试图删除当前目录设备不一致已没有文件4. 常用的文件管理功能调用(1) DOS的文件管理功能 DOS提供的文件管理功能非常丰富,如表7-3所示。AH功能调用参数返回参数3CH建文件注:若同名的文件已存在,则覆盖DS=ASCIIZ串 的段地址DX=ASCIIZ串 的偏移地址CX=文件属性CF=0操作成功 AX=文件代号CF=l操作出错 AX=错误代码(可为3、4、5)AH功能调用参数返回参数3DH 打开文件DS=ASCIIZ串的段地址DX=ASCIIZ串的偏移地址AL=存取代码0=为读而打开文件l=为写而打开文件2=为读和写打开文件CF=0操作成功AX=文件代号CF=l操作出错AX=错误代码(可为3、4、5、12)3EH 关闭文件说明:文件用完必须关闭,以便将缓冲区中数据写入磁盘,同时释放文件句柄BX=文件代号CF=0操作成功CF=1 出现错误 AX=错 误 代 码(6)AH功能调用参数返回参数3FH 读文件说 明 :将指 定 文件内 容 从磁盘 读 入内存缓冲区DS=数据缓冲区段地址DX=数据缓冲区偏移地址BX=文件代号CX=读取的字节数CF=0读成功AX=实际读入的字节数(此数不一定等于CX中所要求的字节数,如未读到所要求的数据文件已结束等)CF=l读出错AX=错 误 代 码 ( 5、6)40H写文件说 明 :将内 存 缓冲区 中 的数据 写 到磁盘文件中DS=数据缓冲区的段地址DX=数据缓冲区的偏移地址BX=文件代号CX=写入的字节数CF=0操作成功AX=实际写入的字节数(如遇磁盘空间不够,这个数将小于CX中指定的字节数)CF=1出现错误AX=错 误 代 码 ( 5、6)AH功能调用参数返回参数41H 删除文件DS=ASCIIZ串的段地址DX=ASCIIZ串的偏移地址CF=0操作成功CF=1 出现错误 AX=错误代码(2、5)42H移 动文件指针CX=新指针位置的偏移地址(高位)DX=新指针位置的偏移地址(低位)AL=方式码 0=从文件头开始 1=从指针当前位置开始 2=从文件尾部开始BX=文件代号CF=0操作成功 DX:AX=新指针位置CF=l操作失败 AX=错误代码(01、06)AH功能调用参数返回参数43H 检 验或改变 文件属性说 明:读取 或修改文件属性DS=ASCIIZ串的段地址DX=ASCIIZ串的偏移地址AL=0读文件属性AL=1置文件属性,此时须再置: CX=新属性CF=0操作成功 AL=0 CX=属性CF=l操作失败 AX=错误码(1、2、3、5)(2)使用方法 使用文件代码法的基本过程是:在读写文件前,必须先打开或创建文件,成功后,DOS返回一个文件代号(file handle,或称文件句柄),这个文件代号是一个16位二进制数,以后对该文件进行读写操作时,就用这个文件代号去代表相应的文件。当读写完了后,最后必须关闭文件,否则DOS暂存在其内部文件缓冲区的信息没有真正写到磁盘上。 另外,操作时还必须注意文件属性,如果以只读属性打开,则不能向其写;如果以只写属性打开,则不能对其读。同时打开的文件不能太多,因为DOS可能没有足够空间为每个打开的文件准备缓冲区,这个数据取决于config.sys文件中files=nnn一行的设置数。缺省情况下最多可同时打开8个文件。(3) 关于文件指针的说明 利用文件代号存取文件是以字节为存取单位的,一个文件被看作由许多字节组成,尽管每次读写的字节数可任意指定,但一般还是为输入输出缓冲区的大小所限制,所以一个比较大的文件总是要分几次读写。对每个打开的文件,DOS都为其保存了一个读写指针(readwrite pointer),它指示文件的操作位置,每次读写后会自动调整并指向新位置,但有时我们想从文件的中间开始读写而不是从头读写,或者是不作连续读写,这就需要移动这个指针。为此,DOS提供了移动文件指针功能调用(42H号),该功能调用具体情况如下: 入口参数要求在 BX中指定文件代号,由CX和DX指定一个双字长的偏移值,低位字在DX中,高位字在CX中,这个偏移值是一个带符号的整数,它可以是正数,也可以是负数;由AL中的代码确定改变指针的三种方式。每种方式的含义如下:绝对移动方式(AL=0): 偏移值从文件首开始计算。例如偏移值是582,则读写指针指向文件的第582字节。为了使指针指向文件首,可以在CX,DX,AL中都送入0,那么随后的读写就从文件首开始。相对移动方式(AL=1): 当前的指针值加上偏移值作为新的指针值,也就是说,偏移值指出了从当前的读写位置起移动的字节数。根据偏移值的正负可正向或反向移动指针。绝对倒移方式(AL=2): 新的指针位置通过把偏移值和文件尾的位置相加而确定。如果文件的总长度是32字节,那么在AL中送入2,DX中送入-32,CX中送入OFFFFH(符号扩展到高位字),则读写指针指向文件的第一个字节。如果CX和DX为0,AL为2,则指针将指向文件尾,此时指针的值即是文件长度。 移动文件指针功能可能出现的错误码是01和06,错误码01说明AL中的方式值是不合法的,错误码06说明BX中的文件代号不合法。如果指针移动成功,AX和DX将是移动后的指针值,AX中是低位字,DX是高位字(调用之前,DX是偏移值的低位字,CX是偏移值的高位字)。方式1和偏移值0能找出指针的当前值。方式2和偏移值0能找出文件的长度。如果要在一个已存在的文件后面添加记录,则在写之前把指针指向文件尾:关于磁盘文件读写操作的具体实例本章实训三。返回本节首页返回本节首页返回本章首页返回本章首页进入下一节进入下一节7.2 BIOS中断功能调用7.2.1 BIOS中断7.2.2 常用BIOS功能调用举例7.2.3 图形显示程序设计7.2.1 BIOS中断 PC机1M内存空间中最高端(最大地址空间处)是系统ROM区,安装在此区中的ROM内固化了ROM BIOS(基本输入输出系统,Basic Input/Output System)代码,这段代码除完成开机时加电自检、对主要I/O接口初始化、引导装入DOS等功能外,还提供了大量的例程(子程序)供汇编语言程序员调用。通过调用BIOS提供的例程,汇编语言程序员在不必了解复杂的硬件接口细节的情况下,也可以轻松完成对硬件的控制。并且,还可使程序简洁清晰,因为只需几条指令便可完成对BIOS例程的调用,而直接对硬件编程实现相同功能则需要大段代码。 和DOS服务例程一样,ROM BIOS服务例程也是以中断服务程序的形式提供的,ROM BIOS在其初始化期间将所提供服务例程的地址登记在中断矢量表中,而应用程序想对其调用时发 “int n”指令即可。因为以中断方式工作,故对ROM BIOS的调用也称为BIOS中断调用。 常用的ROM BIOS 中断情况如表7-4所示表7-4 常用的BIOS中断中断号功能中断号功能10H显示器15HAT扩充服务11H确认设备调用16H键盘服务12H取内存容量17H打印服务13H磁盘I/O1AH时间/日期14H串行口通讯 对于硬件的访问控制,一般来说有三种方法可以考虑:调用DOS功能调用,调用BIOS功能调用或直接访问硬件。这三种方法中DOS功能调用层次最高,实际上用户对DOS的功能调用,DOS经过处理后再转化为对BIOS的功能调用,最终由BIOS完成对硬件的访问。若需要的操作有相应的DOS功能调用,则尽量通过DOS功能调用实现,因为高层调用需要了解的细节少,往往参数也少,而且兼容性好。即只要能启动DOS,这项服务(功能调用)就保证能用。若通过BIOS调用实现,则不同机器上BIOS代码提供的服务可能不同,所以兼容性要差些。 BIOS调用在层次上低于DOS功能调用而高于直接访问硬件。因它比DOS更接近硬件,故硬件控制功能更强,而且执行速度更快。但是需要了解的硬细节也更多,而且兼容性也比DOS调用差。当需用到DOS功能调用没法实现的功时,或需要追求较高的执行速度时,需要使用BIOS功能调用。例如:DOS显示功能调用非常简单,而用执行速度也慢。而BIOS则提供了相当丰富的显示功能调用,而且速度也快。故在显示控制方面一般都用BIOS功能调用。再如:如果因加密需要要将磁盘按非标准格式格式化,DOS无此功能调用,而BIOS功能调用却允许这样做,因而也必须通它完成。 直接访问硬件层次最低,可以控制实现硬件的全部功能,但是需要了解的硬件细节也最多,而且不同机器间若被访问硬件有差异,可能程序不能通用。当需要的功能BIOS中断调用也未提供时,只能直接访问硬件实现。例如:要想编一播放音乐的程序,只能直接访问硬件实现。返回本节首页返回本节首页返回本章首页返回本章首页返回上一节返回上一节7.2.2 常用的BIOS功能调用举例 BIOS功能调用比DOS功能调用在控制底层方面功能更强大,能完成许多DOS功能调用无法完成的功能,下面对其常用功能作简单介绍。1. 磁盘操作 BIOS中无磁盘文件的概念(文件是DOS一级的概念),它“眼中”的磁盘是扇区和磁道。它的13H号功能调用提供了详尽的控制磁盘操作的功能,如可以按道格式化磁盘,而且格式化磁道时可以自由设定每道扇区数、每扇区的字节数。同时,每面格式化的磁道数也可以自由设定。这样,加密软件就可以调用这些功能格式化出非DOS标准的磁盘结构,在这样的磁盘中记录的数据在DOS下不能读取,当然也无法拷贝,从而达到防拷贝的目的。并且,这并不妨碍加密者自己使用磁盘,因为它知道磁盘的结构,它可以通过设置适当的参数后调用BIOS的扇区读写功能,来读写磁盘中的数据。 13H号功能调用内含的子功能如表7-5所示:表7-5 BIOS 13H号功能调用的子功能AH功 能AH功 能00复位磁盘0B写长扇区01取磁盘状态0C查找柱面(磁道)02读扇区0D备用磁盘复位03写扇区10检测驱动器是否准备好04检测扇区11复校驱动器05 格式化磁道14控制器内部诊断08取当前驱动器参数15取磁盘类型09初始化双驱动器16改变磁盘状态0A 读长扇区17置磁盘类型下面介绍13H号功能调用中最常用的扇区读写功能调用。入口参数:入口参数: AH=02,指明读扇区功能调用。 AL 要读扇区数。 DL 驱动器代号,0和1代表软盘,80H和81H代表硬盘。 DH 所读磁盘磁头号,以软盘来说,只能是0和1。 CH 10位磁道号的低8位,CL寄存器的第6、7位存放其高2位(对于1.2M软盘,范围079)。 CL 低5位为要读的第一个扇区的扇区号(注意扇区号从1开始而非从0开始。对1.2M软盘,范围115)。高2位表示磁道柱面号的高2位。 ES:BX 指出存放从磁盘所读数据的内存地址。13H号功能调用02H号子功能:读扇区出口参数:出口参数: 读出数据放在ES:BX所指的内存区域中。 若产生错误,CF置1,AH内为错误代码。13H号功能调用03H号子功能:写扇区入口参数:入口参数: AH=03,指明写扇区功能调用 AL 要写扇区数, DL 驱动器代号,0和1代表软盘,80H和81H代表硬盘 DH 所读磁盘磁头号,以软盘来说,只能是0和1。 CH 10位磁道号的低8位,CL寄存器的第6、7位存放其高2位(对于1.2M软盘,范围079)。 CL 低5位为要写的第一个扇区的扇区号(注意扇区号从1开始而非从0开始。对1.2M软盘,范围115)。高2位表示磁道柱面号的高2位。 ES:BX 指出写往磁盘所数据的内存地址。出口参数:出口参数: 除非产生错误,信息都写入磁盘。若产生错误,CF置1,AH内为错误代码。例7-2 本例中读取A驱0面10道1扇区中的数据到内存buf处,然将这此数据逐个字节加1,最后再写回原处。DATASEGMENTERROR_MESSAGEDB0AH,ERROR !,$;出错时的提示OK_MESSAGEDB0AH,OK !,$;成功后的提示BUFDB512 DUP(0);磁盘数据缓冲区DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AH,2;读扇区MOV AL,1;读1个扇区MOV DL,0;读A驱MOV DH,0;读0面MOV CH,10;读第10磁道MOV CL,1;读第1扇区PUSHDSPOP ESMOV BX,OFFSETBUF;读出数据放到BUF处INT13H;读调用JCERROR;出错,转ERROR处MOV CX,512MOV SI,OFFSETBUFL1:INCBYTE PTRSIINCSILOOP L1;这个循环将BUF内的512个字节各自加1MOV AH,3;写扇区MOV AL,1MOV DL,0MOV DH,0MOV CH,10MOV CL,1PUSH DSPOPESMOV BX,OFFSETBUFINT13H;写调用,写的位置同上面读的位置JCERRORMOV AH,9;若都成功,显示成功提示MOV DX,OFFSETOK_MESSAGEINT21HJMPEND1ERROR:;失败时显示提示MOV DX,OFFSET ERROR_MESSAGEMOV AH,9INT21HEND1:MOV AH,4CHINT21HCODEENDSEND START2. 显示功能(1) BIOS的显示功能 DOS的显示功能相当简单,而BIOS的显示功能则非常丰富。如DOS功能调用中不能显示图形,即使显示字符,也不能控制显示位置,不能设置字符颜色等。因而实际应用软件开发中屏幕操作总是调用BIOS来完成,而很少有仅靠DOS调用完成的情况。BIOS的显示功能集中在10H号中断中。其各个子功能基本情况如表7-6所示:表7-6 BIOS的10H号能调用的子功能AH功 能AH功 能00置显示方式09写字符和属性01置光标类型0A写字符02置光标位置0B置彩色调色板03读光标位置0C写点04读光笔位置0D读点05选择当前显示页0E以电传方式写字符06当前显示页上滚0F取当前显示页07当前显示页下滚13写字符串08读字符和属性(2) 显示方式 PC机的基本显示方式有2种,一种是文本方式,一种是图形方式。文本方式 在文本方式下,屏幕可显示的最小单位是字符,字符可以设置背景色、前景色、闪烁等属性。CGA显示器有4025字符低分辨率和8025高分辨率两种方式。文本方式下屏幕上的每个字符在显存中占二个字节,一个字节对应ASCII码,一个字节对应属性值。由于屏幕上最多有2000个这符,只需4000个字节的显存即可。因而32K的显存被划分成8份使用,每份4K,称为一个显示页。一次只有一个显示页中的数据显示在屏幕上,这个页称为当前页。系统中有相应的方法控制切换当前页。图形方式 在图形方式下,屏幕上可控制的最小单位是点,CGA将显示屏幕划分为320200个象素的中分辨率和640200个象素的高分辨率方式。在中分辨率方式下,每个象素可以有4种不同的颜色显示,背景可以有16种颜色。在高分辨率方式下,只能以黑白方式显示。在图形方式下,屏幕有光标但不显示。 本节主要介绍字符方式下的显示,图形方式下的显示下节介绍。(3) 字符属性 在文本方式下,字符属性用一个字节表示,属性字节格式如下: D7:闪烁。 D6D4:背景色 D3D0:前景色 颜色属性与取值对应关系如表7-7所示:表7-7 颜色属性与取值颜色值(Bin)颜色值(Bin)颜色值(Bin)颜色值(Bin)黑0000红0100灰1000浅红1100蓝0001紫0101浅蓝1001品红1101绿0010棕0110浅绿1010黄1110青0011灰白0111浅白1011白1111(4) 光标与窗口 在文本方式下,光标可由程序设置其形状或是否显示,由10H号功能调用的1号子功能完成;也可以调置或读取其位置,由10H号功能调用的2、3号子功能完成。另外,当前光标处显示的字符也可以读出,由10H号功能调用的8号子功能完成。 窗口是屏幕上的一个矩形区域,可以独立进行显示文本的输出及上卷、下卷等操作。屏幕上可以同时设置多个窗口。窗口上卷时,超过顶部的行将自动丢失,出现在底部的新行被填为空格。上、下滚动窗口的操作分别由10H号功能调用的6、7号子功能完成,清屏操作也是借助于这二种操作完成的,只要在其入口参数中设置AL=0即可。(5) 文本显示 10H号功能调用中常用的文本显示子功能如表7-8所示。 10H号功能调用的子功能09H和了功能0AH都能把一个字符传送到显示屏幕,然后光标返回到它的初始位置,所以在当前光标位置上写一字符之后,必须用10H号功能调用的子功能02H移动光标到下一个字符位置上。这两种子功能的区别是:AH09H的功能把字符及其属性输出到当前光标位置上,而AHOAH的子功能只输出字符,它的属性值就是这一位置上先前已具有的属性。OAH功能在使用黑白显示器时特别方便,因为此时我们很少改变显示字符的属性。如果想在显示字符后自动后移光标位置,则应用0EH号子功能。表7-8 BIOS的文本显示功能AH功 能入口参数出口参数1置光标类型(CH)03=光标开始行(CL)03=光标结束行2置光标位置 BH=页号DH=行DL=列3读光标位置BH=页号CH=光标开始行 CL=光标结束行 DH=行 DL=列AH功 能入口参数出口参数6当前显示页上卷AL=上卷行数,AL=0全屏幕为空白BH=卷入行属性CH=左上角行号 CL=左上角列号 DH=右下角行号DL=右下均列号7当前显示页下卷AL=下卷行数,AL=0全屏幕为空白BH=卷入行属性CH=左上角行号CL=左上角列号DH=右下角行号DL=右下角列号表7-8 BIOS的文本显示功能AH功 能入口参数出口参数8读光标位置的属性和字符BH=显示页AH=属性 9在光标位置显示字符及其属性BH=显示页AL=字符BL=属性CX=字符重复次数A在光标位置只显示字符BH=显示页AL=字符CX=字符重复次数表7-8 BIOS的文本显示功能E以电传方式写字符AL=字符ASCII码BL=前景色(图形方式下)=0(文本方式下)例7-3 本例中程序运行后先清屏,然后在20行25列处显示10个星号。CODESEGMENTASSUMECS:CODESTART:MOV AH,6;上滚窗口MOV AL,0;上滚行数MOV CH,0;窗口左上角行号MOV CL,0;窗口左上角列号MOV DH,24;窗口右下角行号MOV DL,79;窗口右下角列号MOV BH,1FH;窗口底部空白行属性:蓝底白字INT10HMOV AH,2;置光标位置MOV BH,0;页号0MOV DH,20;行号为20MOV DL,25;列号为25INT10HMOV AH,9;显示字符功能MOV AL,*;显示字符ASCII码MOV BH,0;设置页号MOV BL,7;字符属性MOV CX,10;重复次数INT10HMOV AH,4CHINT21H;返回DOSCODEENDSENDSTART返回本节首页返回本节首页返回上一节返回上一节返回本章首页返回本章首页7.2.3 图形显示程序设计 编制图形程序是程序设计中非常有趣和有价值的工作之一。在图形领域中,汇编语言具有潜在的优点,因为屏幕上显示的一个图象由成千上万个元素组成,处理这些图象需要大量的指令。以速度而论,汇编语言远比高级语言快得多,最高级的图形技术,例如动画,往往以汇编语言编写才更逼真、有效。1.显示功能 如上节所述,BIOS的显示功能全部集中在10H号功能调用中。10H号功能调用中常用的图形方式子功能如表7-9所示:表7-9 BIOS的图形显示功能AH功 能入口参数出口参数0设置显示方式AL=00 4025黑白文本方式AL=01 4025彩色文本方式AL=02 8025黑白文本方式AL=03 8025彩色文本方式AL=04 320200彩色图形方式AL=05 320200黑白图形方式AL=06 640200黑白图形方式B置彩色调色板BH 指明要执行的功能 =0:设置当前调色板背景色 =1:选择调色板BL 其含义取决于BH值 若BH=0:此寄存器中设置背景色代码(00FH) 若BH=1:此寄存器中放置调色板号表7-9 BIOS的图形显示功能AH功 能入口参数出口参数C写点DX=行(0199)CX=列(0639)AL=象素值(中分辨率方式下合法象素值为03,高分辨率方式下为0或1。若AL的最高位为1,表示新的象素与当前屏幕上的象素进行异或显示。)D读点DX=行(0199)CX=列(0639)AL=象素值2.图形方式下的分辨率与颜色 显示器(实际由显示卡控制)默认的显示方式是文本方式,要想设置为图形方式,需要调用INT 10H的00号子功能完成。 在图形方式中,屏幕被视为MN的点阵,每个点的坐标上的图象元素就是一个象素。在图形方式下显存中要对屏幕上的内容按点存储,由于显存容量有限,在320200中分辨率下,每个点(象素)的颜色用2个二进制位来表示,故可有4种颜色;在640200象素的高分辨率下,每个点(象素)的颜色用1个二进制位来表示,故只有黑白2种颜色。 在写点调用中例7-4 本例运行后先将屏幕设置为320200彩色图形方式,然后在(0,0)(99,99)处画一条红色线。程序如下:CODESEGMENTASSUMECS:CODESTART:MOV AH,0MOV AL,4INT10H;设置320200彩色图形方式MOV BX,100;控制循环次数MOV DX,0;写点行坐标MOV CX,0;写点列坐标MOV AL,2;写点的颜色,红色MOV AH,0CH;设置调用写点子功能L1:INT10HINCCXINCDXDEC BXJNZL1;控制循环100次MOV AH,4CHINT21H;返回DOSCODEENDSEND START返回上一节返回上一节返回本节首页返回本节首页返回本章首页返回本章首页小 结 DOS与BIOS向汇编语言程序员提供了大量的服务例程,以简化汇编语言程序的编写。所有的DOS/BIOS服务例程都是以中断服务程序的方式提供的,用户可通过软中断指令INT n调用这些服务例程,以满足自己程序的要求。调用不同的服务功能需要不同的中断号n ,调用DOS服务功能时一般n=21H,调用BIOS服务功能时所用到的中断号n比较多,本章讲过的有n=10H(显示服务)、n=13H(磁盘服务)。本书的附录3和4列出了具体的DOS/BIOS服务功能与中断号的对应关系,以及相关的调用参数信息。 读取键盘按键信息、显示或打印字符及字符串,这是程序最常进行的操作,这可通过调用DOS提供了1、2、5、6、7、8、9、10号功能调用来完成。磁盘文件的访问操作也是常用的操作,这方面DOS提供了3CH43H号功能调用予以支持。在复杂的显示操作及底层的磁盘操作方面,DOS提供的服务非常有限,一般应通过调用BIOS的10H与13H号中断调用完成。返回本章首页返回本章首页
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号