IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)ppt课件_第1页
IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)ppt课件_第2页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章 BIOS和DOS中断调用程序设计 9.1 键盘输入中断调用9.2 显示器输出中断调用开 始DOS中断和BIOS中断 在存储器系统中,内存从0FE000H高端8K的ROM中存放有根本输入输出系统Basic Input/Output System,BIOS例行程序。BIOS给PC系列的不同微处置器提供了兼容的系统加电自检、引导装入、主要I/O设备的处置程序以及接口控制等功能模块来处置一切的系统中断。 运用BIOS功能调用,给程序员编程带来极大方便。程序员不用了解硬件的详细细节,可直接运用指令设置参数,并中断调用BIOS例行程序,所以利用BIOS功能调用编写的程序简约,可读性好,而且易于移植

2、 磁盘操作系统Disk Operating System是PC机上最重要的操作系统,它是由软盘或硬盘提供的。它的两个DOS模块IBMBIO和IBMDOS使BIOS运用起来更方便。由于DOS模块提供了更多更必要的测试,运用DOS操作比运用相应功能的BIOS操作更简易,而且DOS对硬件的依赖性更少些。 DOS模块和ROM BIOS的关系如以下图所示。DOS中断和BIOS中断运用方法 DOS功能调用与BIOS功能都经过软件中断调用。在中断调用前需求把功能号装入AH存放器,把子功能号装入AL存放器,除此之外,还需求在CPU的存放器中提供专门的调用参数。普通来说,调用DOS或BIOS功能时,有以下几个步

3、骤:1将调用参数装入指定的存放器。2如需功能调用号,把它装入AH。3如需子功能调用号,把它装入AL。4按中断号调用DOS或BIOS。5检查前往参数能否正确。表9.1 BIOS中断类型 地址Hex 类型码 中断称号 03 0 除以0 47 1 单步 8B 2 非屏蔽 CF 3 断点 1013 4 溢出 1417 5 打印屏幕 181B 6 保管 1D1F 7 保管 2023 8 定时器 2427 9 键盘 282B A 保管的硬中断 2C2F B 异步通讯COM2 3033 C 异步通讯COM1 3437 D 硬盘 383B E 软盘 3C3F F 并行打印机地址Hex 类型码 中断称号4043

4、 10 视频显示I/O调用4447 11 设备检测调用484B 12 存储器容量检测4C4F 13 软/硬盘I/O调用5053 14 通讯I/O调用5457 15 盒式磁带I/O调用585B 16 键盘I/O调用5C5F 17 打印机I/O调用6063 18 ROM BASIC6467 19 引导程序入口686B 1A 时间调用6C6F 1B 键盘CTRL-BREAK控制7073 1C 定时器报时7477 1D 显示器参数表787B 1E 软盘参数表7C7F 1F 字符点阵构造参数表BIOS中断向量地址Hex 类型码 中断称号8083 20 程序终了,前往DOS8487 21 DOS系统功能调

5、用888B 22 程序终了地址8C8F 23 CTRL_BREAK退出地址9093 24 规范错误出口地址9497 25 绝对磁盘读989B 26 绝对磁盘写9C9F 27 程序终了,驻留内存A0FF 283F 为DOS保管10017F 405F 保管扩展BIOS中断向量18019F 6067 为用户软中断保管1A01FF 687F 不用其中7077为I/O设备中断向量200217 8085 BASIC运用2183C3 86F0 BASIC运转时,用于解释3C43FF F1FF 未用表9.2 DOS中断类型9.1 键盘输入中断调用 9.1.1 ASCII与扫描码 9.1.2 BIOS键盘中断

6、9.1.3 DOS中断调用9.1.1 ASCII与扫描码 键盘是计算机最根本的一种输入设备,用来输入信息,以到达人机对话的目的。键盘主要由3种根本类型的键组成:1字符数字键:2扩展功能键:如Home、End、Backspace、Delete、Insert、PgUp、PgDown以及功能键F1F103和其他键组合运用的控制键:如Alt,Ctrl,Shift等 键盘和主机经过5芯电缆相连,这5根线分别是电源线、地线、复位线以及键盘数据线和键盘时钟线。PC机系列的键盘触点电路按16行8列的矩阵来陈列,用单片机Intel8048来控制对键盘的扫描。按键的识别采用行列扫描法,即根据对行线和列线的扫描结果

7、来确定闭合键的位置,这个位置值称为按键的扫描码,经过数据线将8位扫描码送往主机。当在键盘上“按下或“放开一个键时,假设键盘中断是允许的21H端口的第一位等于0,就会产生一个类型9的中断,并转入到BIOS的键盘中断处置程序。 该处置程序从8255可编程外围接口芯片的输入端口读取一个字节,这个字节的低7位是按键的扫描码。最高位为0或者为1,分别表示键是“按下形状还是“放开形状。按下时,获得的字节称为通码,放开时获得的字节称为断码。如ESC键按下获得的通码为01H00000001B,放开ESC键时会产生一个断码81H10000001B。 BIOS键盘处置程序将获得的扫描码转换成相应的字符码,大部分的

8、字符码是一个规范的ASCII码;没有相应ASCII的键,如Alt和功能键F1F10,字符码为0;还有一些非ASCII码键产生一个指定的操作。键盘缓冲区键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下: 键盘缓冲区是一个环形队列,其性质与课程中对“环形队列所描画的性质完全一致。虽然缓冲区的本身长度为16个字,但出于判别“对列满的思索,它最多只能保管15个键盘信息。当缓冲区满时,系统将不再接受按键信息,而会发出“嘟的声音,以示要暂缓按键。当KBHeadKBTail时,表示无键盘输入。KBHead DW? ;其内存地址为0000:041AH,缓冲区头指针KBTail DW? ;其内存地址为00

9、00:041CH,缓冲区尾指针KBBuff DW16 DUP(?) ;其内存地址为0000:041EH,该缓冲区 的缺省长度为16个字9.1.2 BIOS键盘中断 类型 16H 的中断提供了根本的键盘操作,它的中断处置程序包括3个不同的功能,分别根据AH存放器中的子功能号来确定。 1AH=0 本功能为从键盘读字符到AL存放器中。(AL=字符码,AH=扫描码 2AH=1 本功能为读键盘缓冲区字符到AL存放器中, 并置ZF标志位。(假设ZF=0,那么AL=字符码,AH=扫描码, ZF=1,缓冲区空 3AH=2 本功能为读取特殊功能键的形状。(AL=键盘形状字节code segment assume

10、 cs:code mov ah, 0 int 16h mov ah, 4ch int 21h code endsend从键盘读字符在计算机键盘上除了可输入各种字符(字母、数字和符号等)的按键之外,还有一些功能键(如:F1、F2、等)、控制键(如:Ctrl、Alt、Shift等)、双态键(如:Num Lock、Caps Lock等)和特殊恳求键(如:Print Screen、Scroll Lock等)。 键盘中的控制键和双态键是非打印按键,它们是起控制或转换作用的。当运用者按下控制键或双态键时,系统要记住其所按下的按键。为此,在计算机系统中,特意安排的一个字来标志这些按键的形状,我们称该字为键盘

11、形状字。 键盘形状字的各位含义如下图。键盘形状字code segment assume cs:code mov ah, 2 int 16h mov ah, 4ch int 21h code endsend读取特殊功能键的形状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_key1单字符输入例92 接纳键盘输入并对其进展测试。 wait_here: mov ah, 7 int 21h cmp al, 0dh jne wait_here例93 检测键盘输入的字符能

12、否是回车键。code segment assume cs:code mov ah,7 int 21h cmp al,0 je get_char jmp errorget_char_ mov ah,7 int 21h cmp al,3bh;F1 je option1 cmp al,3ch;F2 je option2 mov ah,4ch int 21hcode endsend 假设程序要求能接纳功能键或数字组合键必需进展两次DOS功能调用:第一次回送00第二次回送扫描码例9-4 检测键盘输入的功能键。data segment smax db 21 sact db ? stri db 21 dup

13、(?)data endscode 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 endsEnd 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的功能0ch能去除键盘缓冲区,然后执行在AL中指定的功能。A

14、L中指定的功能可以是1,6,7,8或0AH。 mov ah, 0chmov al, 08h int 21h inc al je exitExit:3去除键盘缓冲区例 编写按恣意键终了程序的程序段 mov ah, 0bh int 21h inc al je exitExit:4检验键盘形状 显示器可以简单的分为单色显示器和彩色显示器。随着显示技术的开展,种类也更加丰富,常见的有阴极摄像管CRT)、液晶显示器、等离子显示器等。 显示器是经过显卡与主机相连。显示器的显示屏通常称之为屏幕,如今常用的显示器有14和17,常用的显示分辨率为800600或1024768等。常用的显示卡类型为VGA、SVGA

15、、EVGA和TVGA等,显示卡上也都带有大量的显示存储器,能快速显示精巧的图象。1MDA MDAMonochrome Display Adapter 属于单色显示适配器,是IBM最早研制的视频显示适配器。2CGA 在MDA推出的同时,IBM也推出了彩色图形显示适配器CGAColor Graphics Adapter。9.2 显示器I/O3EGA 加强图形显示适配器EGAEnhanced Graphics Adapter是IBM公司推出的第二代图形显示适配器,它兼容了MDA和CGA的全部功能。4VGA 视频图形阵列显示适配器VGAVideo Graphics Array是IBM公司推出的第三代图

16、形显示适配器,它兼容了MDA、CGA和EGA的全部功能。5. XGA XGAExtended Graphics Array是IBM公司继VGA之后推出的扩展图形显示适配器。显示方式 计算机系统中的显示器都有二种显示方式:文本显示方式和图形显示方式。 在DOS操作系统环境下,其默许的显示方式为文本显示方式,而在Windows操作系统环境下,其显示方式是图形显示方式,其绝大多数操作界面是以图形界面的窗口方式出现的。文本显示方式 文本显示方式是指以字符为最小单位的显示方式,每个字符都是以矩形块方式显示的。在BIOS ROM中存有多种不同大小的字符集,主要的显示字符集大小为:88(规范)、814和81

17、6等。 在常用的文本显示方式(方式3)下,屏幕被划分成25行,每行可显示80个字符,所以,每屏最多可显示2000(8025)个字符。为了便于标识屏幕上的每个显示位置,我们就用其所在行和列来表示之,并规定:屏幕的左上角坐标为(0, 0),右下角坐标为(24, 79)。 在显示字符时,用一个字节存储该字符的ASCII码,用另一个字节存储的显示属性,即:显示颜色。 在8025的文本显示方式下,满屏可显示2000个字符,也就需求4000个字节来存储一屏的显示信息。图形显示方式 图形显示是目前最常用的一种显示方式,也是Windows操作系统的默许显示方式。在该显示方式下,我们可以看到优美的图象、VCD、

18、阅读丰富多彩的网页等。 图形显示的最小单位是象素,对每个象素可用不同的颜色来显示。所以,在显示缓冲区内记录的信息是屏幕各象素的显示颜色。 由于各种图形显示方式所能显示的颜色和象素是不同的,它决议了显示缓冲区的存储方式也是不同的。下面给出三个详细的图形显示方式及其存储方式,经过它们可看出各种显示方式在显示缓冲区存储方式上的明显差别。4色320200图形显示方式 由于每个象素只能是四种颜色之一,而四种情况用2位二进制就可表示,所以,一个字节可表示4个象素的显示颜色,存储一行上的一切象素信息就需求80个字节。 在详细存储过程中,它又把偶数行象素和奇数行分开来存储。偶数行和齐数行的象素总数各有3200

19、0个,也都需求8000个字节来存储,并规定: 偶数行象素从0B800:0000H开场存储, 奇数行象素从0B800:2000H开场存储。 该显示方式的存储方式如下图。16色640480图形显示方式 640480图形显示方式共有307200个象素,每个象素可选用16种颜色,它需求用4位二进制来表示。该显示方式在存储显示信息时,把该4位分在四个位平面P1、P2、P3和P4上,所以,位平面Pi(i=1,2,3,4)共有307200个二进制位,即有38400个字节。其显示缓冲区的存储方式如下图。256色320200图形显示方式 表达256种不同颜色需求8位二进制,即一个字节。在该方式下,其显示缓冲区的

20、存储方式是非常简单的,即:第一个字节存储第一个象素的颜色,第二个字节存储第二个象素的颜色,以此类推,所以,存储满屏象素所需求的字节数为:320200164000。其显示缓冲区的存储方式如下图。 从上面三种不同图形显示方式的引见,不难看出:各种显示方式在显示缓冲区存储方式上的明显差别,操作象素方法的难易程度相差也很大,所以,再次建议:程序员不要用直接操作显示缓冲区的方法来到达改动显示象素的目的,最好是经过BIOS内的中断功能来实现相应的功能,这样,所编写的程序能很方便地顺应不同的图形显示方式。9.2.1 字符属性 显示器的屏幕通常划分为行和列的二维系统,显示适配器就在行列组成的网格位置上显示字符

21、。对应屏幕上的每个字符位置,主存空间都有相应的存储单元与之对应,因此可说是显示屏幕式“存储器的映像。对应显示屏幕上的每个字符,在存储器中由延续的两个字节表示,一个字节表示ASCII码,另一个字节保管字符的属性。属性值()属性值()显示效果0000000000无显示0000000101黑底白字,下划线0000011107黑底白字,正常显示000011110F黑底白字,高亮度0111000070白底黑字,反相显示1000011187黑底白字,闪烁11110000F0白底黑字,反相闪烁单色显示的属性值 7 6 5 4 3 2 1 0背景前景闪烁亮度1、单色字符属性2、彩色字符显示位号76 5 43

22、2 1 0属性字节BLR G BI 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.每个

23、字符的ASCII码和属性码字节存放于两个延续的字节中。图形显示方式下,其显示缓冲区段地址为0A000H。 在25 X 80的文本显示方式下,屏幕可有2000个字符位置,因每个字符需求用两个字节,显存容量需求多少?假设显存有16K,可保管几屏幕的数据?对CGA,EGA和VGA的80列显示方式,0页的起始地址是B800:0000,1页的起始地址是B800:1000,2页的起始地址为B800:2000,3页的起始地址为B800:3000 。 如何计算一个字符在显存中的位置? 9.2.2 BIOS显示中断调用 10H中断调用为显示器中断,共有17种功 能。下面列出几种主要功能的运用情况。 1设置显示方

24、式0号功能入口参数:AH=0功能号,AL=设置方式07。出口参数:无。2设置光标类型1号功能入口参数:AH=1功能号,CH=光标开场行,CL=光标终了行。出口参数:无。根据CX给出光标的大小。AL显示方式04025黑白文本方式14025彩色文本方式28025黑白文本方式38025彩色文本方式4320200彩色图形方式5320200黑白图形方式6640200黑白图形方式78025黑白文本方式单色显示卡3设置光标位置2号功能 入口参数:AH=2功能号,BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标位置。4读当前光标位置3号功能入口参数;AH=3功能号,BH=页号。出口参数:

25、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=页

26、号,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:cod

27、e 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 21hcode endsend start例 置光标开场行为5,终了行为7,并把它设置到第五行第六列设置光标位置2号功能 入口参数:AH=2功能号,BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标位置。设置光标类型1号功能入口参数:AH=1功能号,CH=光标开场行,CL=光标终了行。出口参数:无。根据CX给出光标的大小。例:编写去除全屏幕的程序clear segment

28、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 21hclear endsend 初始窗口或向上滚动6号功能入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号。DX=上滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,底部为空白输入行。设置光标位置2号功能 入口参数:AH=2功能号,BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标

29、位置。例 去除左上角为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 21hclear endsend 设置光标位置2号功能 入口参数:AH=2功能号,BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标位置。初始窗口或向下滚动7号功能入口参数:AH=7,AL=下滚

30、行数,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 20data endscode segment assume cs:code,ds:datastart:mov ah,2 mov dh,win_lrr mov dl,win_ulc mov bh,0 int 10h mov cx,win_w

31、idthget_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 startexit:mov ah,4ch int 21h code endsend设置光标位置2号功能 入口参数:AH=2功能号,BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标位置。初始窗口或向上滚动6号功能入口参数:AH=6,AL=上滚行

32、数,CX=上滚窗口左上角的行、列号。DX=上滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,底部为空白输入行。例:在品红背景下,显示5个浅绿色闪烁的星号code segment assume cs:codestart: mov ah,9 mov al,* mov bh,0 mov bl,0dah mov cx,5 int 10h mov ah,4ch int 21h code endsend start在当前光标位置写字符和属性9号功能入口参数:AH=9,BH=页号,AL=字符的ASCII码,BL=字符属性,CX=写入字符数。出口参数:无。在屏幕上以红底蓝字显示字符串“WO

33、RLD SCENERYdata segmentstring db world scenearlen equ $-stringdata endscode segment assume cs:codestart: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 endsend start设置显示方式0号功能入口参数:AH=0功能号,AL

34、=设置方式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列以黄色(0EH)显示字符串Hello。解:在文本显示方式下,每行显示80个字符,每个字符占2个字节,所以,显示一行需求160个字节。假设在第m行、第n列位置显示字符,那么该位置所对应存储单元的偏移量为:

35、m160 + n2。.MODEL SMALL.DATAYellowEQU0EHMSG1DBWelcome.CountEQU$-MSG1.CODE.STARTUPMOV AX, 0B800HMOV ES, AX ;彩色显示器的显示缓冲区段地址MOV DI, 5IMUL DI, 160 ;5行所跳过的显示存储单元MOV CX, 10SHL CX, 1 ;10列所跳过的显示存储单元ADD DI, CX ;第5行、第10列之前所跳过的一切显示单元MOV CX, CountLEA SI, MSG1 ;CX:字符个数,SI:显示字符首地址MOV AH, Yellow ;设置显示属性,即显示颜色.REPEA

36、TLODSB;取显示字符STOSW ;向显示缓冲区设置显示字符和属性.UNTILCXZ.EXIT0END9.2.3 DOS显示功能AH 功能调用参数269显示一个字符(检CTRL_BREAK)显示一个字符(不检CTRL_BREAK)显示字符串DL=字符;光标跟随移动DL=字符;光标跟随移动DS:DX=串地址 串必须以$“结尾计算机与外设交换信息的过程中:并行通讯:多位数据经过多条数据线同时传送。串行通讯:多位数据经过同一条数据线按位传送。 并行通讯就是把一个字符的各数位用几条线同时进展传输。与串行通讯一位一位传输相比,在一样传输率下,并行通讯的信息实践传输速度快、信息率高。但并行通讯比串行通讯

37、所用电缆多,随着间隔的添加,电缆的开销会成为突出的问题。所以,并行通讯总是用在数据传输率要求较高,而传输间隔较短的场所。 9.3 串行通讯口I/O串行通讯可以分为两种类型:同步通讯、异步通讯。异步通讯一个字符一个字符地传输,每个字符一位一位地传输,传输一个字符时,以起始位开场,然后传输字符本身的各位,接着传输校验位,最后以停顿位终了该字符的传输。一次传输的起始位、字符各位、校验位、停顿位构成一组完好的信息,称为帧Frame。帧与帧之间可有恣意个空闲位。起始位之后时数据的最低位。 在异步通讯中,每个字符都要用起始位作为字符的开场和终了的标志,占用了传输的时间,所以在数据块传送时,为了提高效率,就

38、要去掉这些标志,采用同步通讯。同步通讯方式不给每个字符都加起始位和停顿位,而把字符顺序的衔接起来,组成一个数据块首尾相连的数据串,把这样一个数据块称为一个信息桢。在数据的开场加上一个同步字符,而在信息的末尾加有一定的过失检验字符,其格式如下:同步通讯同步字符 字符1 字符2 字符n 校验字符数据块实现串行通讯有公用的接口芯片,常用的有USART(通用同步/异步接纳/发送器)如Intel8251和UART(通用异步接纳/发送器)如Ins 8250。无论是UART,还是USART,均能实现数据发送时所需求的并串转换以及数据被CPU接纳时所需求的串并转换。串行通讯接口串行通讯根底起始位最低位最高位奇

39、偶位停顿位数据位起始位逻辑01位数据位逻辑0或15位、6位、7位、8位校验位逻辑0或11位或无停顿位逻辑11位、1.5位或2位空闲位逻辑1恣意数量异步通讯的信息格式: 并行通讯中,传输速率以每秒钟传输多少字节来表示。而串行通讯中,传输速率是用波特率来表示。所谓波特率是指单位时间内传送二进制数据的位数(简写为bps)。在计算机里,每秒传输多少位和波特率的含义是完全一致的。但是要留意,在最初的定义上波特率是每秒传输离散信号的数目,每秒传输多少位和波特率是不一样的。收、发双方的波特率必需一致。传输一位所需求的时间T叫“位周期。波特率和传输率例:计算串行传输5页,每页80 x25个字符总共需求多少位?

40、假设每个字符8位,1位起始位和1位终止位。计算传输上述五页所需求的时间。数据传输率分别为2400bps 和9600bpsRS232串行通讯接口为了兼容各厂家消费的数据通讯设备,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不兼容,规定逻辑

41、“1在-3V-15V之间,逻辑“0在+3V+15V之间。RS-232C不是TTL电平的接口规范,当计算机与外设进展通讯时,必需有相应的电平转换电路。通常采用的是MC1488和MC1489电平转换器。串行接口芯片8250、8251均运用TTL电平,应运用电平转换电路与RS-232C衔接器衔接。MC1488:TTL电平RS232电平 用于发送方MC1489:TTL电平RS232电平 用于接纳方IBM PC通讯端口 在微机系统中,可以有两个或多个端口衔接到不同的外部设备上进展通讯,如IBM PC和80X86兼容机可以衔接4个通讯端口,他们的编号为COM14(BIOS编号为COM03),但程序每次只能

42、对其中一个端口进展存取。当微机加电自检时,由加电自检程序来测试通用异步收发器的4个COM端口能否存在,假设微机系统中设置了COM端口,那么设置的每个COM端口的I/O地址就写到BIOS数据区的0040:00000040:0007,每个端口地址占用两个字节。假设没有衔接串行端口,BIOS数据区 的这几个单元的内容就成为0。可以用DEBUG查看URAT的端口地址。 保管在BIOS数据区的COM端口地址称为基地址,由于每个 COM端口都包括一组位的存放器,程序员可以经过这些存放器进展编程,以控制数据按设定的格式发送或接纳数据。 BIOS数据区的COM端口地址是第一个存放器的地址。串行口功能调用、DO

43、S串行通讯口功能运用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,3INT 21HMOV INPUT _CHAR,ALBUFFER DB HELLOBUF_LEN EQU $-BUFFER :MOV BX,SEG BUFFERMO

44、V DS,BXMOV BX, OFFSET BUFFERMOV CX,BUF_LENNEXT:MOV DL ,BXMOV AH,4INT 21HLOOP 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 e

45、tc)写成功:AH=0AL=字符。失败:(AH)7=1 (AL)1-6=通信口状态取串行口状态DX=通信口号(COM1=0,COM2=1 etc)AH=通信口状态AL=调制解调器状态例:两台PC机经过COM2端口进展串行数据通讯,编写一个汇编言语程序,要求从一台PC 机上键盘上输入的字符传送到另一台PC机,假设按下ESC键,那么退出程序。在程序中,COM2端口初始化为 4800BPS,8位数据,无校验,1位终止位;.datamessage db serial communication via com2,4800,no p,1stop,8 bit data ,0ah,0dh,$ db any

46、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 14hagain: 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 1

47、4h 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 againexit:mov ah,4ch int 21hmain endpend9.4 磁盘文件管理 9.4.1 BIOS磁盘存取功能 9.4.2 DOS磁盘存取功能 9.4.2 DOS磁盘存取功能 DOS功能调用中断INT 21H提供了两类磁盘文件管理功能,一类是FCB表控制方式,另一类是文件代号式存取方式。 当用户需求翻开或建立一个文件时,必需提供文件标识符。文件标识符用ASCII Z字符串表示。ASCII Z字符串

48、是指文件标识符的ASCII字符串后面再加1个“0字符。文件标识符的字符串包括驱动器名、途径名和文件名。其格式为d:pathfilename.exe其中d为驱动器名,path为途径名,.exe为文件名后缀。1建立文件3CH功能:按指定文件名建立文件。入口参数:AH3CH,DS:DX指向ASCII Z字符串的段地址和偏移地址, CX文件属性。出口参数:假设操作胜利,那么CF0,AX文件代号; 假设操作失败,那么CF1,AX错误代码。2翻开文件3DH功能:翻开由ASCII Z串指定的文件。入口参数:AH3DH,DS:DX指向ASCII Z字符串的段地址和偏移地址, AL存取方式代码0:读文件,1:写

49、文件,2:读、写文件。出口参数:假设操作胜利,那么CF0,AX文件代号; 假设操作失败,那么CF1,AX错误代码。3封锁文件3EH功能:封锁文件代号指定的文件。入口参数:AH3EH,BX文件代号。出口参数:假设操作胜利,那么CF0; 假设操作失败,那么CF1,AX错误代码。 4读文件3FH功能:按文件代号读取文件。入口参数:AH3FH,BX文件代号,CX要读取的字节数; DS:DX指向接纳数据缓冲区的段地址和偏移地址。出口参数:假设操作胜利,那么CF0,AX实践读入字节数,AX0,文件终了; 假设操作失败,那么CF1,AX错误代码。5写文件40H功能:按文件代号写文件。入口参数:AH40H,B

50、X文件代号,CX要写入的字节数; DS:DX指向存放写入信息数据缓冲区的段地址和偏移地址。出口参数:假设操作胜利,那么CF0,AX写入字节数; 假设操作失败,那么CF1,AX错误代码。 6 . 挪动文件指针42H)功能:挪动由文件代号标志的文件读写指针的位置入口参数:在bx预置文件代号,在cx:dx双字中预置移 动位移量,在 al 中预置挪动方式挪动方式:00h 挪动后文件指针值=0+挪动位移量01h 挪动后文件指针值=当前文件指针值+挪动位移量02h 挪动后文件指针值=文件尾值+挪动位移量出口参数:CF=0 表示挪动胜利,此时CX:DX双字中前往挪动后文件指针值;CF=1 表示挪动失败,此时

51、AX中前往值为1表示挪动方式无效,为6表示无效的文件代号。7取/置文件属性43H功能:按文件代号写文件。入口参数:AH43H,DS:DX指向ASCII Z串的段地址和偏移地址。 AL0,取文件属性,AL1,置文件属性; 置文件属性时,CX新文件属性低字节。出口参数:假设操作胜利,那么CF0,假设为取属性,CX文件属性; 假设操作失败,那么CF1,AX错误代码。data segment fname db c:masmfile1.dat,0 dat db 80h dup(0) dat1 db 80h dup(0)data endscode segment assume cs:code,ds:dat

52、a,es:datastart:mov ax,data mov ds,ax mov es,ax mov dx,offset fname mov cx,0 mov ah,3ch int 21h mov si,axnew: mov bx,0 mov cx,20h era:mov ah,01h int 21h mov datbx,al inc bx loop era mov datbx,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

53、 code endsend start例:从键盘输入20个字符存放到利用扩展文件管理方式建立的文件中。data segment fname db c:masmfile1.dat,0 fname1 db c:masmfile2.dat,0 dta db 80h dup(0) dta1 db 80h dup(0)data endscode segment assume cs:code,ds:datastart: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 b

54、x,si mov dx,offset dta1 mov cx,10h mov ah,3fh int 21h mov di,ax mov ah,3eh int 21h mov dx,offset fname1 mov cx,0 mov ah,3ch int 21h mov si,ax mov dx,offset dta1 mov cx,di mov bx,si mov ah,40h int 21h mov bx,si mov ah,3eh int 21h mov ah,4ch int 21hcode endsend start例:从文件file1中读取10个字符到file2文件中data segment fname db c:masmfile1.dat,0 data1 db 8,?,8 dup(?) dat1 db 3000h dup(0) src dw 0ah mess1 db reading from n1=?,10,13,$ mess2 db long n2=?,10,13,$ mess3 db 10,13,$data endsstack segment stack dw 100 dup(0) top label wordstack endscode segmentmain proc far assume cs:code,ds:d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论