IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)

上传人:仙*** 文档编号:244011317 上传时间:2024-10-02 格式:PPT 页数:89 大小:334KB
返回 下载 相关 举报
IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)_第1页
第1页 / 共89页
IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)_第2页
第2页 / 共89页
IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)_第3页
第3页 / 共89页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,安徽理工大学,计算机科学与技术系,李敬兆,汇编语言,第9章,第9,章,BIOS,和,DOS,中断调用程序设计,9.1,键盘输入中断调用,9.2,显示器输出中断调用,开 始,DOS,中断和,BIOS,中断,在存储器系统中,内存从,0,FE000H,高端,8,K,的,ROM,中,存放有基本输入输出系统(,Basic Input/Output System,BIOS),例行程序。,BIOS,给,PC,系列的不同微处理器提供了兼容的系统,加电自检、引导装入、主要,I/O,设备的处理程序以及接口控制等功能模块来处理所有的系统中断,。,使用,BIOS,功能调用,给程序员编程带来极大方便。,程序员,不必了解硬件的具体细节,,可直接使用指令设置参数,并中断调用,BIOS,例行程序,,所以利用,BIOS,功能调用编写的程序简洁,可读性好,而且易于移植,磁盘操作系统,(,Disk Operating System),是,PC,机上最重要的操作系统,它是由软盘或硬盘提供的。它的两个,DOS,模块,IBMBIO.COM,和,IBMDOS.COM,使,BIOS,使用起来更方便。因为,DOS,模块提供了更多更必要的测试,,使用,DOS,操作比使用相应功能的,BIOS,操作更简易,而且,DOS,对硬件的依赖性更少些,。,DOS,模块和,ROM BIOS,的关系如下图所示。,DOS,中断和,BIOS,中断使用方法,DOS,功能调用与,BIOS,功能都通过软件中断调用,。,在中断调用前需要把功能号装入,AH,寄存器,把子功能号装入,AL,寄存器,,除此之外,还需要在,CPU,的寄存器中提供专门的调用参数,。一般来说,调用,DOS,或,BIOS,功能时,有以下几个步骤:,(,1,)将调用参数装入指定的寄存器。,(,2,)如需功能调用号,把它装入,AH。,(3),如需子功能调用号,把它装入,AL。,(4),按中断号调用,DOS,或,BIOS。,(5),检查返回参数是否正确。,表9.1,BIOS,中断类型,地址(,Hex),类型码 中断名称,03 0,除以,0,47 1,单步,8,B 2,非屏蔽,CF,3,断点,1013 4,溢出,1417 5,打印屏幕,181,B 6,保留,1,D1F 7,保留,2023 8,定时器,2427 9,键盘,282,B A,保留的硬中断,2,C2F B,异步通信(,COM2),3033 C,异步通信(,COM1),3437 D,硬盘,383,B E,软盘,3,C3F F,并行打印机,地址(,Hex),类型码 中断名称,4043 10,视频显示,I/O,调用,4447 11,设备检测调用,484,B 12,存储器容量检测,4,C4F 13,软/,硬盘,I/O,调用,5053 14,通信,I/O,调用,5457 15,盒式磁带,I/O,调用,585,B 16,键盘,I/O,调用,5,C5F 17,打印机,I/O,调用,6063 18,ROM BASIC,6467 19,引导程序入口,686,B 1A,时间调用,6,C6F 1B,键盘,CTRL-BREAK,控制,7073 1,C,定时器报时,7477 1,D,显示器参数表,787,B 1E,软盘参数表,7,C7F 1F,字符点阵结构参数表,BIOS,中断向量,地址(,Hex),类型码 中断名称,80,83 20,程序结束,返回,DOS,8487 21 DOS,系统功能调用,888,B 22,程序结束地址,8,C8F 23 CTRL_BREAK,退出地址,9093 24,标准错误出口地址,9497 25,绝对磁盘读,989,B 26,绝对磁盘写,9,C9F 27,程序结束,驻留内存,A0FF 283F,为,DOS,保留,10017,F 405F,保留,(扩充,BIOS,中断向量),18019,F 6067,为用户软中断保留,1,A01FF 687F,不用(其中7077为,I/O,设备中断向量),200217 8085,BASIC,使用,2183,C3 86F0 BASIC,运行时,用于解释,3,C43FF F1FF,未用,表9.2,DOS,中断类型,9.1,键盘输入中断调用,9.1.1,ASCII,与扫描码,9.1.2,BIOS,键盘中断,9.1.3,DOS,中断调用,9.1.1,ASCII,与扫描码,键盘是计算机最基本的一种输入设备,用来输入信息,以达到人机对话的目的。键盘主要由,3,种基本类型的键组成:,(,1,),字符数字键,:,(,2,),扩展功能键,:如,Home、End、Backspace、Delete、Insert、,PgUp,、,PgDown,以及功能键,F1F10,(3),和其他键组合使用的控制键,:如,Alt,Ctrl,Shift,等,键盘和主机通过,5,芯电缆相连,这,5,根线分别是,电源线、地线、复位线以及键盘数据线和键盘时钟线,。,PC,机系列的键盘触点电路按,16行8,列的矩阵,来排列,用单片机,Intel8048,来控制对键盘的扫描。,按键的识别采用行列扫描法,,即根据对行线和列线的扫描结果来确定闭合键的位置,,这个位置值称为按键的扫描码,,通过数据线将,8,位扫描码送往主机。,当在键盘上“按下”或“放开”一个键时,如果键盘中断是允许的(,21,H,端口的第一位等于,0,),就会产生一个,类型,9,的中断,,并转入到,BIOS,的键盘中断处理程序。,该处理程序从,8255,可编程外围接口芯片的输入端口读取一个字节,这个字节的低,7,位是按键的扫描码。最高位为,0,或者为,1,,分别表示键是“按下”状态还是“放开”状态。,按下时,取得的字节称为,通码,,,放开时取得的字节称为,断码,。,如,ESC,键按下取得的通码为,01,H(,0,0000001,B),,放开,ESC,键时会产生一个断码,81,H(,1,0000001,B)。,BIOS,键盘处理程序将取得的扫描码转换成相应的,字符码,大部分的字符码是一个标准的,ASCII,码,;没有相应,ASCII,的键,如,Alt,和功能键(,F1F10),,字符码为,0,;还有一些非,ASCII,码键产生一个指定的操作。,键盘缓冲区,键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下,:,键盘缓冲区是一个环形队列,其性质与数据结构课程中对“环形队列”所描述的性质完全一致。虽然缓冲区的本身长度为16个字,但出于判断“对列满”的考虑,它最多只能保存15个键盘信息。当缓冲区满时,系统将不再接受按键信息,而会发出“嘟”的声音,以示要暂缓按键。当,KBHead,KBTail,时,表示无键盘输入。,KBHead,DW? ;,其内存地址为0000:041,AH,,缓冲区头指针,KBTail,DW? ;,其内存地址为0000:041,CH,,缓冲区尾指针,KBBuff,DW16 DUP(?) ;,其内存地址为0000:041,EH,,该缓冲区,的缺省长度为16个字,9.1.2,BIOS,键盘中断,类型,16,H,的中断提供了基本的键盘操作,它的中断处理程序包括,3,个不同的功能,分别根据,AH,寄存器中的子功能号来确定。,(,1),AH=0,本功能为,从键盘读字符到,AL,寄存器中,。,(,AL=,字符码,,AH=,扫描码),(,2),AH=1,本功能为,读键盘缓冲区字符到,AL,寄存器中,,并置,ZF,标志位,。,(若,ZF=0,,则,AL=,字符码,,AH=,扫描码,,ZF=1,,缓冲区空),(,3),AH=2,本功能为,读取特殊功能键,的状态。,(,AL=,键盘状态字节),code segment,assume,cs,:code,mov,ah, 0,int,16h,mov,ah, 4ch,int,21h,code ends,end,从键盘读字符,在计算机键盘上除了可输入各种字符(字母、数字和符号等)的按键之外,还有一些,功能键(如:,F1、F2、,等),、,控制键(如:,Ctrl、Alt、Shift,等),、,双态键(如:,Num Lock、Caps Lock,等),和,特殊请求键(如:,Print Screen、Scroll Lock,等),。,键盘中的控制键和双态键是非打印按键,它们是起控制或转换作用的。,当使用者按下控制键或双态键时,系统要记住其所按下的按键。,为此,在计算机系统中,,特意安排的一个字来标志这些按键的状态,我们称该字为,键盘状态字,。,键盘状态字的各位含义如图所示。,键盘状态字,code segment,assume,cs,:code,mov,ah, 2,int,16h,mov,ah, 4ch,int,21h,code ends,end,读取特殊功能键的状态,9.1.3,DOS,键盘功能调用(,INT 21H),无,get_key:,mov,ah, 1,int,21h,cmp,al , y,je,yes,cmp,al, n,je,no,jne,get_key,1)单字符输入,例92 接收键盘输入并对其进行测试。,wait_here:,mov,ah, 7,int,21h,cmp,al, 0dh,jne,wait_here,例93 检测键盘输入的字符是否是回车键。,code segment,assume,cs,:code,mov,ah,7,int,21h,cmp,al,0,je,get_char,jmp,error,get_char,_,mov,ah,7,int,21h,cmp,al,3bh;F1,je,option1,cmp,al,3ch;F2,je,option2,mov,ah,4ch,int,21h,code ends,end,如果程序要求能接收功能键或数字组合键必须进行两次,DOS,功能调用:,第一次回送00,第二次回送扫描码,例9-4 检测键盘输入的功能键,。,data segment,smax,db 21,sact,db ?,stri,db 21 dup(?),data ends,code segment,assume,cs,:code,ds,:data,Start:,mov,ax,data,mov ds,ax,lea,dx,stri,mov,ah,0ah,int,21h,mov,ah,4ch,int,21h,code ends,End start,(1),smax,db 21,sact,db ?,stri,db 21 dup(?),(2),smax,db 21,db ?,db 21 dup(?),(3),smax,db 21, ?, 21 dup(?),例9-5 输入字符串程序,2)输入字符串,Int,21,的功能0,ch,能清除键盘缓冲区,然后执行在,AL,中指定的功能。,AL,中指定的功能可以是1,6,7,8或0,AH。,mov,ah, 0ch,mov,al, 08h,int,21h,inc al,je,exit,Exit:,3)清除键盘缓冲区,例 编写按任意键结束程序的程序段,mov,ah, 0bh,int,21h,inc al,je,exit,Exit:,4)检验键盘状态,显示器可以简单的分为单色显示器和彩色显示器。随着显示技术的发展,种类也更加丰富,常见的有阴极摄像管(,CRT)、,液晶显示器、等离子显示器等。,显示器是通过显卡与主机相连,。显示器的显示屏通常称之为屏幕,现在常用的显示器有,14和17,,常用的显示分辨率为,800600或1024768,等。常用的显示卡类型为,VGA、SVGA、EVGA,和,TVGA,等,显示卡上也都带有大量的显示存储器,能快速显示精美的图象。,1,MDA,MDA(Monochrome Display Adapter ),属于单色显示适配器,是,IBM,最早研制的视频显示适配器。,2,CGA,在,MDA,推出的同时,,IBM,也推出了彩色图形显示适配器,CGA(Color Graphics Adapter)。,9.2,显示器,I/O,3,EGA,增强图形显示适配器,EGA(Enhanced Graphics Adapter),是,IBM,公司推出的第二代图形显示适配器,它兼容了,MDA,和,CGA,的全部功能。,4,VGA,视频图形阵列显示适配器,VGA(Video Graphics Array),是,IBM,公司推出的第三代图形显示适配器,它兼容了,MDA、CGA,和,EGA,的全部功能。,5.,XGA,XGA(Extended Graphics Array),是,IBM,公司继,VGA,之后推出的扩展图形显示适配器。,显示模式,计算机系统中的显示器都有二种显示方式:,文本显示方式,和,图形显示方式,。,在,DOS,操作系统环境下,其默认的显示方式为文本显示方式,而在,Windows,操作系统环境下,其显示方式是图形显示方式,,其绝大多数操作界面是以图形界面的窗口形式出现的。,文本显示方式,文本显示方式是指,以字符为最小单位,的显示方式,每个字符都是以矩形块形式显示的。,在,BIOS ROM,中存有多种不同大小的字符集,主要的显示字符集大小为:,88(,标准,)、814和816,等。,在常用的文本显示模式,(,模式,3),下,屏幕被划分成,25,行,每行可显示,80,个字符,所以,每屏最多可显示,2000(8025),个字符。为了便于标识屏幕上的每个显示位置,我们就用其所在行和列来表示之,并规定:屏幕的左上角坐标为,(0, 0),,右下角坐标为,(24, 79),。,在显示字符时,用一个字节存储该字符的,ASCII,码,用另一个字节存储的显示属性,即:显示颜色,。,在,8025,的文本显示模式下,满屏可显示,2000,个字符,也就需要,4000,个字节来存储一屏的显示信息。,图形显示方式,图形显示是目前最常用的一种显示方式,也是,Windows,操作系统的默认显示方式。在该显示方式下,我们可以看到优美的图象、,VCD、,浏览丰富多彩的网页等。,图形显示的最小单位是象素,,对每个象素可用不同的颜色来显示。所以,在显示缓冲区内记录的信息是屏幕各象素的显示颜色。,由于各种图形显示模式所能显示的颜色和象素是不同的,它决定了,显示缓冲区的存储方式,也是不同的。下面给出三个具体的图形显示模式及其存储方式,通过它们可看出各种显示模式在显示缓冲区存储方式上的明显差异。,4色320200,图形显示模式,由于每个象素只能是四种颜色之一,而四种情况用,2,位二进制就可表示,所以,,一个字节可表示,4,个象素的显示颜色,,存储一行上的所有象素信息就需要,80,个字节,。,在具体存储过程中,它又,把偶数行象素和奇数行分开来存储。,偶数行和齐数行的象素总数各有,32000,个,也都需要,8000,个字节来存储,并规定:,偶数行象素从,0,B800:0000H,开始存储,,奇,数行象素从,0,B800:2000H,开始存储。,该显示模式的存储形式如图所示,。,16色640480,图形显示模式,640480,图形显示模式共有,307200,个象素,每个象素可选用,16,种颜色,它需要用,4,位二进制来表示,。该显示模式在存储显示信息时,把该,4,位分在四个位平面,P1、P2、P3,和,P4,上,所以,位平面,Pi(i=1,2,3,4),共有,307200,个二进制位,即有,38400,个字节。其显示缓冲区的存储形式如图所示。,256色320200,图形显示模式,表达,256,种不同颜色需要,8,位二进制,即一个字节。在该模式下,其显示缓冲区的存储方式是非常简单的,即:第一个字节存储第一个象素的颜色,第二个字节存储第二个象素的颜色,,以此类推,所以,存储满屏象素所需要的字节数为:,320200164000,。其显示缓冲区的存储方式如图所示。,从上面三种不同图形显示模式的介绍,不难看出:各种显示模式在显示缓冲区存储方式上的明显差异,操作象素方法的难易程度相差也很大,所以,再次建议:,程序员不要用直接操作显示缓冲区的办法来达到改变显示象素的目的,最好是通过,BIOS,内的中断功能来实现相应的功能,,,这样,所编写的程序能很方便地适应不同的图形显示模式。,9.2.1,字符属性,显示器的屏幕通常划分为行和列的二维系统,显示适配器就在行列组成的网格位置上显示字符。对应屏幕上的每个字符位置,主存空间都有相应的存储单元与之对应,因此可说是显示屏幕式“存储器的映像”。对应显示屏幕上的每个字符,在存储器中由连续的两个字节表示,,一个字节表示,ASCII,码,另一个字节保存字符的属性。,属性值(),属性值(),显示效果,00000000,00,无显示,00000001,01,黑底白字,下划线,00000111,07,黑底白字,正常显示,00001111,0F,黑底白字,高亮度,01110000,70,白底黑字,反相显示,10000111,87,黑底白字,闪烁,11110000,F0,白底黑字,反相闪烁,单色显示的属性值,7 6 5 4 3 2 1 0,背景,前景,闪烁,亮度,1,、单色字符属性,2、彩色字符显示,位号,7,6 5 4,3 2 1 0,属性,字节,BL,R G B,I R G B,闪烁选择,背景颜色,前景颜色,彩色字符显示属性字节,110,棕,RGB,颜色,000,黑,001,蓝,010,绿,011,青,100,红,101,品红,111,白,IRGB,颜色,IRGB,颜色,0000,黑,1000,灰,0001,蓝,1001,浅蓝,0010,绿,1010,浅绿,0011,青,1011,浅青,0100,红,1100,浅红,0101,品红,1101,浅品红,0110,棕,1110,黄,0111,白,1111,强度白,背景颜色组合,前景颜色组合,3.,显示存储器,对于所有的显示适配器,文本方式下显示字符的原理是一样的,所不同的是显存的起始地址不同,,对于,MDA,,显存的起始地址为,B000:0000;,对于,CGA、EGA、VGA,是,B800:0000,.,每个字符的,ASCII,码和属性码字节存放于两个连续的字节中,。图形显示方式下,其显示缓冲区段地址为,0,A000H。,在25,X 80,的文本显示方式下,屏幕可有,2000,个字符位置,因每个字符需要用两个字节,显存容量需要多少?如果显存有,16,K,可保存几屏幕的数据?,对,CGA,EGA,和,VGA,的80,列显示方式,,0,页的起始地址是,B800:0000,1,页的起始地址是,B800:1000,2,页的起始地址为,B800:2000,3,页的起始地址为,B800:3000 。,如何计算一个字符在显存中的位置?,9.2.2,BIOS,显示中断调用,10,H,中断调用为显示器中断,共有,17,种功 能。下面列出几种主要功能的使用情况。,(,1,)设置显示方式(,0,号功能),入口参数:,AH=0(,功能号),,AL=,设置方式(,07,)。,出口参数:无。,(,2,)设置光标类型(,1,号功能),入口参数:,AH=1(,功能号),,CH=,光标开始行,,CL=,光标结束行。,出口参数:无。根据,CX,给出光标的大小。,AL,显示方式,0,4025,黑白文本方式,1,4025,彩色文本方式,2,8025,黑白文本方式,3,8025,彩色文本方式,4,320200,彩色图形方式,5,320200,黑白图形方式,6,640200,黑白图形方式,7,8025,黑白文本方式(单色显示卡),(3,)设置光标位置(,2,号功能),入口参数:,AH=2(,功能号),,BH=,页号,,DH=,行号,,DL=,列号,。,出口参数:无。根据,DX,确定了光标位置。,(,4,)读当前光标位置(,3,号功能),入口参数;,AH=3(,功能号),,BH=,页号,。,出口参数:,DH=,行号,,DL=,列号,,CX=,光标大小。,(,5,)初始窗口或向上滚动(,6,号功能),入口参数:,AH=6,AL=,上滚行数,,CX=,上滚窗口左上角的行、列号。,DX=,上滚窗口右下角的行、列号。,BH=,空白行的属性。,出口参数:无。当滚动后,底部为空白输入行。,(6)初始窗口或向下滚动(7号功能),入口参数:,AH=7,AL=,下滚行数,,CX=,下滚窗口左上角的行、列号。,DX=,下滚窗口右下角的行、列号。,BH=,空白行的属性。,出口参数:无。当滚动后,顶部为空白输入行。,(7)读当前光标位置的字符与属性(8号功能),入口参数:,AH=08H,BH=,页号,。,出口参数:,AL,为读出的字符,,AH,为字符属性,。,(8)在当前光标位置写字符和属性(9号功能),入口参数:,AH=9,BH=,页号,,AL=,字符的,ASCII,码,,BL=,字符属性,,CX=,写入字符重复次数,。,出口参数:无。,(9)在当前光标位置写字符(10号功能),入口参数:,AH=0AH,BH=,页号,,AL=,字符的,ASCII,码,,CX=,写入字符重复次数。,出口参数:无。,(10)显示字符串(13号功能),ES:BP=,串地址,CX=,串长度,DH,DL=,起始行列,BH=,页号,AL=0,BL=,属性,串:,char,charchar,光标返回到起始位置,AL=1,BL=,属性,串:,char,charchar,光标跟随串移动,AL=2,串:,char,charchar,光标返回起始位置,AL=3,串:,char,charchar,光标跟随串移动,code segment,assume,cs,:code,start:,mov,ch,5,mov,cl,7,mov,ah,1,int,10h,mov,dh,5,mov,dl,6,mov,bh,0,mov,ah,2,int,10h,mov,ah,4ch,int,21h,code ends,end start,例 置光标开始行为,5,,结束行为,7,,并把它设置到第五行第六列,设置光标位置(,2,号功能),入口参数:,AH=2(,功能号),,BH=,页号,,DH=,行号,,DL=,列号。,出口参数:无。根据,DX,确定了光标位置。,设置光标类型(,1,号功能),入口参数:,AH=1(,功能号),,CH=,光标开始行,,CL=,光标结束行。,出口参数:无。根据,CX,给出光标的大小。,例:编写清除全屏幕的程序,clear segment,assume,cs,:clear,mov,ah,6,mov,al,0,mov bh,7,mov ch,0,mov cl,0,mov,dh,24,mov,dl,79,int,10h,mov dx,2,mov,ah,2,int,10h,mov,ah,4ch,int,21h,clear ends,end,初始窗口或向上滚动(6号功能),入口参数:,AH=6,AL=,上滚行数,,CX=,上滚窗口左上角的行、列号。,DX=,上滚窗口右下角的行、列号。,BH=,空白行的属性。,出口参数:无。当滚动后,底部为空白输入行。,设置光标位置(2号功能),入口参数:,AH=2(,功能号),,BH=,页号,,DH=,行号,,DL=,列号。,出口参数:无。根据,DX,确定了光标位置。,例 清除左上角为(00)右下角为(24,39)的窗口,初始化为反相显示。该窗口相当于屏幕的左上角,clear segment,assume,cs,:clear,mov,ah,7,mov,al,0,mov bh,70h,mov ch,0,mov cl,0,mov,dh,24,mov,dl,39,int,10h,mov dx,2,mov,ah,2,int,10h,mov,ah,4ch,int,21h,clear ends,end,设置光标位置(2号功能),入口参数:,AH=2(,功能号),,BH=,页号,,DH=,行号,,DL=,列号。,出口参数:无。根据,DX,确定了光标位置。,初始窗口或向下滚动(7号功能),入口参数:,AH=7,AL=,下滚行数,,CX=,下滚窗口左上角的行、列号。,DX=,下滚窗口右下角的行、列号。,BH=,空白行的属性。,出口参数:无。当滚动后,顶部为空白输入行。,例 在屏幕中心显示小窗口,data segment,esc_key,equ,1bh,win_,ulc equ,30,win_,ulr equ,8,win_,lrc equ,50,win_,lrr equ,16,win_width,equ,20,data ends,code segment,assume,cs,:code,ds,:data,start:,mov,ah,2,mov,dh,win_,lrr,mov,dl,win_,ulc,mov bh,0,int,10h,mov cx,win_width,get_char:,mov,ah,1,int,21h,cmp,al, esc_key,jz,exit,loop get_char,mov,ah,6,mov,al,1,mov ch,win_,ulr,mov cl,win_,ulc,mov,dh,win_,lrr,mov,dl,win_,lrc,mov bh,7,int,10h,jmp,start,exit:,mov,ah,4ch,int,21h,code ends,end,设置光标位置(2号功能),入口参数:,AH=2(,功能号),,BH=,页号,,DH=,行号,,DL=,列号。,出口参数:无。根据,DX,确定了光标位置。,初始窗口或向上滚动(6号功能),入口参数:,AH=6,AL=,上滚行数,,CX=,上滚窗口左上角的行、列号。,DX=,上滚窗口右下角的行、列号。,BH=,空白行的属性。,出口参数:无。当滚动后,底部为空白输入行。,例:在品红背景下,显示5个浅绿色闪烁的星号,code segment,assume,cs,:code,start:,mov,ah,9,mov,al,*,mov bh,0,mov bl,0,da,h,mov cx,5,int,10h,mov,ah,4ch,int,21h,code ends,end start,在当前光标位置写字符和属性(9号功能),入口参数:,AH=9,BH=,页号,,AL=,字符的,ASCII,码,,BL=,字符属性,,CX=,写入字符数。,出口参数:无。,在屏幕上以红底蓝字显示字符串“,WORLD SCENERY”,data segment,string db world,scenear,len equ,$-string,data ends,code segment,assume,cs,:code,start:,mov,ah,0,mov,al,3,int,10h,mov bp,seg,string,mov es,bp,mov bp,offset string,mov cx,len,mov dx,0,mov bl,41h,mov,al,0,mov,ah,13h,int,10h,mov,ah,4ch,int,21h,code ends,end start,设置显示方式(0号功能),入口参数:,AH=0(,功能号),,AL=,设置方式(07)。,出口参数:无。,(10)显示字符串(13号功能),ES:BP=,串地址,CX=,串长度,DH,DL=,起始行列,BH=,页号,AL=0,BL=,属性,串:,char,charchar,光标返回到起始位置,AL=1,BL=,属性,串:,char,charchar,光标跟随移动,AL=2,串:,char,charchar,光标返回起始位置,AL=3,串:,char,charchar,光标跟随移动,例,用直接写屏方式在屏幕第,5,行、第,10,列以黄色,(0,EH),显示字符串,Hello。,解:在文本显示方式下,每行显示,80,个字符,每个字符占,2,个字节,所以,显示一行需要,160,个字节。若在第,m,行、第,n,列位置显示字符,则该位置所对应存储单元的偏移量为:,m160 + n2。,.,MODEL SMALL.DATAYellowEQU0EHMSG1DBWelcome.CountEQU$-MSG1.CODE.STARTUP,MOV AX, 0B800H,MOV ES, AX ;,彩色显示器的显示缓冲区段地址,MOV DI, 5,IMUL DI, 160 ;5,行所跳过的显示存储单元,MOV CX, 10,SHL CX, 1 ;10,列所跳过的显示存储单元,ADD DI, CX ;,第5行、第10列之前所跳过的所有显示单元,MOV CX, Count,LEA SI, MSG1,;CX:,字符个数,,SI:,显示字符首地址,MOV AH, Yellow ;,设置显示属性,即显示颜色,.,REPEATLODSB;,取显示字符,STOSW ;,向显示缓冲区设置显示字符和属性,.,UNTILCXZ,.EXIT0,END,9.2.3,DOS,显示功能,AH,功能,调用参数,2,6,9,显示一个字符(检,CTRL_BREAK),显示一个字符(不检,CTRL_BREAK),显示字符串,DL=,字符;光标跟随移动,DL=,字符;光标跟随移动,DS:DX=,串地址 串必须以,$“,结尾,计算机与外设交换信息的过程中:,并行通信:多位数据通过多条数据线同时传送。,串行通信:多位数据通过同一条数据线按位传送。,并行通信就是把一个字符的各数位用几条线同时进行传输。与串行通信(一位一位传输)相比,在相同传输率下,并行通信的信息实际传输速度快、信息率高。但并行通信比串行通信所用电缆多,随着距离的增加,电缆的开销会成为突出的问题。所以,并行通信总是用在数据传输率要求较高,而传输距离较短的场合。,9.3,串行通信口,I/O,串行通信可以分为两种类型:,同步通信、异步通信。,异步通信,一个字符一个字符地传输,每个字符一位一位地传输,传输一个字符时,以,起始位,开始,然后传输字符本身的各位,接着传输,校验位,,最后以,停止位,结束该字符的传输。一次传输的起始位、字符各位、校验位、停止位构成一组完整的信息,称为,帧(,Frame)。,帧与帧之间可有任意个,空闲位,。,起始位之后时数据的最低位。,在异步通信中,,每个,字符,都,要用起始位作为字符的开始和结束的标志,占用了传输的时间,所以在数据块传送时,为了提高效率,就要去掉这些标志,采用同步通信。,同步通信方式不给每个字符都加起始位和停止位,而把字符顺序的连接起来,组成一个数据块,(首尾相连的数据串),把这样一个数据块称为一个信息桢。在数据的开始加上一个同步字符,而在信息的末尾加有一定的差错检验字符,其格式如下:,同步通信,同步字符 字符1 字符2 字符,n,校验字符,数据块,实现串行通信有专用的接口芯片,,常用的有,USART(,通用同步/异步接收/发送器)如,Intel8251,和,UART(,通用异步接收/发送器)如,Ins 8250。,无论是,UART,,还是,USART,,均能实现数据发送时所需要的,并串转换,以及数据被,CPU,接收时所需要的,串并转换。,串行通信接口,串行通信基础,起始位,最低位,最高位,奇偶位,停止位,数据位,起始位逻辑01位,数据位逻辑0或15位、6位、7位、8位,校验位逻辑0或11位或无,停止位逻辑11位、1.5位或2位,空闲位逻辑1任意数量,异步通信的信息格式:,并行通信中,传输速率以每秒钟传输多少字节来表示。而串行通信中,传输速率是用波特率来表示。所谓波特率是指单位时间内传送二进制数据的位数(简写为,bps)。,在计算机里,每秒传输多少位和波特率的含义是完全一致的,。,但是要注意,在最初的定义上(波特率是每秒传输离散信号的数目),每秒传输多少位和波特率是不相同的。,收、发双方的波特率必须一致。传输一位所需要的时间,T,叫“位周期”。,波特率和传输率,例:计算串行传输5页,每页80,x25,个字符总共需要多少位?假设每个字符8位,1位起始位和1位终止位。计算传输上述五页所需要的时间。数据传输率分别为2400,bps,和9600,bps,RS232,串行通信接口,为了兼容各厂家生产的数据通信设备,1960年电子工业协会(,Electronics Industries association ,EIA),制定了,RS-232,接口标准,以后又陆续发布了修订版本,RS-232A,RS-232B,和,RS-232C。,目前广泛应用于个人计算机上的,RS-232,串行接口,他安装于,PC,机内的通信适配器版上。,PC,机上的,COM1、COM2,接口,就是,RS-232C,接口,使用9针和25针连接器,RS-232C,采用负逻辑,且信号电平与,TTL,不兼容,,规定逻辑“1”在-3,V-15V,之间,逻辑“0”在+3,V+15V,之间。,RS-232C,不是,TTL,电平的接口标准,当计算机与外设进行通信时,必须有相应的电平转换电路。通常采用的是,MC1488,和,MC1489,电平转换器。,串行接口芯片8250,、8251,均使用,TTL,电平,应使用电平转换电路与,RS-232C,连接器连接,。,MC1488:TTL,电平,RS232,电平 (用于发送方),MC1489:TTL,电平,RS232,电平 (用于接收方),IBM PC,通信端口,在微机系统中,可以有两个或多个端口连接到不同的外部设备上进行通信,如,IBM PC,和80,X86,兼容机可以连接4个通信端口,他们的编号为,COM14(BIOS,编号为,COM03),但程序每次只能对其中一个端口进行存取。当微机加电自检时,由加电自检程序来测试通用异步收发器的4个,COM,端口是否存在,如果微机系统中设置了,COM,端口,则设置的每个,COM,端口的,I/O,地址就写到,BIOS,数据区的0040:00000040:0007,每个端口地址占用两个字节。如果没有连接串行端口,,BIOS,数据区 的这几个单元的内容就成为0。可以用,DEBUG,查看,URAT,的端口地址。,保存在,BIOS,数据区的,COM,端口地址称为基地址,因为每个,COM,端口都包括,一组位的寄存器,,程序员可以通过这些寄存器进行编程,以控制数据按设定的格式发送或接收数据。,BIOS,数据区的,COM,端口地址是第一个寄存器的地址。,串行口功能调用,、,DOS,串行通信口功能,使用,DOS,命令可以设置串行通信参数,如波特率,字长,校验位和终止位。,格式:,MODE,COMm,:b ,p ,d , s,例如:,MODE COM1 :24,O,8,1,说明:波特率用最高两位来表示,,P,是校验位(,N,无,,O,奇,,E,偶。,端口号的分配:,BIOS,位,,DOS,为,DOS,串行通信口功能调用,AH,功能,调用参数,返回参数,从串行口读一个字符,AL=,输入的数据,4,向串行口写一个字符,DL,输出的数据,例:,INPUT_CHAR DB ?,:,MOV AH,3,INT 21H,MOV INPUT _CHAR,AL,BUFFER DB HELLO,BUF_LEN EQU $-BUFFER,:,MOV BX,SEG BUFFER,MOV DS,BX,MOV BX, OFFSET BUFFER,MOV CX,BUF_LEN,NEXT:,MOV DL ,BX,MOV AH,4,INT 21H,LOOP NEXT,串行通信口,BIOS,功能调用(,int,14h,),AH,功能,调用参数,返回参数,初始化串行口,AL=,初始化参数(书上图9.12),DX=,通信口号(,COM1=0,COM2=1 etc),AH=,通信口状态(书上图9.13),AL=,调制解调器状态,向串行口写字符,AL,所写字符,DX=,通信口号(,COM1=0,COM2=1 etc),写成功:,AH=0AL=,字符。失败:(,AH),7=1,(AL),1-6,=,通信口状态,从串行口读字符,DX=,通信口号(,COM1=0,COM2=1 etc),写成功:,AH=0AL=,字符。失败:(,AH),7=1,(AL),1-6,=,通信口状态,取串行口状态,DX=,通信口号(,COM1=0,COM2=1 etc),AH=,通信口状态,AL=,调制解调器状态,例:两台,PC,机通过,COM2,端口进行串行数据通信,编写一个汇编语言程序,要求从一台,PC,机上键盘上输入的字符传送到另一台,PC,机,若按下,ESC,键,则退出程序。在程序中,,COM2,端口初始化为 4800,BPS,8,位数据,无校验,1位终止位;,.,data,message db serial communication via com2,4800,no p,1stop,8 bit data ,0ah,0dh,$,db any key press is sent to other PC ,0ah,0dh,db press esc to exit,$,.code,main proc,mov,ax,data,mov ds,ax,mov,ah,09,mov bx,offset message,int,21h,mov,ah,0,mov dx,1,mov,al,03ch,int,14h,again:,mov,al,01,int,16h,jz,next,mov,ah,0,int,16h,cmp,al,1bh,je,exit,mov,ah,1,mov dx,1,int,14h,next:,mov,ah,3,mov dx,1,int,14h,and ah,1,cmp,ah,1,jne,again,mov,ah,2,mov dx,1,int,14h,mov,dl,al,mov,ah,2,int,21h,jmp,again,exit:,mov,ah,4ch,int,21h,main,endp,end,9.4,磁盘文件管理,9.4.1,BIOS,磁盘存取功能,9.4.2,DOS,磁盘存取功能,9.4.2,DOS,磁盘存取功能,DOS,功能调用中断(,INT 21H),提供了两类磁盘文件管理功能,,一类是,FCB,表控制方式,另一类是文件代号式存取方式,。,当用户需要打开或建立一个文件时,必须提供文件标识符。文件标识符用,ASCII Z,字符串表示。,ASCII Z,字符串是指文件标识符,的,ASCII,字符串后面再加,1,个“,0”,字符。文件标识符的字符串包括驱动器名、路径名和文件名。其格式为,d:pathfilename.exe,其中,d,为驱动器名,,path,为路径名,,.,exe,为文件名后缀。,1,建立文件(,3,CH),功能:按指定文件名建立文件。,入口参数:(,AH)3CH,DS:DX,指向,ASCII Z,字符串的段地址和偏移地址,,(,CX),文件属性。,出口参数:若操作成功,则,CF0,,(AX),文件代号;,若操作失败,则,CF1,(AX),错误代码。,2,打开文件(,3,DH),功能:打开由,ASCII Z,串指定的文件。,入口参数:(,AH)3DH,DS:DX,指向,ASCII Z,字符串的段地址和偏移地址,,(,AL),存取方式代码(,0,:读文件,,1,:写文件,,2,:读、写文件)。,出口参数:若操作成功,则,CF0,(AX),文件代号;,若操作失败,则,CF1,(AX),错误代码。,3,关闭文件(,3,EH),功能:关闭文件代号指定的文件。,入口参数:(,AH)3EH,(BX),文件代号。,出口参数:若操作成功,则,CF0;,若操作失败,则,CF1,(AX),错误代码。,4,读文件(,3,FH),功能:按文件代号读取文件。,入口参数:(,AH)3FH,(BX),文件代号,,(,CX),要读取的字节数;,DS:DX,指向接收数据缓冲区的段地址和偏移地址。,出口参数:若操作成功,则,CF0,(AX),实际读入字节数,(,AX)0,,文件结束;,若操作失败,则,CF1,(AX),错误代码。,5,写文件(,40,H),功能:按文件代号写文件。,入口参数:(,AH)40H,(BX),文件代号,(,CX),要写入的字节数;,DS:DX,指向存放写入信息数据缓冲区的段地址和偏移地址。,出口参数:若操作成功,则,CF0,(AX),写入字节数;,若操作失败,则,CF1,(AX),错误代码。,6 . 移动文件指针(42,H),功能:移动由文件代号标志的文件读写指针的位置,入口参数:在,bx,预置文件代号,在,cx,:,dx,双字中预置移 动位移量,在,al,中预置移动方式,移动方式:,00,h,移动后文件指针值=0+移动位移量,01,h,移动后文件指针值=当前文件指针值+移动位移量02,h,移动后文件指针值=文件尾值+移动位移量,出口参数:,CF=0,表示移动成功,此时,CX:DX,双字中返回移动后文件指针值;,CF=1,表示移动失败,此时,AX,中返回值为1表示移动方式无效,为6表示无效的文件代号。,7,取,/,置文件属性(,43,H),功能:按文件代号写文件。,入口参数:(,AH)43H,DS:DX,指向,ASCII Z,串的段地址和偏移地址。,(,AL)0,,取文件属性,(,AL)1,,置文件属性;,置文件属性时,(,CX),新文件属性(低字节)。,出口参数:若操作成功,则,CF0,,若为取属性,(,CX),文件属性;,若操作失败,则,CF1,(AX),错误代码。,data segment,fname,db c:,masm,file1.,dat,0,dat,db 80h dup(0),dat1 db 80h dup(0),data ends,code segment,assume,cs,:code,ds,:data,es,:data,start:,mov,ax,data,mov ds,ax,mov es,ax,mov dx,offset,fname,mov cx,0,mov,ah,3ch,int,21h,mov si,ax,new:,mov bx,0,mov cx,20h,era:,mov,ah,01h,int,21h,mov dat,bx,al,inc,bx,loop era,mov dat,bx,0ah,mov dx,offset,dat,mov cx,20h,mov bx,si,mov,ah,40h,int,21h,mov bx,si,mov,ah,3eh,int,21h,mov,ah,4ch,int,21h,code ends,end start,例:从键盘输入20个字符存放到利用扩充文件管理方式建立的文件中。,data segment,fname,db c:,masm,file1.,dat,0,fname1 db c:,masm,file2.,dat,0,dta,db 80h dup(0),dta1 db 80h dup(0),data ends,code segment,assume,cs,:code,ds,:data,start:,mov,ax,data,mov ds,ax,mov es,ax,mov dx,offset,fname,mov,al,0,mov,ah,3dh,int,21h,mov si,ax,mov bx,si,mov dx,offset dta1,mov cx,10h,mov,ah,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!