【文档说明】IBM-PC汇编语言BIOS和DOS中断调用程序设计课件.ppt,共(89)页,333.501 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44726.html
以下为本文档部分文字说明:
安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章第9章BIOS和DOS中断调用程序设计•9.1键盘输入中断调用•9.2显示器输出中断调用开始安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章DO
S中断和BIOS中断在存储器系统中,内存从0FE000H高端8K的ROM中存放有基本输入输出系统(BasicInput/OutputSystem,BIOS)例行程序。BIOS给PC系列的不同微处理器提供了兼容的系统加电自检、引导装入、主要I/O设备的处理程序以及接口控制等功能模
块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来极大方便。程序员不必了解硬件的具体细节,可直接使用指令设置参数,并中断调用BIOS例行程序,所以利用BIOS功能调用编写的程序简洁,可读性好,而且易于移植安徽理工大学计算机科学与技术系李敬兆《汇编语言》
第9章磁盘操作系统(DiskOperatingSystem)是PC机上最重要的操作系统,它是由软盘或硬盘提供的。它的两个DOS模块IBMBIO.COM和IBMDOS.COM使BIOS使用起来更方便。因为DOS模
块提供了更多更必要的测试,使用DOS操作比使用相应功能的BIOS操作更简易,而且DOS对硬件的依赖性更少些。DOS模块和ROMBIOS的关系如下图所示。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章DO
S中断和BIOS中断使用方法DOS功能调用与BIOS功能都通过软件中断调用。在中断调用前需要把功能号装入AH寄存器,把子功能号装入AL寄存器,除此之外,还需要在CPU的寄存器中提供专门的调用参数。一般来说,调用DOS或BIOS功能时,有以下几个步骤:(1)将调用
参数装入指定的寄存器。(2)如需功能调用号,把它装入AH。(3)如需子功能调用号,把它装入AL。(4)按中断号调用DOS或BIOS。(5)检查返回参数是否正确。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章表9.1BIOS中断类型
地址(Hex)类型码中断名称0—30除以04—71单步8—B2非屏蔽C—F3断点10—134溢出14—175打印屏幕18—1B6保留1D—1F7保留20—238定时器24—279键盘28—2BA保留的硬中断2C—2FB
异步通信(COM2)30—33C异步通信(COM1)34—37D硬盘38—3BE软盘3C—3FF并行打印机地址(Hex)类型码中断名称40—4310视频显示I/O调用44—4711设备检测调用48—4B12存储器容量检测4C—4F13软/硬盘I/O调用50—5314通信I/O调用54—571
5盒式磁带I/O调用58—5B16键盘I/O调用5C—5F17打印机I/O调用60—6318ROMBASIC64—6719引导程序入口68—6B1A时间调用6C—6F1B键盘CTRL-BREAK控制70—731C定时器报时74—771D显示器参数表78—7B1E软盘参数表7C—
7F1F字符点阵结构参数表BIOS中断向量安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章地址(Hex)类型码中断名称80—8320程序结束,返回DOS84—8721DOS系统功能调用88—8B22程序结束地址8C—8F23CTRL_BREAK退出地址90—9324标准错误出口地址94
—9725绝对磁盘读98—9B26绝对磁盘写9C—9F27程序结束,驻留内存A0—FF28—3F为DOS保留100—17F40—5F保留(扩充BIOS中断向量)180—19F60—67为用户软中断保留1A0—1FF68—7F不用(其中70—77为
I/O设备中断向量)200—21780—85BASIC使用218—3C386—F0BASIC运行时,用于解释3C4—3FFF1—FF未用表9.2DOS中断类型安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章9
.1键盘输入中断调用9.1.1ASCII与扫描码9.1.2BIOS键盘中断9.1.3DOS中断调用安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章9.1.1ASCII与扫描码键盘是计算机最基本的一种输
入设备,用来输入信息,以达到人机对话的目的。键盘主要由3种基本类型的键组成:(1)字符数字键:(2)扩展功能键:如Home、End、Backspace、Delete、Insert、PgUp、PgDown
以及功能键F1~F10(3)和其他键组合使用的控制键:如Alt,Ctrl,Shift等安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章键盘和主机通过5芯电缆相连,这5根线分别是电源线、地线、复位线以及键盘数据
线和键盘时钟线。PC机系列的键盘触点电路按16行×8列的矩阵来排列,用单片机Intel8048来控制对键盘的扫描。按键的识别采用行列扫描法,即根据对行线和列线的扫描结果来确定闭合键的位置,这个位置值称为按键的扫描码,通过数据线将8位扫描码送往主机。当在键盘上“按下”或“放开”一
个键时,如果键盘中断是允许的(21H端口的第一位等于0),就会产生一个类型9的中断,并转入到BIOS的键盘中断处理程序。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章该处理程序从8255可编程外围接口芯片的输入端口读取一个字节,这个字节的低7位是按键的
扫描码。最高位为0或者为1,分别表示键是“按下”状态还是“放开”状态。按下时,取得的字节称为通码,放开时取得的字节称为断码。如ESC键按下取得的通码为01H(00000001B),放开ESC键时会产生一个断码81H(10000001B)。BIOS键盘处理
程序将取得的扫描码转换成相应的字符码,大部分的字符码是一个标准的ASCII码;没有相应ASCII的键,如Alt和功能键(F1~F10),字符码为0;还有一些非ASCII码键产生一个指定的操作。安徽理工大学计算机科学与技术系李敬兆《汇
编语言》第9章键盘缓冲区键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下:键盘缓冲区是一个环形队列,其性质与《数据结构》课程中对“环形队列”所描述的性质完全一致。虽然缓冲区的本身长度为16个字,但出于判断“对列满”
的考虑,它最多只能保存15个键盘信息。当缓冲区满时,系统将不再接受按键信息,而会发出“嘟”的声音,以示要暂缓按键。当KBHead=KBTail时,表示无键盘输入。KBHeadDW?;其内存地址为0000:041AH,缓冲区头指针KBTailDW?;其内存地址为0000:041CH,缓
冲区尾指针KBBuffDW16DUP(?);其内存地址为0000:041EH,该缓冲区的缺省长度为16个字安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章9.1.2BIOS键盘中断类型16H的中断提供了基本的键盘操作,它的中断处理程序包括3个不同的功能,分别
根据AH寄存器中的子功能号来确定。(1)AH=0本功能为从键盘读字符到AL寄存器中。(AL=字符码,AH=扫描码)(2)AH=1本功能为读键盘缓冲区字符到AL寄存器中,并置ZF标志位。(若ZF=0,则AL=字符码,AH=扫描码,ZF=
1,缓冲区空)(3)AH=2本功能为读取特殊功能键的状态。(AL=键盘状态字节)安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章codesegmentassumecs:codemovah,0in
t16hmovah,4chint21hcodeendsend从键盘读字符安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章在计算机键盘上除了可输入各种字符(字母、数字和符号等)的按键之外,还有一些功能键(如:F1、F2、…
等)、控制键(如:Ctrl、Alt、Shift等)、双态键(如:NumLock、CapsLock等)和特殊请求键(如:PrintScreen、ScrollLock等)。键盘中的控制键和双态键是非打印按键,它们是起控制或转换作用的。当使用者按下控制键或双态键时,系统要记住
其所按下的按键。为此,在计算机系统中,特意安排的一个字来标志这些按键的状态,我们称该字为键盘状态字。键盘状态字的各位含义如图所示。键盘状态字安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章安徽理工大学计算机科学与技术
系李敬兆《汇编语言》第9章codesegmentassumecs:codemovah,2int16hmovah,4chint21hcodeendsend读取特殊功能键的状态安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章9.1.
3DOS键盘功能调用(INT21H)无安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章get_key:movah,1int21hcmpal,’y’jeyescmpal,’n’jenojneget_key1)单字符输入例9—2接收键盘输入
并对其进行测试。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章wait_here:movah,7int21hcmpal,0dhjnewait_here例9—3检测键盘输入的字符是否是回车键。安徽理工大学计算机科
学与技术系李敬兆《汇编语言》第9章codesegmentassumecs:codemovah,7int21hcmpal,0jeget_charjmperrorget_char_movah,7int21h
cmpal,3bh;F1jeoption1cmpal,3ch;F2jeoption2movah,4chint21hcodeendsend如果程序要求能接收功能键或数字组合键必须进行两次DOS功能调用:第一次回送00
第二次回送扫描码例9-4检测键盘输入的功能键。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章datasegmentsmaxdb21sactdb?stridb21dup(?)dataendscodesegmentassumec
s:code,ds:dataStart:movax,datamovds,axleadx,strimovah,0ahint21hmovah,4chint21hcodeendsEndstart(1)smaxdb21sactdb?stridb21dup(?)(2)smaxdb21db?db
21dup(?)(3)smaxdb21,?,21dup(?)例9-5输入字符串程序2)输入字符串安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章Int21的功能0ch能清除键盘缓冲区,然后执行在AL中指定的功能。AL中指定的功能可以是1,6,7,8或0AH。…movah,0chmov
al,08hint21hincaljeexit…Exit:3)清除键盘缓冲区安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章例编写按任意键结束程序的程序段…movah,0bhint21hincaljee
xit…Exit:4)检验键盘状态安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章显示器可以简单的分为单色显示器和彩色显示器。随着显示技术的发展,种类也更加丰富,常见的有阴极摄像管(CRT)、液晶显示器、等离子显示器等。显示器是通过显卡与主机相连。显示器的显示屏通常称
之为屏幕,现在常用的显示器有14"和17",常用的显示分辨率为800×600或1024×768等。常用的显示卡类型为VGA、SVGA、EVGA和TVGA等,显示卡上也都带有大量的显示存储器,能快速显示精美的图象。1.MDAMDA(Mon
ochromeDisplayAdapter)属于单色显示适配器,是IBM最早研制的视频显示适配器。2.CGA在MDA推出的同时,IBM也推出了彩色图形显示适配器──CGA(ColorGraphicsAdapter)。9.2显示器I/O安徽理工大学计算机科
学与技术系李敬兆《汇编语言》第9章3.EGA增强图形显示适配器──EGA(EnhancedGraphicsAdapter)是IBM公司推出的第二代图形显示适配器,它兼容了MDA和CGA的全部功能。4.VGA视频图形阵列显示适配器──VGA(VideoGraphicsArray)是I
BM公司推出的第三代图形显示适配器,它兼容了MDA、CGA和EGA的全部功能。5.XGAXGA(ExtendedGraphicsArray)是IBM公司继VGA之后推出的扩展图形显示适配器。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章
显示模式计算机系统中的显示器都有二种显示方式:文本显示方式和图形显示方式。在DOS操作系统环境下,其默认的显示方式为文本显示方式,而在Windows操作系统环境下,其显示方式是图形显示方式,其绝大多数操作界面是以图形界面
的窗口形式出现的。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章文本显示方式文本显示方式是指以字符为最小单位的显示方式,每个字符都是以矩形块形式显示的。在BIOSROM中存有多种不同大小的字符集,主要的显示字符集大小为:8×8(标准)、8×14和8×16等。在常用的文本
显示模式(模式3)下,屏幕被划分成25行,每行可显示80个字符,所以,每屏最多可显示2000(80×25)个字符。为了便于标识屏幕上的每个显示位置,我们就用其所在行和列来表示之,并规定:屏幕的左上角坐标为(0,0),右下角坐标为(24,79)。在显示字符时,用一个字节存储该字符的AS
CII码,用另一个字节存储的显示属性,即:显示颜色。在80×25的文本显示模式下,满屏可显示2000个字符,也就需要4000个字节来存储一屏的显示信息。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章图形显示方式图形显
示是目前最常用的一种显示方式,也是Windows操作系统的默认显示方式。在该显示方式下,我们可以看到优美的图象、VCD、浏览丰富多彩的网页等。图形显示的最小单位是象素,对每个象素可用不同的颜色来显示。所以,在显示缓冲区内记录的信息是屏幕各象素的显示颜色。由于各种图形显示模式所能显示的颜色
和象素是不同的,它决定了显示缓冲区的存储方式也是不同的。下面给出三个具体的图形显示模式及其存储方式,通过它们可看出各种显示模式在显示缓冲区存储方式上的明显差异。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章4色320×200图形
显示模式由于每个象素只能是四种颜色之一,而四种情况用2位二进制就可表示,所以,一个字节可表示4个象素的显示颜色,存储一行上的所有象素信息就需要80个字节。在具体存储过程中,它又把偶数行象素和奇数行分开来存储。偶数行和齐数行的象素总数各有32000个,也都
需要8000个字节来存储,并规定:偶数行象素从0B800:0000H开始存储,奇数行象素从0B800:2000H开始存储。该显示模式的存储形式如图所示。16色640×480图形显示模式640×480图形显示模式共有307200个象素,每个象素可选
用16种颜色,它需要用4位二进制来表示。该显示模式在存储显示信息时,把该4位分在四个位平面P1、P2、P3和P4上,所以,位平面Pi(i=1,2,3,4)共有307200个二进制位,即有38400个字节。其显示缓冲区的存储形式如图所示。256色320×
200图形显示模式表达256种不同颜色需要8位二进制,即一个字节。在该模式下,其显示缓冲区的存储方式是非常简单的,即:第一个字节存储第一个象素的颜色,第二个字节存储第二个象素的颜色,以此类推,所以,存储满屏象素所需要的字节数
为:320×200×1=64000。其显示缓冲区的存储方式如图所示。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章从上面三种不同图形显示模式的介绍,不难看出:各种显示模式在显示缓冲区存储方式上的明显差异,操作象素方法的难易程度相差也很大,所以,再次建议:程序员不要用直接操
作显示缓冲区的办法来达到改变显示象素的目的,最好是通过BIOS内的中断功能来实现相应的功能,这样,所编写的程序能很方便地适应不同的图形显示模式。9.2.1字符属性显示器的屏幕通常划分为行和列的二维系统,显示适配器就在行列组成的网格位置上显示字符。对应屏幕上的
每个字符位置,主存空间都有相应的存储单元与之对应,因此可说是显示屏幕式“存储器的映像”。对应显示屏幕上的每个字符,在存储器中由连续的两个字节表示,一个字节表示ASCII码,另一个字节保存字符的属性。安徽理工大学计算机科
学与技术系李敬兆《汇编语言》第9章属性值()属性值()显示效果0000000000无显示0000000101黑底白字,下划线0000011107黑底白字,正常显示000011110F黑底白字,高亮度0111
000070白底黑字,反相显示1000011187黑底白字,闪烁11110000F0白底黑字,反相闪烁单色显示的属性值76543210背景前景闪烁亮度1、单色字符属性安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章2、彩色字符显示位号76543210属性字节BLRGBIRGB闪
烁选择背景颜色前景颜色彩色字符显示属性字节安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章110棕RGB颜色000黑001蓝010绿011青100红101品红111白IRGB颜色IRGB颜色0000黑1000灰0001蓝1001浅蓝0010绿1010浅绿0011青1011浅青0100红110
0浅红0101品红1101浅品红0110棕1110黄0111白1111强度白背景颜色组合前景颜色组合安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章3.显示存储器对于所有的显示适配器,文本方式下显示字符的原理是一样的,所不同的是显存的起始地址不同,对于MDA,显存的起始地址为B000:000
0;对于CGA、EGA、VGA是B800:0000.每个字符的ASCII码和属性码字节存放于两个连续的字节中。图形显示方式下,其显示缓冲区段地址为0A000H。在25X80的文本显示方式下,屏幕可有2000个字符位置,因每个字符需要用
两个字节,显存容量需要多少?如果显存有16K,可保存几屏幕的数据?对CGA,EGA和VGA的80列显示方式,0页的起始地址是B800:0000,1页的起始地址是B800:1000,2页的起始地址为B800:2
000,3页的起始地址为B800:3000。如何计算一个字符在显存中的位置?安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章9.2.2BIOS显示中断调用10H中断调用为显示器中断,共有17种功能。下面列出几种主要功能的使用情况
。(1)设置显示方式(0号功能)入口参数:AH=0(功能号),AL=设置方式(0~7)。出口参数:无。(2)设置光标类型(1号功能)入口参数:AH=1(功能号),CH=光标开始行,CL=光标结束行。出口参数:无。根据CX给出光标的大小
。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章AL显示方式040×25黑白文本方式140×25彩色文本方式280×25黑白文本方式380×25彩色文本方式4320×200彩色图形方式5320×200黑白图形方式6640×200黑白图形方式78
0×25黑白文本方式(单色显示卡)安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章(3)设置光标位置(2号功能)入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。出口参数:无。根据DX确定了光标位置。(4)读当前光标位置(3号功能)入口参数;AH
=3(功能号),BH=页号。出口参数:DH=行号,DL=列号,CX=光标大小。(5)初始窗口或向上滚动(6号功能)入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号。DX=上滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当
滚动后,底部为空白输入行。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章(6)初始窗口或向下滚动(7号功能)入口参数:AH=7,AL=下滚行数,CX=下滚窗口左上角的行、列号。DX=下滚窗口右下角的行、列号。BH=空白
行的属性。出口参数:无。当滚动后,顶部为空白输入行。(7)读当前光标位置的字符与属性(8号功能)入口参数:AH=08H,BH=页号。出口参数:AL为读出的字符,AH为字符属性。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章(
8)在当前光标位置写字符和属性(9号功能)入口参数:AH=9,BH=页号,AL=字符的ASCII码,BL=字符属性,CX=写入字符重复次数。出口参数:无。(9)在当前光标位置写字符(10号功能)入口参数:AH=0AH,BH=页号
,AL=字符的ASCII码,CX=写入字符重复次数。出口参数:无。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章(10)显示字符串(13号功能)ES:BP=串地址CX=串长度DH,DL=起始行列BH=页号AL=0,BL=属性串:c
har,char…char光标返回到起始位置AL=1,BL=属性串:char,char…char光标跟随串移动AL=2串:char,char…char光标返回起始位置AL=3串:char,char…char光标跟随串移动安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9
章codesegmentassumecs:codestart:movch,5movcl,7movah,1int10hmovdh,5movdl,6movbh,0movah,2int10hmovah,4chint21hcodeendsendstart例置光标开始行为
5,结束行为7,并把它设置到第五行第六列设置光标位置(2号功能)入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。出口参数:无。根据DX确定了光标位置。设置光标类型(1号功能)入口参数:AH=1(功能号),CH=光标开始行,CL=光标结束行。出口参
数:无。根据CX给出光标的大小。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章例:编写清除全屏幕的程序clearsegmentassumecs:clearmovah,6moval,0movbh,7movch,0movcl,0movdh,24movdl,79int10hmovdx,2
movah,2int10hmovah,4chint21hclearendsend初始窗口或向上滚动(6号功能)入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号。DX=上滚窗口右下角的行、列号。B
H=空白行的属性。出口参数:无。当滚动后,底部为空白输入行。设置光标位置(2号功能)入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。出口参数:无。根据DX确定了光标位置。安徽理工大学计算机科学与技术系李敬兆《
汇编语言》第9章例清除左上角为(00)右下角为(24,39)的窗口,初始化为反相显示。该窗口相当于屏幕的左上角clearsegmentassumecs:clearmovah,7moval,0movbh,
70hmovch,0movcl,0movdh,24movdl,39int10hmovdx,2movah,2int10hmovah,4chint21hclearendsend设置光标位置(2号功能)入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。出口参数:无。根据
DX确定了光标位置。初始窗口或向下滚动(7号功能)入口参数:AH=7,AL=下滚行数,CX=下滚窗口左上角的行、列号。DX=下滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,顶部为空白输入行。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章例在屏幕中心显示小窗口d
atasegmentesc_keyequ1bhwin_ulcequ30win_ulrequ8win_lrcequ50win_lrrequ16win_widthequ20dataendscodesegmentassumecs:code,ds:datastart:movah,2movdh,w
in_lrrmovdl,win_ulcmovbh,0int10hmovcx,win_widthget_char:movah,1int21hcmpal,esc_keyjzexitloopget_charmovah,6moval,1movch,win_ulrmovcl
,win_ulcmovdh,win_lrrmovdl,win_lrcmovbh,7int10hjmpstartexit:movah,4chint21hcodeendsend设置光标位置(2号功能)入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。出口参数:无。根据DX确定了光标位
置。初始窗口或向上滚动(6号功能)入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号。DX=上滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,底部为空白输入行。安徽理工大学计算机科学与技术
系李敬兆《汇编语言》第9章例:在品红背景下,显示5个浅绿色闪烁的星号codesegmentassumecs:codestart:movah,9moval,'*'movbh,0movbl,0dahmovcx,5int1
0hmovah,4chint21hcodeendsendstart在当前光标位置写字符和属性(9号功能)入口参数:AH=9,BH=页号,AL=字符的ASCII码,BL=字符属性,CX=写入字符数。出口参
数:无。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章在屏幕上以红底蓝字显示字符串“WORLDSCENERY”datasegmentstringdb'worldscenear'lenequ$-stringdataendscodesegm
entassumecs:codestart:movah,0moval,3int10hmovbp,segstringmoves,bpmovbp,offsetstringmovcx,lenmovdx,0movbl,4
1hmoval,0movah,13hint10hmovah,4chint21hcodeendsendstart设置显示方式(0号功能)入口参数:AH=0(功能号),AL=设置方式(0~7)。出口参数:无。(10)显示字符
串(13号功能)ES:BP=串地址CX=串长度DH,DL=起始行列BH=页号AL=0,BL=属性串:char,char…char光标返回到起始位置AL=1,BL=属性串:char,char…char光标跟随移动AL=2串:char,char…char光标返回起始位置AL=3串:char,char…
char光标跟随移动安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章例用直接写屏方式在屏幕第5行、第10列以黄色(0EH)显示字符串"Hello"。解:在文本显示方式下,每行显示80个字符,每个字符占2个字节,所
以,显示一行需要160个字节。若在第m行、第n列位置显示字符,则该位置所对应存储单元的偏移量为:m×160+n×2。.MODELSMALL.DATAYellowEQU0EHMSG1DB"Welcome..."Co
untEQU$-MSG1.CODE.STARTUPMOVAX,0B800HMOVES,AX;彩色显示器的显示缓冲区段地址MOVDI,5IMULDI,160;5行所跳过的显示存储单元安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章MOVCX,10SHLCX,1;10列所跳过的显示存储单元AD
DDI,CX;第5行、第10列之前所跳过的所有显示单元MOVCX,CountLEASI,MSG1;CX:字符个数,SI:显示字符首地址MOVAH,Yellow;设置显示属性,即显示颜色.REPEATLODSB;取显示字符STOSW;向显示缓冲区设置显示字符和属性.UNTILC
XZ.EXIT0END安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章9.2.3DOS显示功能AH功能调用参数269显示一个字符(检CTRL_BREAK)显示一个字符(不检CTRL_BREAK)显示字符串DL=字符;光标跟随移动DL=字符;光标跟随移动DS:DX=串地址串必须以‘$“
结尾安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章•计算机与外设交换信息的过程中:–并行通信:多位数据通过多条数据线同时传送。–串行通信:多位数据通过同一条数据线按位传送。并行通信就是把一个字符的各数位用几条线同时进行传输。与串行通信(一位一
位传输)相比,在相同传输率下,并行通信的信息实际传输速度快、信息率高。但并行通信比串行通信所用电缆多,随着距离的增加,电缆的开销会成为突出的问题。所以,并行通信总是用在数据传输率要求较高,而传输距离较短的场合。9.3串行通信口I/O安徽理工大学计算机科学与
技术系李敬兆《汇编语言》第9章串行通信可以分为两种类型:同步通信、异步通信。异步通信一个字符一个字符地传输,每个字符一位一位地传输,传输一个字符时,以起始位开始,然后传输字符本身的各位,接着传输校验位,最后以停止位结束该字符的传输。一次传输的起始位、字符各位、校验位、停止位构成一组完整的信息,称
为帧(Frame)。帧与帧之间可有任意个空闲位。起始位之后时数据的最低位。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章在异步通信中,每个字符都要用起始位作为字符的开始和结束的标志,占用了传输的时间,所以在数据块传送时,为了提高效率,就要去掉这些标志,采
用同步通信。同步通信方式不给每个字符都加起始位和停止位,而把字符顺序的连接起来,组成一个数据块(首尾相连的数据串),把这样一个数据块称为一个信息桢。在数据的开始加上一个同步字符,而在信息的末尾加有一定的差错检验字符,其格式如下:同步通信同步字符字符1字符2
……字符n校验字符数据块安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章实现串行通信有专用的接口芯片,常用的有USART(通用同步/异步接收/发送器)——如Intel8251和UART(通用异步接收/发送器)——如Ins8250。
无论是UART,还是USART,均能实现数据发送时所需要的并串转换以及数据被CPU接收时所需要的串并转换。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章串行通信接口串行通信基础起始位最低位最高位奇偶位停止位数据位起始位逻辑01位数据位逻辑0或
15位、6位、7位、8位校验位逻辑0或11位或无停止位逻辑11位、1.5位或2位空闲位逻辑1任意数量异步通信的信息格式:安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章并行通信中,传输速率以每秒
钟传输多少字节来表示。而串行通信中,传输速率是用波特率来表示。所谓波特率是指单位时间内传送二进制数据的位数(简写为bps)。在计算机里,每秒传输多少位和波特率的含义是完全一致的。但是要注意,在最初的定义上(波特率是每秒传输离散信号的数目),每秒传输多少位和波特率是不相同的
。收、发双方的波特率必须一致。传输一位所需要的时间T叫“位周期”。波特率和传输率例:计算串行传输5页,每页80x25个字符总共需要多少位?假设每个字符8位,1位起始位和1位终止位。计算传输上述五页所需要的时间。数据传输率分别为2400b
ps和9600bps安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章RS232串行通信接口为了兼容各厂家生产的数据通信设备,1960年电子工业协会(ElectronicsIndustriesassociation,EIA)制定了RS-232接口
标准,以后又陆续发布了修订版本RS-232A,RS-232B和RS-232C。目前广泛应用于个人计算机上的RS-232串行接口,他安装于PC机内的通信适配器版上。PC机上的COM1、COM2接口,就是RS-232C接口,使用9针和25针连接器安徽理工大学计算机科学与技术系
李敬兆《汇编语言》第9章RS-232C采用负逻辑,且信号电平与TTL不兼容,规定逻辑“1”在-3V~-15V之间,逻辑“0”在+3V~+15V之间。RS-232C不是TTL电平的接口标准,当计算机与外设进行通信时,必须有相应的电平转换电路。通常采用的是MC
1488和MC1489电平转换器。串行接口芯片8250、8251均使用TTL电平,应使用电平转换电路与RS-232C连接器连接。MC1488:TTL电平→RS232电平(用于发送方)MC1489:TTL电平←RS232电平(用于接收方)安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章I
BMPC通信端口在微机系统中,可以有两个或多个端口连接到不同的外部设备上进行通信,如IBMPC和80X86兼容机可以连接4个通信端口,他们的编号为COM1—4(BIOS编号为COM0—3),但程序每次只能对其中一个端口进行存取。当微机加电自检时,由加电自检程序来测试通用异步收发器的4个COM端
口是否存在,如果微机系统中设置了COM端口,则设置的每个COM端口的I/O地址就写到BIOS数据区的0040:0000—0040:0007,每个端口地址占用两个字节。如果没有连接串行端口,BIOS数据
区的这几个单元的内容就成为0。可以用DEBUG查看URAT的端口地址。保存在BIOS数据区的COM端口地址称为基地址,因为每个COM端口都包括一组8位的寄存器,程序员可以通过这些寄存器进行编程,以控制数据按设定的格式发送或接收数据。BIOS数据区的COM端口地址是第一个寄存器
的地址。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章串行口功能调用1、DOS串行通信口功能使用DOS命令可以设置串行通信参数,如波特率,字长,校验位和终止位。格式:MODECOMm:b,p,d,s例如:MODECOM1:24,O,
8,1说明:波特率用最高两位来表示,P是校验位(N无,O奇,E偶。端口号的分配:BIOS位0-3,DOS为1-4安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章DOS串行通信口功能调用AH功能调用参数返回参数3从串行口读一个字符AL=输入的数据4
向串行口写一个字符DL=输出的数据安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章例:INPUT_CHARDB?:MOVAH,3INT21HMOVINPUT_CHAR,ALBUFFERDB‘HELLO’BUF_L
ENEQU$-BUFFER:MOVBX,SEGBUFFERMOVDS,BXMOVBX,OFFSETBUFFERMOVCX,BUF_LENNEXT:MOVDL,[BX]MOVAH,4INT21HLOOPNEXT安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章串行通信口B
IOS功能调用(int14h)AH功能调用参数返回参数0初始化串行口AL=初始化参数(书上图9.12)DX=通信口号(COM1=0,COM2=1etc)AH=通信口状态(书上图9.13)AL=调制解调器状态1向串行口写字符AL=所写字符DX=通信口号(
COM1=0,COM2=1etc)写成功:AH=0AL=字符。失败:(AH)7=1(AL)1-6=通信口状态2从串行口读字符DX=通信口号(COM1=0,COM2=1etc)写成功:AH=0AL=字符。失败:(AH)7=1(AL)1-6=通信口状态3取串行口状态DX=通信
口号(COM1=0,COM2=1etc)AH=通信口状态AL=调制解调器状态安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章例:两台PC机通过COM2端口进行串行数据通信,编写一个汇编语言程序,要求从一台PC机上
键盘上输入的字符传送到另一台PC机,若按下ESC键,则退出程序。在程序中,COM2端口初始化为4800BPS,8位数据,无校验,1位终止位;安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章.datame
ssagedb'serialcommunicationviacom2,4800,nop,1stop,8bitdata',0ah,0dh,’$’db'anykeypressissenttootherPC',0ah,0dhdb'pressesctoexit
','$'.codemainprocmovax,@datamovds,axmovah,09movbx,offsetmessageint21hmovah,0movdx,1moval,03chint14hagain:moval,01int16hjznextm
ovah,0int16h安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章cmpal,1bhjeexitmovah,1movdx,1int14hnext:movah,3movdx,1int14handah,1cm
pah,1jneagainmovah,2movdx,1int14hmovdl,almovah,2int21hjmpagainexit:movah,4chint21hmainendpend安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章
9.4磁盘文件管理9.4.1BIOS磁盘存取功能9.4.2DOS磁盘存取功能安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章9.4.2DOS磁盘存取功能DOS功能调用中断(INT21H)提供了两类磁盘文件管理功能,一类是FCB表控制方式,另一类是文件代号式存取方式。当用户需要打开或建立
一个文件时,必须提供文件标识符。文件标识符用ASCIIZ字符串表示。ASCIIZ字符串是指文件标识符的ASCII字符串后面再加1个“0”字符。文件标识符的字符串包括驱动器名、路径名和文件名。其格式为[d:][path]filen
ame[.exe]其中d为驱动器名,path为路径名,.exe为文件名后缀。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章1.建立文件(3CH)功能:按指定文件名建立文件。入口参数:(AH)=3CH,
DS:DX指向ASCIIZ字符串的段地址和偏移地址,(CX)=文件属性。出口参数:若操作成功,则CF=0,(AX)=文件代号;若操作失败,则CF=1,(AX)=错误代码。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章2.打开文件(3DH)功能:打
开由ASCIIZ串指定的文件。入口参数:(AH)=3DH,DS:DX指向ASCIIZ字符串的段地址和偏移地址,(AL)=存取方式代码(0:读文件,1:写文件,2:读、写文件)。出口参数:若操作成功,则CF=0,(AX)=文件代号;若操作失败,则CF=1,(AX)=错误代码。安徽理工大学计算机科学
与技术系李敬兆《汇编语言》第9章3.关闭文件(3EH)功能:关闭文件代号指定的文件。入口参数:(AH)=3EH,(BX)=文件代号。出口参数:若操作成功,则CF=0;若操作失败,则CF=1,(AX)=错误代码。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章4.读文件(3FH)功能:按文件
代号读取文件。入口参数:(AH)=3FH,(BX)=文件代号,(CX)=要读取的字节数;DS:DX指向接收数据缓冲区的段地址和偏移地址。出口参数:若操作成功,则CF=0,(AX)=实际读入字节数,(AX)=0,文件结束;若操作失败,则CF=1,(AX)=错误代码。安徽理工大学计算机
科学与技术系李敬兆《汇编语言》第9章5.写文件(40H)功能:按文件代号写文件。入口参数:(AH)=40H,(BX)=文件代号,(CX)=要写入的字节数;DS:DX指向存放写入信息数据缓冲区的段地址和偏移地址。出口参数:若操作成功
,则CF=0,(AX)=写入字节数;若操作失败,则CF=1,(AX)=错误代码。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章6.移动文件指针(42H)功能:移动由文件代号标志的文件读写指针的位置入口参数:在bx预置文件代号,在cx:dx双字中预置移动位移量,在al中预置移动方式
移动方式:00h移动后文件指针值=0+移动位移量01h移动后文件指针值=当前文件指针值+移动位移量02h移动后文件指针值=文件尾值+移动位移量出口参数:CF=0表示移动成功,此时CX:DX双字中返回移动后文件指针值;CF=1表示
移动失败,此时AX中返回值为1表示移动方式无效,为6表示无效的文件代号。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章7.取/置文件属性(43H)功能:按文件代号写文件。入口参数:(AH)=43H,DS:DX指向ASCIIZ串的段地址和偏移地址。(AL)=0,
取文件属性,(AL)=1,置文件属性;置文件属性时,(CX)=新文件属性(低字节)。出口参数:若操作成功,则CF=0,若为取属性,(CX)=文件属性;若操作失败,则CF=1,(AX)=错误代码。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章datasegmentfnamedb'
c:\masm\file1.dat',0datdb80hdup(0)dat1db80hdup(0)dataendscodesegmentassumecs:code,ds:data,es:datastart:movax,datamovds,axmoves,axmovdx,offsetf
namemovcx,0movah,3chint21hmovsi,axnew:movbx,0movcx,20hera:movah,01hint21hmovdat[bx],alincbxlooperamovdat[bx],0a
hmovdx,offsetdatmovcx,20hmovbx,simovah,40hint21hmovbx,simovah,3ehint21hmovah,4chint21hcodeendsendstart例:从键盘输入20个字符存放到利用扩充文件管理方式建立的文件中。安徽
理工大学计算机科学与技术系李敬兆《汇编语言》第9章datasegmentfnamedb'c:\masm\file1.dat',0fname1db'c:\masm\file2.dat',0dtadb80hdup(0
)dta1db80hdup(0)dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmoves,axmovdx,offsetfnamemoval,0movah,3dhint21hmovsi,axm
ovbx,simovdx,offsetdta1movcx,10hmovah,3fhint21hmovdi,axmovah,3ehint21hmovdx,offsetfname1movcx,0movah,3chint21h
movsi,axmovdx,offsetdta1movcx,dimovbx,simovah,40hint21hmovbx,simovah,3ehint21hmovah,4chint21hcodeendsendstart例:从文件file1中读取10个字符到file2文件中安徽理工大学计
算机科学与技术系李敬兆《汇编语言》第9章datasegmentfnamedb'c:\masm\file1.dat',0data1db8,?,8dup(?)dat1db3000hdup(0)srcdw0ahmess1db'readingfromn1=?',
10,13,'$'mess2db'longn2=?',10,13,'$'mess3db10,13,'$'dataendsstacksegmentstackdw100dup(0)toplabelwordstackendscodesegment
mainprocfarassumecs:code,ds:data,ss:stackstart:pushdssubax,axpushaxmovax,datamovds,axmoves,axmovax,stackmovss,axmovdx,offsetmess1mova
h,09hint21hcallinputdecdimovsi,dimovdx,offsetmess3movah,9int21hmovdx,offsetmess2movah,9int21hcallinputmovdx,offsetmess3movah,09hint21hmovdx,
offsetfnamemoval,0movah,3dhint21hmovbx,axmovcx,0movdx,simoval,0movah,42hint21h例:从文件FILE1.DAT中读文件从N1起,长度为N2的字符串,并在屏幕中显示。N1N2为十进制数。安徽理工大学
计算机科学与技术系李敬兆《汇编语言》第9章movdx,offsetdat1movcx,dimovah,3fhint21hmovdi,axmovah,3ehint21hmovdx,offsetmess3movah,09hint21
hmovdx,offsetdat1moval,'$'movbx,dimovdat1[bx],almovdx,offsetdat1movah,9int21hmovah,4chint21hmainendpinputprocnearmovdx,offsetdata1movah,0a
hint21hmovbx,1moval,data1[bx]movah,0movcx,axmovbx,2movdi,0loop1:moval,data1[bx]subal,30hmovah,0pushaxmovdx,offsetmess3mova
h,9int21hmovax,dimulsrcmovdi,axpopaxaddax,dimovdi,axincbxlooploop1retinputendpcodeendsendstart安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章9.4.1BIOS磁盘存
取功能BIOS磁盘操作INT13H处理的记录都是一个扇区的大小,都是以实际的磁道号和扇区号寻址的。读、写和检查磁盘文件之前,都要把下列寄存器初始化:AH:子功能号(读、写、检查或格式化)。AL:扇区数。CH:柱面/磁道号(0为起始号)。CL:起始的扇区号
(1为起始号)。DH:磁头/盘面号(对软盘是0或1)。DL:驱动器号(软盘:0=驱动器A,1=驱动器B,…,硬盘:80H=驱动器1,81H=驱动器2,…。)ES:BX:数据区中I/O缓冲区的地址。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章1.0
号功能功能:复位磁盘系统。入口参数:(AH)=0。出口参数:无。这个操作执行对磁盘控制器的硬件复位。如果在其他磁盘操作之后调用这个功能,则返回一系列错误。2.1号功能功能:读磁盘状态。入口参数:(AH)=1。出口参数:(AL)中返回状态字节。安徽理
工大学计算机科学与技术系李敬兆《汇编语言》第9章3.2号功能功能:从指定磁盘的指定位置读取数据。入口参数:(AH)=2(AL)=扇区数,(CH),(CL)=磁道号,扇区号(DH),(DL)=磁头号,驱动器号(ES:BX):数据缓冲区地址出
口参数:读成功,(AH)=0,(AL)=读出的扇区数;读失败,(AH)=出错代码。4.3号功能功能:向指定磁盘的指定位置写数据。入口参数:(AH)=3(AL)=扇区数,(CH),(CL)=磁道号,扇区号(DH),(DL)=磁头号,驱动器号(ES:BX):数据缓冲区地
址出口参数:写成功,(AH)=0,(AL)=写入的扇区数;写失败,(AH)=出错代码。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章5.4号功能功能:检验磁盘扇区。入口参数:(AH)=4(AL)=扇区数,(CH),(CL)=磁道号,扇区号(DH),(DL)=磁
头号,驱动器号出口参数:检查成功,(AH)=0,(AL)=检验的扇区数;检查失败,(AH)=出错代码。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章本章小结对外设进行控制,使用其完成输入/输出工作。汇编语言能直接
控制硬件工作,因此成为编写高性能输入/输出程序最有效的程序设计语言。本章在中断调用指令的基础上详细讲解了BIOS中断调用和DOS系统功能调用的使用方法。分别介绍了键盘、显示器、磁盘文件的输入/输出方法,以及两种调用的区别,
并举例说明了常见的输入/输出程序的编写方法。在今后如果用到中断调用的其他功能,可以查看有关资料。