《BIOS和DOS中断》由会员分享,可在线阅读,更多相关《BIOS和DOS中断(89页珍藏版)》请在金锄头文库上搜索。
1、BIOSBIOS和和DOSDOS中断调用程序设计中断调用程序设计 第第9章章BIOS中断和中断和DOS中断中断 在在在在存存存存储储储储器器器器系系系系统统统统中中中中,内内内内存存存存从从从从0FE000H0FE000H0FE000H0FE000H高高高高端端端端8K8K8K8K的的的的ROMROMROMROM中中中中存存存存放放放放有有有有基基基基本本本本输输输输入入入入输输输输出出出出系系系系统统统统(Basic Basic Basic Basic Input/Output Input/Output Input/Output Input/Output SystemSystemSystem
2、System,BIOSBIOSBIOSBIOS)例例例例行行行行程程程程序序序序。BIOSBIOSBIOSBIOS给给给给PCPCPCPC系系系系列列列列的的的的不不不不同同同同微微微微处处处处理理理理器器器器提提提提供供供供了了了了兼兼兼兼容容容容的的的的系系系系统统统统加加加加电电电电自自自自检检检检、引引引引导导导导装装装装入入入入、主主主主要要要要I/OI/OI/OI/O设设设设备备备备的的的的处处处处理理理理程程程程序序序序以以以以及及及及接接接接口口口口控控控控制制制制等等等等功功功功能能能能模模模模块块块块来来来来处处处处理理理理所有的系统中断所有的系统中断所有的系统中断所有的系
3、统中断。 使使使使用用用用BIOSBIOSBIOSBIOS功功功功能能能能调调调调用用用用,给给给给程程程程序序序序员员员员编编编编程程程程带带带带来来来来极极极极大大大大方方方方便便便便。程程程程序序序序员员员员不不不不必必必必了了了了解解解解硬硬硬硬件件件件的的的的具具具具体体体体细细细细节节节节,可可可可直直直直接接接接使使使使用用用用指指指指令令令令设设设设置置置置参参参参数数数数,并并并并中中中中断断断断调调调调用用用用BIOSBIOSBIOSBIOS例例例例行行行行程程程程序序序序,所所所所以以以以利利利利用用用用BIOSBIOSBIOSBIOS功功功功能调用编写的程序简洁,可读性
4、好,而且易于移植能调用编写的程序简洁,可读性好,而且易于移植能调用编写的程序简洁,可读性好,而且易于移植能调用编写的程序简洁,可读性好,而且易于移植 磁盘操作系统磁盘操作系统磁盘操作系统磁盘操作系统(Disk Operating SystemDisk Operating SystemDisk Operating SystemDisk Operating System)是)是)是)是PCPCPCPC机上最重要的操作系统,它是由软盘或硬盘提供机上最重要的操作系统,它是由软盘或硬盘提供机上最重要的操作系统,它是由软盘或硬盘提供机上最重要的操作系统,它是由软盘或硬盘提供的。它的两个的。它的两个的。它的
5、两个的。它的两个DOSDOSDOSDOS模块模块模块模块IBMBIO.COMIBMBIO.COMIBMBIO.COMIBMBIO.COM和和和和IBMDOS.COMIBMDOS.COMIBMDOS.COMIBMDOS.COM使使使使BIOSBIOSBIOSBIOS使用起来更方便。因为使用起来更方便。因为使用起来更方便。因为使用起来更方便。因为DOSDOSDOSDOS模块提供了更多更必模块提供了更多更必模块提供了更多更必模块提供了更多更必要的测试,要的测试,要的测试,要的测试,使用使用使用使用DOSDOSDOSDOS操作比使用相应功能的操作比使用相应功能的操作比使用相应功能的操作比使用相应功能的
6、BIOSBIOSBIOSBIOS操作操作操作操作更简易,而且更简易,而且更简易,而且更简易,而且DOSDOSDOSDOS对硬件的依赖性更少些对硬件的依赖性更少些对硬件的依赖性更少些对硬件的依赖性更少些。 DOSDOSDOSDOS模块和模块和模块和模块和ROM BIOSROM BIOSROM BIOSROM BIOS的关系如下图所示。的关系如下图所示。的关系如下图所示。的关系如下图所示。DOS中断和中断和BIOS中断使用方法中断使用方法 DOSDOSDOSDOS功功功功能能能能调调调调用用用用与与与与BIOSBIOSBIOSBIOS功功功功能能能能都都都都通通通通过过过过软软软软件件件件中中中中
7、断断断断调调调调用用用用。在在在在中中中中断断断断调调调调用用用用前前前前需需需需要要要要把把把把功功功功能能能能号号号号装装装装入入入入AHAHAHAH寄寄寄寄存存存存器器器器,把把把把子子子子功功功功能能能能号号号号装装装装入入入入ALALALAL寄寄寄寄存存存存器器器器,除除除除此此此此之之之之外外外外,还还还还需需需需要要要要在在在在CPUCPUCPUCPU的的的的寄寄寄寄存存存存器器器器中中中中提提提提供供供供专专专专门门门门的的的的调调调调用用用用参参参参数数数数。一一一一般般般般来来来来说说说说,调调调调用用用用DOSDOSDOSDOS或或或或BIOSBIOSBIOSBIOS功能
8、时,有以下几个步骤:功能时,有以下几个步骤:功能时,有以下几个步骤:功能时,有以下几个步骤:(1 1 1 1)将调用参数装入指定的寄存器。)将调用参数装入指定的寄存器。)将调用参数装入指定的寄存器。)将调用参数装入指定的寄存器。(2 2 2 2)如需功能调用号,把它装入)如需功能调用号,把它装入)如需功能调用号,把它装入)如需功能调用号,把它装入AHAHAHAH。(3 3 3 3)如需子功能调用号,把它装入)如需子功能调用号,把它装入)如需子功能调用号,把它装入)如需子功能调用号,把它装入ALALALAL。(4 4 4 4)按中断号调用)按中断号调用)按中断号调用)按中断号调用DOSDOSDO
9、SDOS或或或或BIOSBIOSBIOSBIOS。(5 5 5 5)检查返回参数是否正确。)检查返回参数是否正确。)检查返回参数是否正确。)检查返回参数是否正确。表表表表9.1 BIOS9.1 BIOS9.1 BIOS9.1 BIOS中断类型中断类型中断类型中断类型 地址(地址(地址(地址(HexHex) 类型码类型码类型码类型码 中断名称中断名称中断名称中断名称 03 0 03 0 除法错除法错除法错除法错 47 1 47 1 单步单步单步单步 8B 2 8B 2 非屏蔽非屏蔽非屏蔽非屏蔽 CF CF CF CF 3 3 断点断点断点断点 1013 4 1013 4 溢出溢出溢出溢出 141
10、7 5 1417 5 打印屏幕打印屏幕打印屏幕打印屏幕 181B 6 181B 6 保留保留保留保留 1D1F 7 1D1F 7 保留保留保留保留 2023 8 2023 8 定时器定时器定时器定时器 2427 9 2427 9 键盘键盘键盘键盘 282B A 282B A 保留的硬中断保留的硬中断保留的硬中断保留的硬中断 2C2F B 2C2F B 异步通信(异步通信(异步通信(异步通信(COM2COM2) 3033 C 3033 C 异步通信(异步通信(异步通信(异步通信(COM1COM1) 3437 D 3437 D 硬盘硬盘硬盘硬盘 383B E 383B E 软盘软盘软盘软盘 3C3
11、F F 3C3F F 并行打印机并行打印机并行打印机并行打印机地址(地址(地址(地址(HexHex) 类型码类型码类型码类型码 中断名称中断名称中断名称中断名称4043 10 4043 10 视频显示视频显示视频显示视频显示I/OI/O调用调用调用调用4447 11 4447 11 设备检测调用设备检测调用设备检测调用设备检测调用484B 12 484B 12 存储器容量检测存储器容量检测存储器容量检测存储器容量检测4C4F 13 4C4F 13 软软软软/ /硬盘硬盘硬盘硬盘I/OI/O调用调用调用调用5053 14 5053 14 通信通信通信通信I/OI/O调用调用调用调用5457 15
12、 5457 15 盒式磁带盒式磁带盒式磁带盒式磁带I/OI/O调用调用调用调用585B 16 585B 16 键盘键盘键盘键盘I/OI/O调用调用调用调用5C5F 17 5C5F 17 打印机打印机打印机打印机I/OI/O调用调用调用调用6063 18 ROM BASIC6063 18 ROM BASIC6467 19 6467 19 引导程序入口引导程序入口引导程序入口引导程序入口686B 1A 686B 1A 时间调用时间调用时间调用时间调用6C6F 1B 6C6F 1B 键盘键盘键盘键盘CTRL-BREAKCTRL-BREAK控制控制控制控制7073 1C 7073 1C 定时器报时定时
13、器报时定时器报时定时器报时7477 1D 7477 1D 显示器参数表显示器参数表显示器参数表显示器参数表787B 1E 787B 1E 软盘参数表软盘参数表软盘参数表软盘参数表7C7F 1F 7C7F 1F 字符点阵结构参数表字符点阵结构参数表字符点阵结构参数表字符点阵结构参数表地址(地址(地址(地址(HexHex) 类型码类型码类型码类型码 中断名称中断名称中断名称中断名称8083 20 8083 20 程序结束,返回程序结束,返回程序结束,返回程序结束,返回DOSDOS8487 21 DOS8487 21 DOS系统功能调用系统功能调用系统功能调用系统功能调用888B 22 888B 2
14、2 程序结束地址程序结束地址程序结束地址程序结束地址8C8F 23 CTRL_BREAK8C8F 23 CTRL_BREAK退出地址退出地址退出地址退出地址9093 24 9093 24 标准错误出口地址标准错误出口地址标准错误出口地址标准错误出口地址9497 25 9497 25 绝对磁盘读绝对磁盘读绝对磁盘读绝对磁盘读989B 26 989B 26 绝对磁盘写绝对磁盘写绝对磁盘写绝对磁盘写9C9F 27 9C9F 27 程序结束,驻留内存程序结束,驻留内存程序结束,驻留内存程序结束,驻留内存A0FF 283F A0FF 283F 为为为为DOSDOS保留保留保留保留10017F 405F
15、10017F 405F 保留保留保留保留(扩充(扩充BIOS中断向量)中断向量)18019F 6067 为用户软中断保留为用户软中断保留1A01FF 687F 不用(其中不用(其中70777077为为I/OI/O设备中断向量)设备中断向量)200217 8085 BASIC使用使用2183C3 86F0 BASIC运行时,用于解释运行时,用于解释3C43FF F1FF 未用未用表表表表9.2 DOS9.2 DOS9.2 DOS9.2 DOS中断类型中断类型中断类型中断类型9.1 键盘键盘I/O 9.1.1 ASCII与扫描码与扫描码 9.1.2 BIOS键盘中断键盘中断 9.1.3 DOS中断
16、调用中断调用9.1.1 ASCII与扫描码与扫描码 键键盘盘是是计计算算机机最最基基本本的的一一种种输输入入设设备备,用用来来输输入入信信息息,以以达达到到人人机机对对话话的的目目的的。键键盘主要由盘主要由3 3种基本类型的键组成:种基本类型的键组成:(1 1)字符数字键字符数字键:(2 2)扩展功能键扩展功能键:如:如HomeHome、EndEnd、BackspaceBackspace、DeleteDelete、InsertInsert、PgUpPgUp、PgDownPgDown以及功能键以及功能键F1F1F10F10(3 3)和其他键组合使用的控制键和其他键组合使用的控制键:如:如AltA
17、lt,CtrlCtrl,ShiftShift等等 键盘和主机通过键盘和主机通过5 5芯电缆相连,这芯电缆相连,这5 5根线分根线分别是别是电源线、地线、复位线以及键盘数据线和电源线、地线、复位线以及键盘数据线和键盘时钟线键盘时钟线。PCPC机系列的键盘触点电路按机系列的键盘触点电路按1616行行88列的矩阵列的矩阵来排列,用单片机来排列,用单片机Intel8048Intel8048来控来控制对键盘的扫描。制对键盘的扫描。按键的识别采用行列扫描法按键的识别采用行列扫描法,即根据对行线和列线的扫描结果来确定闭合键即根据对行线和列线的扫描结果来确定闭合键的位置,的位置,这个位置值称为按键的扫描码这个
18、位置值称为按键的扫描码,通过,通过数据线将数据线将8 8位扫描码送往主机。位扫描码送往主机。当在键盘上当在键盘上“按下按下”或或“放开放开”一个键时,如果键盘中断是一个键时,如果键盘中断是允许的(允许的(21H21H端口的第一位等于端口的第一位等于0 0),就会产生),就会产生一个一个类型类型9 9的中断的中断,并转入到,并转入到BIOSBIOS的键盘中断的键盘中断处理程序。处理程序。 该处理程序从该处理程序从该处理程序从该处理程序从8255825582558255可编程外围接口芯片的输入端口读取一个可编程外围接口芯片的输入端口读取一个可编程外围接口芯片的输入端口读取一个可编程外围接口芯片的输
19、入端口读取一个字节,这个字节的低字节,这个字节的低字节,这个字节的低字节,这个字节的低7 7 7 7位是按键的扫描码。最高位为位是按键的扫描码。最高位为位是按键的扫描码。最高位为位是按键的扫描码。最高位为0 0 0 0或者为或者为或者为或者为1 1 1 1,分别表示键是分别表示键是分别表示键是分别表示键是“按下按下按下按下”状态还是状态还是状态还是状态还是“放开放开放开放开”状态。状态。状态。状态。按下时,取得的按下时,取得的按下时,取得的按下时,取得的字节称为字节称为字节称为字节称为通码通码通码通码,放开时取得的字节称为放开时取得的字节称为放开时取得的字节称为放开时取得的字节称为断码断码断码
20、断码。 如如如如: : : : 按下按下按下按下ESCESCESCESC键取得的通码为键取得的通码为键取得的通码为键取得的通码为01H01H01H01H(0 0 0 00000001000000100000010000001B B B B),),),), 放开放开放开放开ESCESCESCESC键时会产生一个断码键时会产生一个断码键时会产生一个断码键时会产生一个断码81H81H81H81H(1 1 1 10000001000000100000010000001B B B B)。)。)。)。 BIOS BIOS BIOS BIOS键盘处理程序将取得的扫描码转换成相应的键盘处理程序将取得的扫描码转
21、换成相应的键盘处理程序将取得的扫描码转换成相应的键盘处理程序将取得的扫描码转换成相应的字符码,字符码,字符码,字符码,大部分的字符码是一个标准的大部分的字符码是一个标准的大部分的字符码是一个标准的大部分的字符码是一个标准的ASCIIASCIIASCIIASCII码码码码;没有相应;没有相应;没有相应;没有相应ASCIIASCIIASCIIASCII的键,如的键,如的键,如的键,如AltAltAltAlt和功能键(和功能键(和功能键(和功能键(F1F1F1F1F10F10F10F10),字符码为),字符码为),字符码为),字符码为0 0 0 0;还有一些非;还有一些非;还有一些非;还有一些非AS
22、CIIASCIIASCIIASCII码键产码键产码键产码键产生一个指定的操作。生一个指定的操作。生一个指定的操作。生一个指定的操作。键盘缓冲区键盘缓冲区键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下: 键盘缓冲区是一个环形队列,键盘缓冲区是一个环形队列,键盘缓冲区是一个环形队列,键盘缓冲区是一个环形队列,Buff_HeadBuff_HeadBuff_HeadBuff_Head和和和和Buff_HeadBuff_HeadBuff
23、_HeadBuff_Head是缓冲区是缓冲区是缓冲区是缓冲区的两个指针,当缓冲区满时,系统将不再接受按键信息,而会发出的两个指针,当缓冲区满时,系统将不再接受按键信息,而会发出的两个指针,当缓冲区满时,系统将不再接受按键信息,而会发出的两个指针,当缓冲区满时,系统将不再接受按键信息,而会发出“嘟嘟嘟嘟”的声音,以示要暂缓按键。当的声音,以示要暂缓按键。当的声音,以示要暂缓按键。当的声音,以示要暂缓按键。当KBHeadKBHeadKBHeadKBHeadKBTailKBTailKBTailKBTail时,表示无键时,表示无键时,表示无键时,表示无键盘输入。盘输入。盘输入。盘输入。Buff_Hea
24、d DWBuff_Head DW? ? ; ;其内存地址为其内存地址为其内存地址为其内存地址为0000:041AH0000:041AH,缓冲区头指针,缓冲区头指针,缓冲区头指针,缓冲区头指针Buff_TailBuff_Tail DW DW? ? ; ;其内存地址为其内存地址为其内存地址为其内存地址为0000:041CH0000:041CH,缓冲区尾指针,缓冲区尾指针,缓冲区尾指针,缓冲区尾指针KBBuffKBBuff DW DW16 DUP(?) ;16 DUP(?) ;其内存地址为其内存地址为其内存地址为其内存地址为0000:041EH0000:041EH,该缓冲区,该缓冲区,该缓冲区,该缓
25、冲区 的缺省长度为的缺省长度为的缺省长度为的缺省长度为1616个字个字个字个字9.1.2 BIOS键盘中断键盘中断 类型类型类型类型 16H 16H 16H 16H 的中断提供了基本的键盘操作,它的中的中断提供了基本的键盘操作,它的中的中断提供了基本的键盘操作,它的中的中断提供了基本的键盘操作,它的中断处理程序包括断处理程序包括断处理程序包括断处理程序包括3 3 3 3个不同的功能,分别根据个不同的功能,分别根据个不同的功能,分别根据个不同的功能,分别根据AHAHAHAH寄存器中寄存器中寄存器中寄存器中的子功能号来确定。的子功能号来确定。的子功能号来确定。的子功能号来确定。 (1 1 1 1)
26、AH=0 AH=0 AH=0 AH=0 本功能为本功能为本功能为本功能为从键盘读字符到从键盘读字符到从键盘读字符到从键盘读字符到ALALALAL寄存器中寄存器中寄存器中寄存器中。(AL=(AL=(AL=(AL=字符字符字符字符ASCIIASCIIASCIIASCII码,码,码,码,AH=AH=AH=AH=扫描码)扫描码)扫描码)扫描码) (2 2 2 2)AH=1 AH=1 AH=1 AH=1 本功能为本功能为本功能为本功能为读键盘缓冲区字符到读键盘缓冲区字符到读键盘缓冲区字符到读键盘缓冲区字符到ALALALAL寄存器中,寄存器中,寄存器中,寄存器中, 并并并并置置置置ZFZFZFZF标标标标
27、志志志志位位位位。( ( ( (若若若若ZF=0ZF=0ZF=0ZF=0,则则则则AL=AL=AL=AL=字字字字符符符符码码码码,AH=AH=AH=AH=扫扫扫扫描描描描码码码码, ZF=1ZF=1ZF=1ZF=1,缓冲区空),缓冲区空),缓冲区空),缓冲区空) (3 3 3 3)AH=2 AH=2 AH=2 AH=2 本本本本功功功功能能能能为为为为读读读读取取取取特特特特殊殊殊殊功功功功能能能能键键键键的的的的状状状状态态态态。(AL=(AL=(AL=(AL=键键键键盘盘盘盘状态字节)状态字节)状态字节)状态字节) mov ah, 0 int 16h mov BX,AX 从键盘读字符从键
28、盘读字符从键盘读字符从键盘读字符在计算机键盘上除了可输入各种字符在计算机键盘上除了可输入各种字符在计算机键盘上除了可输入各种字符在计算机键盘上除了可输入各种字符( ( ( (字母、数字字母、数字字母、数字字母、数字和符号等和符号等和符号等和符号等) ) ) )的按键之外,还有一些的按键之外,还有一些的按键之外,还有一些的按键之外,还有一些功能键功能键功能键功能键( ( ( (如:如:如:如:F1F1F1F1、F2F2F2F2、等等等等) ) ) )、控制键控制键控制键控制键( ( ( (如:如:如:如:CtrlCtrlCtrlCtrl、AltAltAltAlt、ShiftShiftShiftS
29、hift等等等等) ) ) )、双态键双态键双态键双态键( ( ( (如:如:如:如:Num LockNum LockNum LockNum Lock、Caps LockCaps LockCaps LockCaps Lock等等等等) ) ) )和和和和特殊请求特殊请求特殊请求特殊请求键键键键( ( ( (如:如:如:如:Print ScreenPrint ScreenPrint ScreenPrint Screen、Scroll LockScroll LockScroll LockScroll Lock等等等等) ) ) )。 键盘中的控制键和双态键是非打印按键,它们键盘中的控制键和双态键是
30、非打印按键,它们键盘中的控制键和双态键是非打印按键,它们键盘中的控制键和双态键是非打印按键,它们是起控制或转换作用的。是起控制或转换作用的。是起控制或转换作用的。是起控制或转换作用的。当使用者按下控制键或双当使用者按下控制键或双当使用者按下控制键或双当使用者按下控制键或双态键时,系统要记住其所按下的按键。态键时,系统要记住其所按下的按键。态键时,系统要记住其所按下的按键。态键时,系统要记住其所按下的按键。INT 16HINT 16HINT 16HINT 16H的的的的AH=2AH=2AH=2AH=2的功能可以把表示这些键盘状态的字节(的功能可以把表示这些键盘状态的字节(的功能可以把表示这些键盘
31、状态的字节(的功能可以把表示这些键盘状态的字节(称为称为称为称为键盘状态字节)回送的键盘状态字节)回送的键盘状态字节)回送的键盘状态字节)回送的ALALALAL寄存器。状态字节如图:寄存器。状态字节如图:寄存器。状态字节如图:寄存器。状态字节如图:键盘状态字节键盘状态字节键盘状态字节键盘状态字节1按下右移键按下右移键Right Shift1按下左移键按下左移键Left Shiftv1按下按下Ctrl1按下按下Alt1Scrll Lock状态已改变状态已改变1Num Lock状态已改变状态已改变1Caps Lock状态已改变状态已改变1Insert状态已改变状态已改变键盘状态字节键盘状态字节Ag
32、ain: mov ah, 2 int 16h mov bx,ax call binihex mov dl,0dh mov ah,2 int 21h jmp again例例例例9.1 9.1 9.1 9.1 读取键盘状态字,并以十六进制显示读取键盘状态字,并以十六进制显示读取键盘状态字,并以十六进制显示读取键盘状态字,并以十六进制显示9.1.3 DOS键盘功能调用(键盘功能调用(INT 21H)无无 get_key:mov ah, 1get_key:mov ah, 1 int 21h int 21h cmp al , y cmp al , y je yes je yes cmp al, n cm
33、p al, n je no je no jne get_key jne get_key1 1)单字符输入)单字符输入)单字符输入)单字符输入例例例例9.2 9.2 接收键盘输入并对其进行测试。接收键盘输入并对其进行测试。接收键盘输入并对其进行测试。接收键盘输入并对其进行测试。 wait_here: mov ah, 7wait_here: mov ah, 7 int 21h int 21h cmp al, 0dh cmp al, 0dh jne wait_here jne wait_here例例例例9.3 9.3 检测键盘输入的字符是否是回车键。检测键盘输入的字符是否是回车键。检测键盘输入的字符
34、是否是回车键。检测键盘输入的字符是否是回车键。 mov ah,7 mov ah,7 mov ah,7 mov ah,7 int 21h int 21h int 21h int 21h cmp al,0 cmp al,0 cmp al,0 cmp al,0 je get_ec je get_ec je get_ec je get_ec jmp error jmp error jmp error jmp errorget_ec:get_ec:get_ec:get_ec: mov ah,7 mov ah,7 mov ah,7 mov ah,7 int 21h int 21h int 21h int
35、21h cmp al,3bh cmp al,3bh cmp al,3bh cmp al,3bh;F1;F1;F1;F1 je option1 je option1 je option1 je option1 cmp al,3ch cmp al,3ch cmp al,3ch cmp al,3ch;F2;F2;F2;F2 je option2 je option2 je option2 je option2 jmp erroe jmp erroe jmp erroe jmp erroe 如果程序要求能接收功能键如果程序要求能接收功能键如果程序要求能接收功能键如果程序要求能接收功能键或数字组合键必须
36、进行两次或数字组合键必须进行两次或数字组合键必须进行两次或数字组合键必须进行两次DOSDOS功能调用功能调用功能调用功能调用: :第一次回送第一次回送第一次回送第一次回送0000第二次回送扫描码第二次回送扫描码第二次回送扫描码第二次回送扫描码例例例例9.4 9.4 检测键盘输入的功能键检测键盘输入的功能键检测键盘输入的功能键检测键盘输入的功能键。data segmentdata segmentdata segmentdata segment smax db 21 smax db 21 smax db 21 smax db 21 sact db ? sact db ? sact db ? sac
37、t db ? stri db 21 dup(?) stri db 21 dup(?) stri db 21 dup(?) stri db 21 dup(?)data endsdata endsdata endsdata endscode segmentcode segmentcode segmentcode segment assume cs:code,ds:data assume cs:code,ds:data assume cs:code,ds:data assume cs:code,ds:data Start:mov ax,dataStart:mov ax,dataStart:mov a
38、x,dataStart:mov ax,data mov ds,ax mov ds,ax mov ds,ax mov ds,ax lea dx, stri lea dx, stri lea dx, stri lea dx, stri mov ah,0ahmov ah,0ahmov ah,0ahmov ah,0ah int 21h int 21h int 21h int 21h mov ah,4ch mov ah,4ch mov ah,4ch mov ah,4ch int 21h int 21h int 21h int 21h code ends code ends code ends code
39、endsEnd startEnd startEnd startEnd start(1) smax db 21(1) smax db 21(1) smax db 21(1) smax db 21 sact db ? sact db ? sact db ? sact db ? stri db 21 dup(?) stri db 21 dup(?) stri db 21 dup(?) stri db 21 dup(?)(2) smax db 21(2) smax db 21(2) smax db 21(2) smax db 21 db ? db ? db ? db ? db 21 dup(?) db
40、 21 dup(?) db 21 dup(?) db 21 dup(?)(3)smax db 21, ?, 21 dup(?)(3)smax db 21, ?, 21 dup(?)(3)smax db 21, ?, 21 dup(?)(3)smax db 21, ?, 21 dup(?)例例例例9.5 9.5 输入字符串程序输入字符串程序输入字符串程序输入字符串程序2 2)输入字符串)输入字符串)输入字符串)输入字符串Int 21Int 21的功能的功能的功能的功能0ch0ch能清除键盘缓冲区,然后执行在能清除键盘缓冲区,然后执行在能清除键盘缓冲区,然后执行在能清除键盘缓冲区,然后执行在ALA
41、L中指定的中指定的中指定的中指定的功能。功能。功能。功能。ALAL中指定的功能可以是中指定的功能可以是中指定的功能可以是中指定的功能可以是1 1,6 6,7 7,8 8或或或或0AH0AH。 mov mov ahah, 0ch, 0chmov mov alal, 08h, 08h int 21hint 21h inc al inc al je exit je exitExit:Exit:3)清除键盘缓冲区)清除键盘缓冲区例例例例9.6 9.6 9.6 9.6 检测是否有键盘输入检测是否有键盘输入检测是否有键盘输入检测是否有键盘输入 mov ah, 0bhmov ah, 0bh int 21h
42、int 21h inc al inc al je exit je exitExit:Exit:4)检验键盘状态)检验键盘状态 显示器可以简单的分为单色显示器和彩色显示器。随着显示显示器可以简单的分为单色显示器和彩色显示器。随着显示显示器可以简单的分为单色显示器和彩色显示器。随着显示显示器可以简单的分为单色显示器和彩色显示器。随着显示技术的发展,种类也更加丰富,常见的有阴极摄像管(技术的发展,种类也更加丰富,常见的有阴极摄像管(技术的发展,种类也更加丰富,常见的有阴极摄像管(技术的发展,种类也更加丰富,常见的有阴极摄像管(CRT)CRT)CRT)CRT)、液、液、液、液晶显示器、等离子显示器等。
43、晶显示器、等离子显示器等。晶显示器、等离子显示器等。晶显示器、等离子显示器等。 显示器是通过显卡与主机相连显示器是通过显卡与主机相连显示器是通过显卡与主机相连显示器是通过显卡与主机相连。显示器的显示屏通常称之为屏幕,现在常用的显示器有显示器的显示屏通常称之为屏幕,现在常用的显示器有显示器的显示屏通常称之为屏幕,现在常用的显示器有显示器的显示屏通常称之为屏幕,现在常用的显示器有14141414和和和和17171717,常用的显示分辨率为,常用的显示分辨率为,常用的显示分辨率为,常用的显示分辨率为800600800600800600800600或或或或10247681024768102476810
44、24768等。常用的显示卡等。常用的显示卡等。常用的显示卡等。常用的显示卡类型为类型为类型为类型为VGAVGAVGAVGA、SVGASVGASVGASVGA、EVGAEVGAEVGAEVGA和和和和TVGATVGATVGATVGA等,显示卡上也都带有大量的显等,显示卡上也都带有大量的显等,显示卡上也都带有大量的显等,显示卡上也都带有大量的显示存储器,能快速显示精美的图象。示存储器,能快速显示精美的图象。示存储器,能快速显示精美的图象。示存储器,能快速显示精美的图象。1 1 1 1MDAMDAMDAMDA MDAMDAMDAMDA(Monochrome Monochrome Monochrome
45、 Monochrome Display Display Display Display Adapter Adapter Adapter Adapter )属属属属于于于于单单单单色色色色显显显显示示示示适适适适配配配配器器器器,是是是是IBMIBMIBMIBM最早研制的视频显示适配器。最早研制的视频显示适配器。最早研制的视频显示适配器。最早研制的视频显示适配器。2 2 2 2CGACGACGACGA 在在在在 MDAMDAMDAMDA推推推推 出出出出 的的的的 同同同同 时时时时 , IBMIBMIBMIBM也也也也 推推推推 出出出出 了了了了 彩彩彩彩 色色色色 图图图图 形形形形 显显
46、显显 示示示示 适适适适 配配配配 器器器器CGACGACGACGA(Color Graphics AdapterColor Graphics AdapterColor Graphics AdapterColor Graphics Adapter)。)。)。)。9.2 显示器显示器I/O3 3 3 3EGAEGAEGAEGA 增增增增 强强强强 图图图图 形形形形 显显显显 示示示示 适适适适 配配配配 器器器器 EGAEGAEGAEGA( Enhanced Enhanced Enhanced Enhanced Graphics Graphics Graphics Graphics Adapt
47、erAdapterAdapterAdapter)是是是是IBMIBMIBMIBM公公公公司司司司推推推推出出出出的的的的第第第第二二二二代代代代图图图图形形形形显显显显示适配器,它兼容了示适配器,它兼容了示适配器,它兼容了示适配器,它兼容了MDAMDAMDAMDA和和和和CGACGACGACGA的全部功能。的全部功能。的全部功能。的全部功能。4 4 4 4VGAVGAVGAVGA 视视视视 频频频频 图图图图 形形形形 阵阵阵阵 列列列列 显显显显 示示示示 适适适适 配配配配 器器器器 VGAVGAVGAVGA( Video Video Video Video Graphics Graphi
48、cs Graphics Graphics ArrayArrayArrayArray)是是是是IBMIBMIBMIBM公公公公司司司司推推推推出出出出的的的的第第第第三三三三代代代代图图图图形形形形显显显显示示示示适配器,它兼容了适配器,它兼容了适配器,它兼容了适配器,它兼容了MDAMDAMDAMDA、CGACGACGACGA和和和和EGAEGAEGAEGA的全部功能。的全部功能。的全部功能。的全部功能。5. XGA5. XGA5. XGA5. XGA XGAXGAXGAXGA(Extended Extended Extended Extended Graphics Graphics Graph
49、ics Graphics ArrayArrayArrayArray)是是是是IBMIBMIBMIBM公公公公司司司司继继继继VGAVGAVGAVGA之后推出的扩展图形显示适配器。之后推出的扩展图形显示适配器。之后推出的扩展图形显示适配器。之后推出的扩展图形显示适配器。显示模式显示模式 计算机系统中的显示器都有二种显示方式:计算机系统中的显示器都有二种显示方式:计算机系统中的显示器都有二种显示方式:计算机系统中的显示器都有二种显示方式:文文文文本显示方式本显示方式本显示方式本显示方式和和和和图形显示方式图形显示方式图形显示方式图形显示方式。 在在在在DOSDOSDOSDOS操作系统环境下,其默认
50、的显示方式为操作系统环境下,其默认的显示方式为操作系统环境下,其默认的显示方式为操作系统环境下,其默认的显示方式为文本显示方式,而在文本显示方式,而在文本显示方式,而在文本显示方式,而在WindowsWindowsWindowsWindows操作系统环境下,其操作系统环境下,其操作系统环境下,其操作系统环境下,其显示方式是图形显示方式显示方式是图形显示方式显示方式是图形显示方式显示方式是图形显示方式,其绝大多数操作界面是,其绝大多数操作界面是,其绝大多数操作界面是,其绝大多数操作界面是以图形界面的窗口形式出现的。以图形界面的窗口形式出现的。以图形界面的窗口形式出现的。以图形界面的窗口形式出现的
51、。文本显示方式文本显示方式文本显示方式文本显示方式 文本显示方式是指文本显示方式是指文本显示方式是指文本显示方式是指以字符为最小单位以字符为最小单位以字符为最小单位以字符为最小单位的显示方式,每个字的显示方式,每个字的显示方式,每个字的显示方式,每个字符都是以矩形块形式显示的。符都是以矩形块形式显示的。符都是以矩形块形式显示的。符都是以矩形块形式显示的。在在在在BIOS ROMBIOS ROMBIOS ROMBIOS ROM中存有多种不同大小中存有多种不同大小中存有多种不同大小中存有多种不同大小的字符集,主要的显示字符集大小为:的字符集,主要的显示字符集大小为:的字符集,主要的显示字符集大小为
52、:的字符集,主要的显示字符集大小为:88(88(88(88(标准标准标准标准) ) ) )、814814814814和和和和816816816816等。等。等。等。 在常用的文本显示模式在常用的文本显示模式在常用的文本显示模式在常用的文本显示模式( ( ( (模式模式模式模式3)3)3)3)下,屏幕被划分成下,屏幕被划分成下,屏幕被划分成下,屏幕被划分成25252525行,行,行,行,每行可显示每行可显示每行可显示每行可显示80808080个字符,所以,每屏最多可显示个字符,所以,每屏最多可显示个字符,所以,每屏最多可显示个字符,所以,每屏最多可显示2000(8025)2000(8025)20
53、00(8025)2000(8025)个个个个字符。为了便于标识屏幕上的每个显示位置,我们就用其所在字符。为了便于标识屏幕上的每个显示位置,我们就用其所在字符。为了便于标识屏幕上的每个显示位置,我们就用其所在字符。为了便于标识屏幕上的每个显示位置,我们就用其所在行和列来表示之,并规定:屏幕的左上角坐标为行和列来表示之,并规定:屏幕的左上角坐标为行和列来表示之,并规定:屏幕的左上角坐标为行和列来表示之,并规定:屏幕的左上角坐标为(0, 0)(0, 0)(0, 0)(0, 0),右下,右下,右下,右下角坐标为角坐标为角坐标为角坐标为(24, 79)(24, 79)(24, 79)(24, 79)。
54、在显示字符时,用一个字节存储该字符的在显示字符时,用一个字节存储该字符的在显示字符时,用一个字节存储该字符的在显示字符时,用一个字节存储该字符的ASCIIASCIIASCIIASCII码,用另码,用另码,用另码,用另一个字节存储的显示属性,即:显示颜色一个字节存储的显示属性,即:显示颜色一个字节存储的显示属性,即:显示颜色一个字节存储的显示属性,即:显示颜色。 在在在在8025802580258025的文本显示模式下,满屏可显示的文本显示模式下,满屏可显示的文本显示模式下,满屏可显示的文本显示模式下,满屏可显示2000200020002000个个个个字符,也就需要字符,也就需要字符,也就需要字
55、符,也就需要4000400040004000个字节来存储一屏的显示信息。个字节来存储一屏的显示信息。个字节来存储一屏的显示信息。个字节来存储一屏的显示信息。图形显示方式图形显示方式图形显示方式图形显示方式 图形显示是目前最常用的一种显示方式,也是图形显示是目前最常用的一种显示方式,也是图形显示是目前最常用的一种显示方式,也是图形显示是目前最常用的一种显示方式,也是WindowsWindowsWindowsWindows操作操作操作操作系统的默认显示方式。在该显示方式下,我们可以看到优美的系统的默认显示方式。在该显示方式下,我们可以看到优美的系统的默认显示方式。在该显示方式下,我们可以看到优美的
56、系统的默认显示方式。在该显示方式下,我们可以看到优美的图象、图象、图象、图象、VCDVCDVCDVCD、浏览丰富多彩的网页等。、浏览丰富多彩的网页等。、浏览丰富多彩的网页等。、浏览丰富多彩的网页等。 图形显示的最小单位是象素图形显示的最小单位是象素图形显示的最小单位是象素图形显示的最小单位是象素,对每个象素可用不同的颜色,对每个象素可用不同的颜色,对每个象素可用不同的颜色,对每个象素可用不同的颜色来显示。所以,在显示缓冲区内记录的信息是屏幕各象素的显来显示。所以,在显示缓冲区内记录的信息是屏幕各象素的显来显示。所以,在显示缓冲区内记录的信息是屏幕各象素的显来显示。所以,在显示缓冲区内记录的信息
57、是屏幕各象素的显示颜色。示颜色。示颜色。示颜色。 由于各种图形显示模式所能显示的颜色和象素是不同的,由于各种图形显示模式所能显示的颜色和象素是不同的,由于各种图形显示模式所能显示的颜色和象素是不同的,由于各种图形显示模式所能显示的颜色和象素是不同的,它决定了它决定了它决定了它决定了显示缓冲区的存储方式显示缓冲区的存储方式显示缓冲区的存储方式显示缓冲区的存储方式也是不同的。下面给出三个具也是不同的。下面给出三个具也是不同的。下面给出三个具也是不同的。下面给出三个具体的图形显示模式及其存储方式,通过它们可看出各种显示模体的图形显示模式及其存储方式,通过它们可看出各种显示模体的图形显示模式及其存储方
58、式,通过它们可看出各种显示模体的图形显示模式及其存储方式,通过它们可看出各种显示模式在显示缓冲区存储方式上的明显差异。式在显示缓冲区存储方式上的明显差异。式在显示缓冲区存储方式上的明显差异。式在显示缓冲区存储方式上的明显差异。4 4色色色色320200320200图形显示模式图形显示模式图形显示模式图形显示模式 由于每个象素只能是四种颜色之一,而四种情况用由于每个象素只能是四种颜色之一,而四种情况用由于每个象素只能是四种颜色之一,而四种情况用由于每个象素只能是四种颜色之一,而四种情况用2 2 2 2位二位二位二位二进制就可表示,所以,进制就可表示,所以,进制就可表示,所以,进制就可表示,所以,
59、一个字节可表示一个字节可表示一个字节可表示一个字节可表示4 4 4 4个象素的显示颜色个象素的显示颜色个象素的显示颜色个象素的显示颜色,存储一行上的所有象素信息就需要存储一行上的所有象素信息就需要存储一行上的所有象素信息就需要存储一行上的所有象素信息就需要80808080个字节个字节个字节个字节。 在具体存储过程中,它又在具体存储过程中,它又在具体存储过程中,它又在具体存储过程中,它又把偶数行象素和奇数行分开来存把偶数行象素和奇数行分开来存把偶数行象素和奇数行分开来存把偶数行象素和奇数行分开来存储。储。储。储。偶数行和奇数行的象素总数各有偶数行和奇数行的象素总数各有偶数行和奇数行的象素总数各有
60、偶数行和奇数行的象素总数各有32000320003200032000个,也都需要个,也都需要个,也都需要个,也都需要8000800080008000个字节来存储,并规定:个字节来存储,并规定:个字节来存储,并规定:个字节来存储,并规定: 偶数行象素从偶数行象素从偶数行象素从偶数行象素从0B800:0000H0B800:0000H0B800:0000H0B800:0000H开始存储,开始存储,开始存储,开始存储, 奇奇奇奇数行象素从数行象素从数行象素从数行象素从0B800:2000H0B800:2000H0B800:2000H0B800:2000H开始存储。开始存储。开始存储。开始存储。 该显示
61、模式的存储形式如图所示该显示模式的存储形式如图所示该显示模式的存储形式如图所示该显示模式的存储形式如图所示。1616色色色色640480640480图形显示模式图形显示模式图形显示模式图形显示模式 640480640480640480640480图形显示模式共有图形显示模式共有图形显示模式共有图形显示模式共有307200307200307200307200个象素,每个象素可选用个象素,每个象素可选用个象素,每个象素可选用个象素,每个象素可选用16161616种颜色,它需要用种颜色,它需要用种颜色,它需要用种颜色,它需要用4 4 4 4位二进制来表示位二进制来表示位二进制来表示位二进制来表示。该
62、显示模式在存储显示。该显示模式在存储显示。该显示模式在存储显示。该显示模式在存储显示信息时,把该信息时,把该信息时,把该信息时,把该4 4 4 4位分在四个位平面位分在四个位平面位分在四个位平面位分在四个位平面P1P1P1P1、P2P2P2P2、P3P3P3P3和和和和P4P4P4P4上,所以,位上,所以,位上,所以,位上,所以,位平面平面平面平面Pi(i=1,2,3,4)Pi(i=1,2,3,4)Pi(i=1,2,3,4)Pi(i=1,2,3,4)共有共有共有共有307200307200307200307200个二进制位,即有个二进制位,即有个二进制位,即有个二进制位,即有384003840
63、03840038400个字节。个字节。个字节。个字节。其显示缓冲区的存储形式如图所示。其显示缓冲区的存储形式如图所示。其显示缓冲区的存储形式如图所示。其显示缓冲区的存储形式如图所示。256256色色色色320200320200图形显示模式图形显示模式图形显示模式图形显示模式 表达表达表达表达256256256256种不同颜色需要种不同颜色需要种不同颜色需要种不同颜色需要8 8 8 8位二进制,即一个字节。在该模位二进制,即一个字节。在该模位二进制,即一个字节。在该模位二进制,即一个字节。在该模式下,其显示缓冲区的存储方式是非常简单的,即:第一个字式下,其显示缓冲区的存储方式是非常简单的,即:第
64、一个字式下,其显示缓冲区的存储方式是非常简单的,即:第一个字式下,其显示缓冲区的存储方式是非常简单的,即:第一个字节存储第一个象素的颜色,第二个字节存储第二个象素的颜色,节存储第一个象素的颜色,第二个字节存储第二个象素的颜色,节存储第一个象素的颜色,第二个字节存储第二个象素的颜色,节存储第一个象素的颜色,第二个字节存储第二个象素的颜色,以此类推,所以,存储满屏象素所需要的字节数为:以此类推,所以,存储满屏象素所需要的字节数为:以此类推,所以,存储满屏象素所需要的字节数为:以此类推,所以,存储满屏象素所需要的字节数为:320200132020013202001320200164000640006
65、400064000。其显示缓冲区的存储方式如图所示。其显示缓冲区的存储方式如图所示。其显示缓冲区的存储方式如图所示。其显示缓冲区的存储方式如图所示。 从上面三种不同图形显示模式的介绍,不难从上面三种不同图形显示模式的介绍,不难看出:各种显示模式在显示缓冲区存储方式上的明看出:各种显示模式在显示缓冲区存储方式上的明显差异,操作象素方法的难易程度相差也很大,所显差异,操作象素方法的难易程度相差也很大,所以,以,程序员不要用直接操作显示缓冲区的办法来达程序员不要用直接操作显示缓冲区的办法来达到改变显示象素的目的,最好是通过到改变显示象素的目的,最好是通过BIOSBIOS内的中断内的中断功能来实现相应
66、的功能功能来实现相应的功能,这样,所编写的程序能很这样,所编写的程序能很方便地适应不同的图形显示模式。方便地适应不同的图形显示模式。9.2.1 9.2.1 字符属性字符属性字符属性字符属性 显示器的屏幕通常划分为行和列的二维系统,显示适配器就显示器的屏幕通常划分为行和列的二维系统,显示适配器就在行列组成的网格位置上显示字符。对应屏幕上的每个字符位在行列组成的网格位置上显示字符。对应屏幕上的每个字符位置,主存空间都有相应的存储单元与之对应,因此可说是显示置,主存空间都有相应的存储单元与之对应,因此可说是显示屏幕式屏幕式“存储器的映像存储器的映像”。对应显示屏幕上的每个字符,在存。对应显示屏幕上的
67、每个字符,在存储器中由连续的两个字节表示,储器中由连续的两个字节表示,一个字节表示一个字节表示ASCIIASCII码,另一个码,另一个字节保存字符的属性。字节保存字符的属性。属性值()属性值()属性值()属性值()属性值()属性值()属性值()属性值()显示效果显示效果显示效果显示效果00000000000000000000无显示无显示无显示无显示00000001000000010101黑底白字,下划线黑底白字,下划线黑底白字,下划线黑底白字,下划线00000111000001110707黑底白字,正常显示黑底白字,正常显示黑底白字,正常显示黑底白字,正常显示00001111000011110
68、F0F黑底白字,高亮度黑底白字,高亮度黑底白字,高亮度黑底白字,高亮度01110000011100007070白底黑字,反相显示白底黑字,反相显示白底黑字,反相显示白底黑字,反相显示10000111100001118787黑底白字,闪烁黑底白字,闪烁黑底白字,闪烁黑底白字,闪烁1111000011110000F0F0白底黑字,反相闪烁白底黑字,反相闪烁白底黑字,反相闪烁白底黑字,反相闪烁单色显示的属性值单色显示的属性值 7 6 5 4 3 2 1 07 6 5 4 3 2 1 0背景背景背景背景前景前景前景前景闪烁闪烁闪烁闪烁亮度亮度亮度亮度1 1 1 1、单色字符属性、单色字符属性、单色字符
69、属性、单色字符属性2 2、彩色字符显示、彩色字符显示、彩色字符显示、彩色字符显示位号位号位号位号7 76 5 46 5 43 2 1 03 2 1 0属性属性属性属性字节字节字节字节BLBLR G BR G BI R G BI R G B闪烁选择闪烁选择闪烁选择闪烁选择背景颜色背景颜色背景颜色背景颜色前景颜色前景颜色前景颜色前景颜色彩色字符显示属性字节彩色字符显示属性字节110 棕RGB颜色000 黑001001蓝010010绿011青100100红101品红111白IRGB颜色IRGB颜色0000黑1000灰0001蓝1001浅蓝0010绿1010浅绿0011青1011浅青0100红1100
70、浅红0101品红1101浅品红0110棕1110黄0111白1111强度白背景颜色组合背景颜色组合背景颜色组合背景颜色组合前景颜色组合前景颜色组合前景颜色组合前景颜色组合3. 显示存储器显示存储器 对于所有的显示适配器,文本方式下显示字符的原理是一对于所有的显示适配器,文本方式下显示字符的原理是一对于所有的显示适配器,文本方式下显示字符的原理是一对于所有的显示适配器,文本方式下显示字符的原理是一样的,所不同的是显存的起始地址不同,样的,所不同的是显存的起始地址不同,样的,所不同的是显存的起始地址不同,样的,所不同的是显存的起始地址不同,对于对于对于对于MDAMDAMDAMDA,显存的起,显存的
71、起,显存的起,显存的起始地址为始地址为始地址为始地址为B000:0000B000:0000B000:0000B000:0000;对于;对于;对于;对于CGACGACGACGA、EGAEGAEGAEGA、VGAVGAVGAVGA是是是是B800:0000B800:0000B800:0000B800:0000. . . .每个字每个字每个字每个字符的符的符的符的ASCIIASCIIASCIIASCII码和属性码字节存放于两个连续的字节中码和属性码字节存放于两个连续的字节中码和属性码字节存放于两个连续的字节中码和属性码字节存放于两个连续的字节中。图形显。图形显。图形显。图形显示方式下,其显示缓冲区段
72、地址为示方式下,其显示缓冲区段地址为示方式下,其显示缓冲区段地址为示方式下,其显示缓冲区段地址为0A000H0A000H0A000H0A000H。 在在在在25 X 8025 X 8025 X 8025 X 80的文本显示方式下,屏幕可有的文本显示方式下,屏幕可有的文本显示方式下,屏幕可有的文本显示方式下,屏幕可有2000200020002000个字符位置,个字符位置,个字符位置,个字符位置,因每个字符需要用两个字节,显存容量需要多少?如果显存有因每个字符需要用两个字节,显存容量需要多少?如果显存有因每个字符需要用两个字节,显存容量需要多少?如果显存有因每个字符需要用两个字节,显存容量需要多少
73、?如果显存有16K,16K,16K,16K,可保存几屏幕的数据?可保存几屏幕的数据?可保存几屏幕的数据?可保存几屏幕的数据?对对对对CGA,EGACGA,EGACGA,EGACGA,EGA和和和和VGAVGAVGAVGA的的的的80808080列显示方式,列显示方式,列显示方式,列显示方式,0 0 0 0页的起始地址是页的起始地址是页的起始地址是页的起始地址是B800:0000,1B800:0000,1B800:0000,1B800:0000,1页的起始地址是页的起始地址是页的起始地址是页的起始地址是B800:1000,2B800:1000,2B800:1000,2B800:1000,2页页页
74、页的起始地址为的起始地址为的起始地址为的起始地址为B800:2000,3B800:2000,3B800:2000,3B800:2000,3页的起始地址为页的起始地址为页的起始地址为页的起始地址为B800:3000 B800:3000 B800:3000 B800:3000 。 例例例例9.7 9.7 9.7 9.7 计算一个字符在显存中的位置(计算一个字符在显存中的位置(计算一个字符在显存中的位置(计算一个字符在显存中的位置(P327)P327)P327)P327) 9.2.2 BIOS显示中断调用显示中断调用 10H10H中断调用为显示器中断,共有中断调用为显示器中断,共有1717种功种功
75、能。下面列出几种主要功能的使用情况。能。下面列出几种主要功能的使用情况。 (1 1 1 1)设置显示方式()设置显示方式()设置显示方式()设置显示方式(0 0 0 0号功能)号功能)号功能)号功能)入口参数:入口参数:入口参数:入口参数:AH=0AH=0AH=0AH=0(功能号),(功能号),(功能号),(功能号),AL=AL=AL=AL=设置方式(设置方式(设置方式(设置方式(07070707)。)。)。)。出口参数:无。出口参数:无。出口参数:无。出口参数:无。(2 2 2 2)设置光标类型()设置光标类型()设置光标类型()设置光标类型(1 1 1 1号功能)号功能)号功能)号功能)入
76、口参数:入口参数:入口参数:入口参数:AH=1AH=1AH=1AH=1(功能号),(功能号),(功能号),(功能号),CH=CH=CH=CH=光标开始行,光标开始行,光标开始行,光标开始行,CL=CL=CL=CL=光标结束行。光标结束行。光标结束行。光标结束行。出口参数:无。根据出口参数:无。根据出口参数:无。根据出口参数:无。根据CXCXCXCX给出光标的大小。给出光标的大小。给出光标的大小。给出光标的大小。AL显示方式显示方式04025黑白文本方式黑白文本方式14025彩色文本方式彩色文本方式28025黑白文本方式黑白文本方式38025彩色文本方式彩色文本方式4320200彩色图形方式彩色
77、图形方式5320200黑白图形方式黑白图形方式6640200黑白图形方式黑白图形方式78025黑白文本方式(单色显示卡)黑白文本方式(单色显示卡)(3 3 3 3)设置光标位置()设置光标位置()设置光标位置()设置光标位置(2 2 2 2号功能)号功能)号功能)号功能) 入口参数:入口参数:入口参数:入口参数:AH=2AH=2AH=2AH=2(功能号),(功能号),(功能号),(功能号),BH=BH=BH=BH=页号,页号,页号,页号,DH=DH=DH=DH=行号,行号,行号,行号,DL=DL=DL=DL=列号列号列号列号。 出口参数:无。根据出口参数:无。根据出口参数:无。根据出口参数:无
78、。根据DXDXDXDX确定了光标位置。确定了光标位置。确定了光标位置。确定了光标位置。(4 4 4 4)读当前光标位置()读当前光标位置()读当前光标位置()读当前光标位置(3 3 3 3号功能)号功能)号功能)号功能)入口参数;入口参数;入口参数;入口参数;AH=3AH=3AH=3AH=3(功能号),(功能号),(功能号),(功能号),BH=BH=BH=BH=页号页号页号页号。出口参数:出口参数:出口参数:出口参数:DH=DH=DH=DH=行号,行号,行号,行号,DL=DL=DL=DL=列号,列号,列号,列号,CX=CX=CX=CX=光标大小。光标大小。光标大小。光标大小。(5 5 5 5)
79、初始窗口或向上滚动()初始窗口或向上滚动()初始窗口或向上滚动()初始窗口或向上滚动(6 6 6 6号功能)号功能)号功能)号功能)入口参数:入口参数:入口参数:入口参数:AH=6AH=6AH=6AH=6,AL=AL=AL=AL=上滚行数,上滚行数,上滚行数,上滚行数,CX=CX=CX=CX=上滚窗口左上角的行、列上滚窗口左上角的行、列上滚窗口左上角的行、列上滚窗口左上角的行、列号。号。号。号。DX=DX=DX=DX=上滚窗口右下角的行、列号。上滚窗口右下角的行、列号。上滚窗口右下角的行、列号。上滚窗口右下角的行、列号。BH=BH=BH=BH=空白行的属性。空白行的属性。空白行的属性。空白行的
80、属性。出口参数:无。当滚动后,底部为空白输入行。出口参数:无。当滚动后,底部为空白输入行。出口参数:无。当滚动后,底部为空白输入行。出口参数:无。当滚动后,底部为空白输入行。(6 6 6 6)初始窗口或向下滚动()初始窗口或向下滚动()初始窗口或向下滚动()初始窗口或向下滚动(7 7 7 7号功能)号功能)号功能)号功能)入口参数:入口参数:入口参数:入口参数:AH=7AH=7AH=7AH=7,AL=AL=AL=AL=下滚行数,下滚行数,下滚行数,下滚行数,CX=CX=CX=CX=下滚窗口左上下滚窗口左上下滚窗口左上下滚窗口左上角的行、列号。角的行、列号。角的行、列号。角的行、列号。DX=DX
81、=DX=DX=下滚窗口右下角的行、列号。下滚窗口右下角的行、列号。下滚窗口右下角的行、列号。下滚窗口右下角的行、列号。BH=BH=BH=BH=空白行的属性。空白行的属性。空白行的属性。空白行的属性。出口参数:无。当滚动后,顶部为空白输入行。出口参数:无。当滚动后,顶部为空白输入行。出口参数:无。当滚动后,顶部为空白输入行。出口参数:无。当滚动后,顶部为空白输入行。(7 7 7 7)读当前光标位置的字符与属性()读当前光标位置的字符与属性()读当前光标位置的字符与属性()读当前光标位置的字符与属性(8 8 8 8号功能)号功能)号功能)号功能)入口参数:入口参数:入口参数:入口参数:AH=08H
82、AH=08HAH=08HAH=08H,BH=BH=BH=BH=页号页号页号页号。出口参数:出口参数:出口参数:出口参数:ALALALAL为读出的字符,为读出的字符,为读出的字符,为读出的字符,AHAHAHAH为字符属性为字符属性为字符属性为字符属性。(8 8 8 8)在当前光标位置写字符和属性()在当前光标位置写字符和属性()在当前光标位置写字符和属性()在当前光标位置写字符和属性(9 9 9 9号功能)号功能)号功能)号功能)入口参数:入口参数:入口参数:入口参数:AH=9AH=9AH=9AH=9,BH=BH=BH=BH=页号,页号,页号,页号,AL=AL=AL=AL=字符的字符的字符的字符
83、的ASCIIASCIIASCIIASCII码,码,码,码,BL=BL=BL=BL=字符属性,字符属性,字符属性,字符属性,CX=CX=CX=CX=写入字符重复次数写入字符重复次数写入字符重复次数写入字符重复次数。出口参数:无。出口参数:无。出口参数:无。出口参数:无。(9 9 9 9)在当前光标位置写字符()在当前光标位置写字符()在当前光标位置写字符()在当前光标位置写字符(10101010号功能)号功能)号功能)号功能)入口参数:入口参数:入口参数:入口参数:AH=0AHAH=0AHAH=0AHAH=0AH,BH=BH=BH=BH=页号,页号,页号,页号,AL=AL=AL=AL=字符的字符
84、的字符的字符的ASCIIASCIIASCIIASCII码,码,码,码,CX=CX=CX=CX=写入字符重复次数。写入字符重复次数。写入字符重复次数。写入字符重复次数。出口参数:无。出口参数:无。出口参数:无。出口参数:无。(10(10(10(10)显示字符串()显示字符串()显示字符串()显示字符串(13131313号功能)号功能)号功能)号功能)ES:BP=ES:BP=ES:BP=ES:BP=串地址串地址串地址串地址CX=CX=CX=CX=串长度串长度串长度串长度DH,DL=DH,DL=DH,DL=DH,DL=起始行列起始行列起始行列起始行列BH=BH=BH=BH=页号页号页号页号AL=0,
85、BL=AL=0,BL=AL=0,BL=AL=0,BL=属性属性属性属性串:串:串:串:char,charchar char,charchar char,charchar char,charchar 光标返回到起始位置光标返回到起始位置光标返回到起始位置光标返回到起始位置AL=1,BL=AL=1,BL=AL=1,BL=AL=1,BL=属性属性属性属性串:串:串:串:char,charchar char,charchar char,charchar char,charchar 光标跟随串移动光标跟随串移动光标跟随串移动光标跟随串移动AL=2AL=2AL=2AL=2串:串:串:串:char,char
86、char char,charchar char,charchar char,charchar 光标返回起始位置光标返回起始位置光标返回起始位置光标返回起始位置AL=3AL=3AL=3AL=3串:串:串:串:char,charchar char,charchar char,charchar char,charchar 光标跟随串移动光标跟随串移动光标跟随串移动光标跟随串移动mov ch,5mov ch,5 mov cl,7mov cl,7 mov ah,1 mov ah,1 int 10hint 10h mov dh,5mov dh,5 mov dl,6 mov dl,6 mov bh,0 mo
87、v bh,0 mov ah,2mov ah,2 int 10hint 10h例例例例9.8 9.8 9.8 9.8 置光标开始行为置光标开始行为置光标开始行为置光标开始行为5 5 5 5,结束行为,结束行为,结束行为,结束行为7 7 7 7,并把它设置到第,并把它设置到第,并把它设置到第,并把它设置到第5 5 5 5行第行第行第行第6 6 6 6列列列列设置光标位置(设置光标位置(设置光标位置(设置光标位置(2 2 2 2号功能)号功能)号功能)号功能) 入口参数:入口参数:入口参数:入口参数:AH=2AH=2AH=2AH=2(功能号),(功能号),(功能号),(功能号),BH=BH=BH=B
88、H=页号,页号,页号,页号,DH=DH=DH=DH=行号,行号,行号,行号,DL=DL=DL=DL=列号。列号。列号。列号。 出口参数:无。根据出口参数:无。根据出口参数:无。根据出口参数:无。根据DXDXDXDX确定了光标位置。确定了光标位置。确定了光标位置。确定了光标位置。设置光标类型(设置光标类型(设置光标类型(设置光标类型(1 1 1 1号功能)号功能)号功能)号功能)入口参数:入口参数:入口参数:入口参数:AH=1AH=1AH=1AH=1(功能号),(功能号),(功能号),(功能号),CH=CH=CH=CH=光标开始行,光标开始行,光标开始行,光标开始行,CL=CL=CL=CL=光标
89、结束行。光标结束行。光标结束行。光标结束行。出口参数:无。根据出口参数:无。根据出口参数:无。根据出口参数:无。根据CXCXCXCX给出光标的大小。给出光标的大小。给出光标的大小。给出光标的大小。例例例例9.9 9.9 9.9 9.9 读第读第读第读第0 0 0 0页当前光标位置页当前光标位置页当前光标位置页当前光标位置 MOV AH,3 MOV AH,3 MOV BH,0 MOV BH,0 INT 10H INT 10H结果结果结果结果DHDHDHDH和和和和DLDLDLDL中分别存放光标行中分别存放光标行中分别存放光标行中分别存放光标行号和列号,而号和列号,而号和列号,而号和列号,而CHC
90、HCHCH和和和和CLCLCLCL中则存放中则存放中则存放中则存放光标大小参数光标大小参数光标大小参数光标大小参数例例例例9.10 9.10 9.10 9.10 选择显示页选择显示页选择显示页选择显示页 MOV AL, vpage MOV AL, vpage MOV AH,5 MOV AH,5 INT 10H INT 10H例例例例9.11 9.11 9.11 9.11 编写清除全屏幕的程序编写清除全屏幕的程序编写清除全屏幕的程序编写清除全屏幕的程序Clear_screen proc farClear_screen proc far ( push ax,bx,cx,dx)( push ax,b
91、x,cx,dx) mov ah,6mov ah,6 mov al,0 mov al,0 mov bh,7 mov bh,7 mov ch,0 mov ch,0 mov cl,0 mov cl,0 mov dh,24 mov dh,24 mov dl,79 mov dl,79 int 10h int 10h mov dx,2mov dx,2 mov ah,2 mov ah,2 int 10h int 10h ( pop dx,cx,bx,ax)( pop dx,cx,bx,ax) retretclear_screen endpclear_screen endp初始窗口或向上滚动(初始窗口或向上滚
92、动(初始窗口或向上滚动(初始窗口或向上滚动(6 6 6 6号功能)号功能)号功能)号功能)入口参数:入口参数:入口参数:入口参数:AH=6AH=6AH=6AH=6,AL=AL=AL=AL=上滚行数,上滚行数,上滚行数,上滚行数,CX=CX=CX=CX=上上上上滚窗口左上角的行、列号。滚窗口左上角的行、列号。滚窗口左上角的行、列号。滚窗口左上角的行、列号。DX=DX=DX=DX=上滚窗上滚窗上滚窗上滚窗口右下角的行、列号。口右下角的行、列号。口右下角的行、列号。口右下角的行、列号。BH=BH=BH=BH=空白行的属空白行的属空白行的属空白行的属性。性。性。性。出口参数:无。当滚动后,底部为空白出
93、口参数:无。当滚动后,底部为空白出口参数:无。当滚动后,底部为空白出口参数:无。当滚动后,底部为空白输入行。输入行。输入行。输入行。设置光标位置(设置光标位置(设置光标位置(设置光标位置(2 2 2 2号功能)号功能)号功能)号功能) 入口参数:入口参数:入口参数:入口参数:AH=2AH=2AH=2AH=2(功能号),(功能号),(功能号),(功能号),BH=BH=BH=BH=页页页页号,号,号,号,DH=DH=DH=DH=行号,行号,行号,行号,DL=DL=DL=DL=列号。列号。列号。列号。 出口参数:无。根据出口参数:无。根据出口参数:无。根据出口参数:无。根据DXDXDXDX确定了光标
94、确定了光标确定了光标确定了光标位置。位置。位置。位置。例例例例9.12 9.12 9.12 9.12 清除左上角为(清除左上角为(清除左上角为(清除左上角为(00000000)右下角为()右下角为()右下角为()右下角为(24242424,39393939)的窗口,初)的窗口,初)的窗口,初)的窗口,初始化为反相显示。该窗口相当于屏幕的左上角始化为反相显示。该窗口相当于屏幕的左上角始化为反相显示。该窗口相当于屏幕的左上角始化为反相显示。该窗口相当于屏幕的左上角 mov ah,7mov ah,7mov ah,7mov ah,7 mov al,0 mov al,0 mov al,0 mov al,
95、0 mov bh,70h mov bh,70h mov bh,70h mov bh,70h mov ch,0 mov ch,0 mov ch,0 mov ch,0 mov cl,0 mov cl,0 mov cl,0 mov cl,0 mov dh,24 mov dh,24 mov dh,24 mov dh,24 mov dl,39 mov dl,39 mov dl,39 mov dl,39 int 10h int 10h int 10h int 10h mov dx,2mov dx,2mov dx,2mov dx,2 mov ah,2 mov ah,2 mov ah,2 mov ah,2 i
96、nt 10h int 10h int 10h int 10h设置光标位置(设置光标位置(设置光标位置(设置光标位置(2 2 2 2号功能)号功能)号功能)号功能) 入口参数:入口参数:入口参数:入口参数:AH=2AH=2AH=2AH=2(功能号),(功能号),(功能号),(功能号),BH=BH=BH=BH=页号,页号,页号,页号,DH=DH=DH=DH=行号,行号,行号,行号,DL=DL=DL=DL=列号。列号。列号。列号。 出口参数:无。根据出口参数:无。根据出口参数:无。根据出口参数:无。根据DXDXDXDX确定了光标位置。确定了光标位置。确定了光标位置。确定了光标位置。初始窗口或向下滚动
97、(初始窗口或向下滚动(初始窗口或向下滚动(初始窗口或向下滚动(7 7 7 7号功能)号功能)号功能)号功能)入口参数:入口参数:入口参数:入口参数:AH=7AH=7AH=7AH=7,AL=AL=AL=AL=下滚行数,下滚行数,下滚行数,下滚行数,CX=CX=CX=CX=下滚窗下滚窗下滚窗下滚窗口左上角的行、列号。口左上角的行、列号。口左上角的行、列号。口左上角的行、列号。DX=DX=DX=DX=下滚窗口右下角下滚窗口右下角下滚窗口右下角下滚窗口右下角的行、列号。的行、列号。的行、列号。的行、列号。BH=BH=BH=BH=空白行的属性。空白行的属性。空白行的属性。空白行的属性。出口参数:无。当滚
98、动后,顶部为空白输入出口参数:无。当滚动后,顶部为空白输入出口参数:无。当滚动后,顶部为空白输入出口参数:无。当滚动后,顶部为空白输入行。行。行。行。例例例例9.13 9.13 9.13 9.13 在屏幕中心显示小窗口在屏幕中心显示小窗口在屏幕中心显示小窗口在屏幕中心显示小窗口data segmentdata segment esc_key equ 1bh esc_key equ 1bh win_ulc equ 30 win_ulc equ 30 win_ulr equ 8 win_ulr equ 8 win_lrc equ 50 win_lrc equ 50 win_lrr equ 16 w
99、in_lrr equ 16 win_width equ 20 win_width equ 20data endsdata endscode segmentcode segment assume cs:code,ds:data assume cs:code,ds:datastart:start:mov ah,2mov ah,2 mov mov dh,win_lrrdh,win_lrr mov mov dl,win_ulcdl,win_ulc mov mov bh,0bh,0 int int 10h10h mov mov cx,win_width cx,win_widthget_char:get_
100、char: mov mov ah,1 ah,1 int int 21h21h cmp al, esc_keycmp al, esc_key jz exit jz exit loop loop get_charget_char movmov ah,6 ah,6 mov mov al,1 al,1 mov mov ch,win_ulrch,win_ulr mov mov cl,win_ulc cl,win_ulc mov mov dh,win_lrrdh,win_lrr mov mov dl,win_lrcdl,win_lrc mov mov bh,7bh,7 int int 10h10h jmp
101、 jmp startstartexit:mov exit:mov ah,4chah,4ch int int 21h 21h code code endsendsendend设置光标位置(设置光标位置(设置光标位置(设置光标位置(2 2 2 2号号号号功能)功能)功能)功能) 入口参数:入口参数:入口参数:入口参数:AH=2AH=2AH=2AH=2(功能号),(功能号),(功能号),(功能号),BH=BH=BH=BH=页页页页号,号,号,号,DH=DH=DH=DH=行号,行号,行号,行号,DL=DL=DL=DL=列号。列号。列号。列号。 出口参数:无。根出口参数:无。根出口参数:无。根出口参数:
102、无。根据据据据DXDXDXDX确定了光标位确定了光标位确定了光标位确定了光标位置。置。置。置。初始窗口或向上滚动初始窗口或向上滚动初始窗口或向上滚动初始窗口或向上滚动(6 6 6 6号功能)号功能)号功能)号功能)入口参数:入口参数:入口参数:入口参数:AH=6AH=6AH=6AH=6,AL=AL=AL=AL=上滚行数,上滚行数,上滚行数,上滚行数,CX=CX=CX=CX=上滚窗上滚窗上滚窗上滚窗口左上角的行、列号。口左上角的行、列号。口左上角的行、列号。口左上角的行、列号。DX=DX=DX=DX=上滚窗口右下角的上滚窗口右下角的上滚窗口右下角的上滚窗口右下角的行、列号。行、列号。行、列号。行
103、、列号。BH=BH=BH=BH=空白行空白行空白行空白行的属性。的属性。的属性。的属性。出口参数:无。当滚出口参数:无。当滚出口参数:无。当滚出口参数:无。当滚动后,底部为空白输动后,底部为空白输动后,底部为空白输动后,底部为空白输入行。入行。入行。入行。例例例例9.16 9.16 9.16 9.16 在品红背景下,显示在品红背景下,显示在品红背景下,显示在品红背景下,显示5 5 5 5个浅绿色闪烁的星号个浅绿色闪烁的星号个浅绿色闪烁的星号个浅绿色闪烁的星号code segmentcode segment assume cs:code assume cs:codestart:start: mo
104、v mov ah,9ah,9 mov mov al,*al,* mov mov bh,0bh,0 mov mov bl,0bl,0dadah h mov mov cx,5cx,5 int int 10h10h mov mov ah,4chah,4ch int int 21h 21h code code endsendsend startend start在当前光标位置写字符在当前光标位置写字符在当前光标位置写字符在当前光标位置写字符和属性(和属性(和属性(和属性(9 9 9 9号功能)号功能)号功能)号功能)入口参数:入口参数:入口参数:入口参数:AH=9AH=9AH=9AH=9,BH=BH=
105、BH=BH=页页页页号,号,号,号,AL=AL=AL=AL=字符的字符的字符的字符的ASCIIASCIIASCIIASCII码,码,码,码,BL=BL=BL=BL=字符属性,字符属性,字符属性,字符属性,CX=CX=CX=CX=写入写入写入写入字符数。字符数。字符数。字符数。出口参数:无。出口参数:无。出口参数:无。出口参数:无。9.189.189.189.18在屏幕上以红底蓝字显示字符串在屏幕上以红底蓝字显示字符串在屏幕上以红底蓝字显示字符串在屏幕上以红底蓝字显示字符串“WORLD “WORLD “WORLD “WORLD SCENERY”SCENERY”SCENERY”SCENERY”st
106、ring db world scenearstring db world scenearlen equ $-stringlen equ $-string mov ah,0 mov ah,0 mov al,3 mov al,3 int int 10h 10h movmov bp,seg string bp,seg string mov mov es,bp es,bp mov bp,offset string mov bp,offset string mov cx,lenmov cx,len mov dx,0 mov dx,0 mov bl,41h mov bl,41h mov al,0 mov
107、al,0 mov ah,13h mov ah,13h int 10h int 10h 设置显示方式(设置显示方式(设置显示方式(设置显示方式(0 0 0 0号功能)号功能)号功能)号功能)入入入入口口口口参参参参数数数数:AH=0AH=0AH=0AH=0(功功功功能能能能号号号号),AL=AL=AL=AL=设设设设置置置置方式(方式(方式(方式(07070707)。)。)。)。出口参数:无。出口参数:无。出口参数:无。出口参数:无。(10(10(10(10)显示字符串()显示字符串()显示字符串()显示字符串(13131313号功号功号功号功能)能)能)能)ES:BP=ES:BP=ES:BP=
108、ES:BP=串地址串地址串地址串地址CX=CX=CX=CX=串长度串长度串长度串长度DH,DL=DH,DL=DH,DL=DH,DL=起始行列起始行列起始行列起始行列BH=BH=BH=BH=页号页号页号页号AL=0,BL=AL=0,BL=AL=0,BL=AL=0,BL=属性属性属性属性串:串:串:串:char,charchar char,charchar char,charchar char,charchar 光标返回到起始位置光标返回到起始位置光标返回到起始位置光标返回到起始位置AL=1,BL=AL=1,BL=AL=1,BL=AL=1,BL=属性属性属性属性串:串:串:串:char,charc
109、har char,charchar char,charchar char,charchar 光标跟随移动光标跟随移动光标跟随移动光标跟随移动AL=2AL=2AL=2AL=2串:串:串:串:char,charchar char,charchar char,charchar char,charchar 光标返回起始位置光标返回起始位置光标返回起始位置光标返回起始位置AL=3AL=3AL=3AL=3串:串:串:串:char,charchar char,charchar char,charchar char,charchar 光标跟随移动光标跟随移动光标跟随移动光标跟随移动例例例例 用直接写屏方式在屏
110、幕第用直接写屏方式在屏幕第用直接写屏方式在屏幕第用直接写屏方式在屏幕第5 5 5 5行、第行、第行、第行、第10101010列以黄色列以黄色列以黄色列以黄色(0EH)(0EH)(0EH)(0EH)显示字显示字显示字显示字符串符串符串符串HelloHelloHelloHello。解:在文本显示方式下,每行显示解:在文本显示方式下,每行显示解:在文本显示方式下,每行显示解:在文本显示方式下,每行显示80808080个字符,每个字符占个字符,每个字符占个字符,每个字符占个字符,每个字符占2 2 2 2个字节,所以,个字节,所以,个字节,所以,个字节,所以,显示一行需要显示一行需要显示一行需要显示一行
111、需要160160160160个字节。若在第个字节。若在第个字节。若在第个字节。若在第m m m m行、第行、第行、第行、第n n n n列位置显示字符,则该位置所对列位置显示字符,则该位置所对列位置显示字符,则该位置所对列位置显示字符,则该位置所对应存储单元的偏移量为:应存储单元的偏移量为:应存储单元的偏移量为:应存储单元的偏移量为:m160 + n2m160 + n2m160 + n2m160 + n2。. .MODEL SMALLMODEL SMALL.DATA.DATAYellowYellowEQUEQU0EH0EHMSG1MSG1DBDBWelcome.Welcome.CountCou
112、ntEQUEQU$-MSG1$-MSG1.CODE.CODE.STARTUP.STARTUPMOV AX, 0B800HMOV AX, 0B800HMOV ES, AX MOV ES, AX ; ;彩色显示器的显示缓冲区段地址彩色显示器的显示缓冲区段地址彩色显示器的显示缓冲区段地址彩色显示器的显示缓冲区段地址MOV DI, 5MOV DI, 5IMUL DI, 160 IMUL DI, 160 ;5 ;5行所跳过的显示存储单元行所跳过的显示存储单元行所跳过的显示存储单元行所跳过的显示存储单元MOV CX, 10MOV CX, 10SHL CX, 1SHL CX, 1 ;10 ;10列所跳过的显
113、示存储单元列所跳过的显示存储单元列所跳过的显示存储单元列所跳过的显示存储单元ADD DI, CXADD DI, CX ; ;第第第第5 5行、第行、第行、第行、第1010列之前所跳过的所有显示单元列之前所跳过的所有显示单元列之前所跳过的所有显示单元列之前所跳过的所有显示单元MOV CX, CountMOV CX, CountLEA SI, MSG1 LEA SI, MSG1 ;CX: ;CX:字符个数,字符个数,字符个数,字符个数,SI:SI:显示字符首地址显示字符首地址显示字符首地址显示字符首地址MOV AH, YellowMOV AH, Yellow ; ;设置显示属性,即显示颜色设置显示
114、属性,即显示颜色设置显示属性,即显示颜色设置显示属性,即显示颜色.REPEAT.REPEATLODSBLODSB; ;取显示字符取显示字符取显示字符取显示字符STOSWSTOSW ; ;向显示缓冲区设置显示字符和属性向显示缓冲区设置显示字符和属性向显示缓冲区设置显示字符和属性向显示缓冲区设置显示字符和属性.UNTILCXZ.UNTILCXZ.EXIT.EXIT0 0ENDEND9.2.3 DOS9.2.3 DOS显示功能显示功能AHAH 功能功能功能功能调用参数调用参数调用参数调用参数2 26 69 9显示一个字符(检显示一个字符(检显示一个字符(检显示一个字符(检CTRL_BREAK)CTR
115、L_BREAK)显示一个字符(不检显示一个字符(不检显示一个字符(不检显示一个字符(不检CTRL_BREAK)CTRL_BREAK)显示字符串显示字符串显示字符串显示字符串DL=DL=字符;光标跟随移动字符;光标跟随移动字符;光标跟随移动字符;光标跟随移动DL=DL=字符;光标跟随移动字符;光标跟随移动字符;光标跟随移动字符;光标跟随移动DS:DX=DS:DX=串地址串地址串地址串地址 串必须以串必须以串必须以串必须以$“$“结尾结尾结尾结尾计算机与外设交换信息的过程中:计算机与外设交换信息的过程中:计算机与外设交换信息的过程中:计算机与外设交换信息的过程中:并行通信:多位数据通过多条数据线同
116、时传送。并行通信:多位数据通过多条数据线同时传送。并行通信:多位数据通过多条数据线同时传送。并行通信:多位数据通过多条数据线同时传送。串行通信:多位数据通过同一条数据线按位传送。串行通信:多位数据通过同一条数据线按位传送。串行通信:多位数据通过同一条数据线按位传送。串行通信:多位数据通过同一条数据线按位传送。 并行通信就是把一个字符的各数位用几条线并行通信就是把一个字符的各数位用几条线并行通信就是把一个字符的各数位用几条线并行通信就是把一个字符的各数位用几条线同时进行传输。与串行通信(一位一位传输)相比,同时进行传输。与串行通信(一位一位传输)相比,同时进行传输。与串行通信(一位一位传输)相比
117、,同时进行传输。与串行通信(一位一位传输)相比,在相同传输率下,并行通信的信息实际传输速度快、在相同传输率下,并行通信的信息实际传输速度快、在相同传输率下,并行通信的信息实际传输速度快、在相同传输率下,并行通信的信息实际传输速度快、信息率高。但并行通信比串行通信所用电缆多,随信息率高。但并行通信比串行通信所用电缆多,随信息率高。但并行通信比串行通信所用电缆多,随信息率高。但并行通信比串行通信所用电缆多,随着距离的增加,电缆的开销会成为突出的问题。所着距离的增加,电缆的开销会成为突出的问题。所着距离的增加,电缆的开销会成为突出的问题。所着距离的增加,电缆的开销会成为突出的问题。所以,并行通信总是
118、用在数据传输率要求较高,而传以,并行通信总是用在数据传输率要求较高,而传以,并行通信总是用在数据传输率要求较高,而传以,并行通信总是用在数据传输率要求较高,而传输距离较短的场合。输距离较短的场合。输距离较短的场合。输距离较短的场合。 9.3 串行通信口串行通信口I/O串行通信可以分为两种类型:串行通信可以分为两种类型:同步通信、异步通信。同步通信、异步通信。异步通信异步通信异步通信异步通信一个字符一个字符地传输,每个字符一位一位地传一个字符一个字符地传输,每个字符一位一位地传输,传输一个字符时,以输,传输一个字符时,以起始位起始位开始,然后传输字开始,然后传输字符本身的各位,接着传输符本身的各
119、位,接着传输校验位校验位,最后以,最后以停止位停止位结结束该字符的传输。一次传输的起始位、字符各位、束该字符的传输。一次传输的起始位、字符各位、校验位、停止位构成一组完整的信息,称为校验位、停止位构成一组完整的信息,称为帧帧(Frame)。)。帧与帧之间可有任意个帧与帧之间可有任意个空闲位空闲位。起始位之后时数据的最低位。起始位之后时数据的最低位。 在异步通信中,在异步通信中,每个每个字符字符都都要用起始位作为字符的开始要用起始位作为字符的开始和结束的标志,占用了传输的时间,所以在数据块传送时,和结束的标志,占用了传输的时间,所以在数据块传送时,为了提高效率,就要去掉这些标志,采用同步通信。为
120、了提高效率,就要去掉这些标志,采用同步通信。同步通同步通信方式不给每个字符都加起始位和停止位,而把字符顺序的信方式不给每个字符都加起始位和停止位,而把字符顺序的连接起来,组成一个数据块连接起来,组成一个数据块(首尾相连的数据串),把这样(首尾相连的数据串),把这样一个数据块称为一个信息桢。在数据的开始加上一个同步字一个数据块称为一个信息桢。在数据的开始加上一个同步字符,而在信息的末尾加有一定的差错检验字符,其格式如下:符,而在信息的末尾加有一定的差错检验字符,其格式如下:同步通信同步通信同步通信同步通信同步字符同步字符 字符字符1 字符字符2 字符字符n 校验字符校验字符数据块数据块实现串行通
121、信有专用的接口芯片,实现串行通信有专用的接口芯片,常用的有常用的有USART(通通用同步用同步/异步接收异步接收/发送器发送器)如如Intel8251和和UART(通用异步接收通用异步接收/发送器发送器)如如Ins 8250。无论是无论是UART,还是,还是USART,均能实现数据发送时所,均能实现数据发送时所需要的需要的并串转换并串转换以及数据被以及数据被CPU接收时所需要的接收时所需要的串串并转换。并转换。串行通信接口串行通信接口串行通信基础串行通信基础起始位起始位最低位最低位最高位最高位奇偶位奇偶位停止位停止位数据位数据位起始位起始位起始位起始位 逻辑逻辑逻辑逻辑0 01 1位位位位数据
122、位数据位数据位数据位 逻辑逻辑逻辑逻辑0 0或或或或1 15 5位、位、位、位、6 6位、位、位、位、7 7位、位、位、位、8 8位位位位校验位校验位校验位校验位 逻辑逻辑逻辑逻辑0 0或或或或1 11 1位或无位或无位或无位或无停止位停止位停止位停止位 逻辑逻辑逻辑逻辑1 11 1位、位、位、位、1.51.5位或位或位或位或2 2位位位位空闲位空闲位空闲位空闲位 逻辑逻辑逻辑逻辑1 1任意数量任意数量任意数量任意数量异步通信的信息格式:异步通信的信息格式: 并行通信中,传输速率以每秒钟传输多少字节来表并行通信中,传输速率以每秒钟传输多少字节来表示。而串行通信中,传输速率是用波特率来表示。所谓
123、示。而串行通信中,传输速率是用波特率来表示。所谓波特率是指单位时间内传送二进制数据的位数波特率是指单位时间内传送二进制数据的位数(简写为简写为bps)。在计算机里,每秒传输多少位和波特率的含义是。在计算机里,每秒传输多少位和波特率的含义是完全一致的。但是要注意,在最初的定义上(波特率是完全一致的。但是要注意,在最初的定义上(波特率是每秒传输离散信号的数目),每秒传输多少位和波特率每秒传输离散信号的数目),每秒传输多少位和波特率是不相同的。是不相同的。收、发双方的波特率必须一致。传输一位所需要的时间收、发双方的波特率必须一致。传输一位所需要的时间T叫叫“位周期位周期”。波特率和传输率波特率和传输
124、率例:计算串行传输5页,每页80x25个字符总共需要多少位?假设每个字符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-23
125、2C接口,使用接口,使用9针和针和25针连接器针连接器RS-232C采用负逻辑,且信号电采用负逻辑,且信号电平与平与TTL不兼容,不兼容,规定逻辑规定逻辑“1”在在-3V-15V之间,之间,逻辑逻辑“0”在在+3V+15V之间。之间。RS-232C不是不是TTL电平的接口标电平的接口标准,当计算机与外设进行通信时,准,当计算机与外设进行通信时,必须有相应的电平转换电路。通必须有相应的电平转换电路。通常采用的是常采用的是MC1488和和MC1489电电平转换器。平转换器。串行接口芯片串行接口芯片8250、8251均使用均使用TTL电平,应使用电平电平,应使用电平转换电路与转换电路与RS-232C
126、连接器连接。连接器连接。MC1488:TTL电平电平RS232电平电平 (用于发送方)(用于发送方)MC1489:TTL电平电平RS232电平电平 (用于接收方)(用于接收方)IBM PC通信端口通信端口 在微机系统中,可以有两个或多个端口连接到不同的外部设备上进行通信,如IBM PC和80X86兼容机可以连接4个通信端口,他们的编号为COM14(BIOS编号为COM03),但程序每次只能对其中一个端口进行存取。当微机加电自检时,由加电自检程序来测试通用异步收发器的4个COM端口是否存在,如果微机系统中设置了COM端口,则设置的每个COM端口的I/O地址就写到BIOS数据区的0040:0000
127、0040: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是
128、校验位(N无,O奇,E偶。端口号的分配:BIOS位,DOS为DOS串行通信口功能调用串行通信口功能调用AHAH功能功能功能功能调用参数调用参数调用参数调用参数返回参数返回参数返回参数返回参数从串行口读一个字从串行口读一个字从串行口读一个字从串行口读一个字符符符符AL=AL=输入的数据输入的数据输入的数据输入的数据4 4向串行口写一个字向串行口写一个字向串行口写一个字向串行口写一个字符符符符DLDL输出的数据输出的数据输出的数据输出的数据例:例:INPUT_CHAR DB ? :MOV AH,3INT 21HMOV INPUT _CHAR,ALBUFFER DB HELLOBUF_LEN EQU
129、 $-BUFFER :MOV BX,SEG BUFFERMOV DS,BXMOV BX, OFFSET BUFFERMOV CX,BUF_LENNEXT:MOV DL ,BXMOV AH,4INT 21HLOOP NEXT串行通信口串行通信口 BIOS功能调用功能调用(int 14h)AHAH功能功能功能功能调用参数调用参数调用参数调用参数返回参数返回参数返回参数返回参数初始化串行口初始化串行口初始化串行口初始化串行口AL=AL=初始化参数初始化参数初始化参数初始化参数( (书上图书上图书上图书上图9.129.12)DX=DX=通信口号通信口号通信口号通信口号(COM1=0,COM2=1 et
130、c)COM1=0,COM2=1 etc)AH=AH=通信口状态(书通信口状态(书通信口状态(书通信口状态(书上图上图上图上图9.139.13)AL=AL=调制解调器状态调制解调器状态调制解调器状态调制解调器状态向串行口写字向串行口写字向串行口写字向串行口写字符符符符 AL AL所写字符所写字符所写字符所写字符DX=DX=通信口号通信口号通信口号通信口号(COM1=0,COM2=1 etc)COM1=0,COM2=1 etc)写成功:写成功:写成功:写成功:AH=0AL=AH=0AL=字符。失败:字符。失败:字符。失败:字符。失败:(AH)(AH)7=1 7=1 (AL)(AL)1-61-6=
131、=通信口状态通信口状态通信口状态通信口状态从串行口读字从串行口读字从串行口读字从串行口读字符符符符DX=DX=通信口号通信口号通信口号通信口号(COM1=0,COM2=1 etc)COM1=0,COM2=1 etc)写成功:写成功:写成功:写成功:AH=0AL=AH=0AL=字符。失败:字符。失败:字符。失败:字符。失败:(AH)(AH)7=1 7=1 (AL)(AL)1-61-6= =通信口状态通信口状态通信口状态通信口状态取串行口状态取串行口状态取串行口状态取串行口状态DX=DX=通信口号通信口号通信口号通信口号(COM1=0,COM2=1 etc)COM1=0,COM2=1 etc)AH
132、=AH=通信口状态通信口状态通信口状态通信口状态AL=AL=调制解调器状态调制解调器状态调制解调器状态调制解调器状态例:两台例:两台PC机通过机通过COM2端口进行串行数据通信,端口进行串行数据通信,编写一个汇编语言程序,要求从一台编写一个汇编语言程序,要求从一台PC 机上键盘机上键盘上输入的字符传送到另一台上输入的字符传送到另一台PC机,若按下机,若按下ESC键,键,则退出程序。在程序中,则退出程序。在程序中,COM2端口初始化为端口初始化为 4800BPS,8位数据,无校验,位数据,无校验,1位终止位;位终止位;.data.datamessage db serial communicati
133、on via com2,4800,no p,1stop,8 bit data ,0ah,0dh,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 any key press is sent to other PC ,0ah,0dh db press esc to exit,$ db press esc to exit,$.code .code main procmain proc mov a
134、x,data mov ax,data mov ds,ax mov ds,ax mov ah,09 mov ah,09 mov bx,offset message mov bx,offset message int 21h int 21h mov ah,0mov ah,0 mov dx,1 mov dx,1 mov al,03ch mov al,03ch int 14h int 14hagain: mov al,01again: mov al,01 int 16h int 16h jz next jz next mov ah,0 mov ah,0 int 16h int 16h cmp al,1
135、bhcmp al,1bh je exit je exit mov ah,1mov ah,1 mov dx,1 mov dx,1 int 14h int 14h next: next: mov ah,3mov ah,3 mov dx,1 mov dx,1 int 14h int 14h and ah,1 and ah,1 cmp ah,1 cmp ah,1 jne again jne again mov ah,2mov ah,2 mov dx,1 mov dx,1 int 14h int 14h mov dl,al mov dl,al mov ah,2mov ah,2 int 21h int 2
136、1h jmp again jmp againexit:mov ah,4chexit:mov ah,4ch int 21h int 21hmain endpmain endpendend9.4 磁盘文件管理磁盘文件管理 9.4.1 BIOS磁盘存取功能磁盘存取功能 9.4.2 DOS磁盘存取功能磁盘存取功能 9.4.2 DOS磁盘存取功能磁盘存取功能 DOSDOS功能调用中断(功能调用中断(功能调用中断(功能调用中断(INT 21HINT 21H)提供了两类磁)提供了两类磁)提供了两类磁)提供了两类磁盘文件管理功能,盘文件管理功能,盘文件管理功能,盘文件管理功能,一类是一类是FCBFCB表控制方
137、式,另表控制方式,另一类是文件代号式存取方式一类是文件代号式存取方式。 当当当当用用用用户户户户需需需需要要要要打打打打开开开开或或或或建建建建立立立立一一一一个个个个文文文文件件件件时时时时,必必必必须须须须提提提提供供供供文文文文件件件件标标标标识识识识符符符符。文文文文件件件件标标标标识识识识符符符符用用用用ASCII ASCII Z Z字字字字符符符符串串串串表表表表示示示示。ASCII ASCII Z Z字字字字符符符符串串串串是是是是指指指指文文文文件件件件标标标标识识识识符符符符的的的的ASCIIASCII字字字字符符符符串串串串后后后后面面面面再再再再加加加加1 1个个个个“0
138、”“0”字字字字符符符符。文文文文件件件件标标标标识识识识符符符符的的的的字字字字符符符符串串串串包括驱动器名、路径名和文件名。其格式为包括驱动器名、路径名和文件名。其格式为包括驱动器名、路径名和文件名。其格式为包括驱动器名、路径名和文件名。其格式为d:pathfilename.exed:pathfilename.exe其中其中其中其中d d为驱动器名,为驱动器名,为驱动器名,为驱动器名,pathpath为路径名,为路径名,为路径名,为路径名,.exe.exe为文件名为文件名为文件名为文件名后缀。后缀。后缀。后缀。1建立文件(3CH)功能:按指定文件名建立文件。功能:按指定文件名建立文件。入入
139、口口参参数数:(AH)3CH,DS:DX指指向向ASCII Z字符串的段地址和偏移地址,字符串的段地址和偏移地址, (CX)文件属性。)文件属性。出口参数:若操作成功,则出口参数:若操作成功,则CF0,(AX)文件代号;)文件代号; 若若操操作作失失败败,则则CF1,(AX)错误代码。错误代码。2打开文件(打开文件(3DH)功能:打开由功能:打开由ASCII Z串指定的文件。串指定的文件。入入口口参参数数:(AH)3DH,DS:DX指指向向ASCII Z字符串的段地址和偏移地址,字符串的段地址和偏移地址, (AL)存存取取方方式式代代码码(0:读读文文件件,1:写文件,:写文件,2:读、写文件
140、)。:读、写文件)。出出 口口 参参 数数 : 若若 操操 作作 成成 功功 , 则则 CF 0,(AX)文件代号;)文件代号; 若若操操作作失失败败,则则CF1,(AX)错误代码。错误代码。3关闭文件(3EH)功能:关闭文件代号指定的文件。功能:关闭文件代号指定的文件。入入口口参参数数:(AH)3EH,(BX)文文件代号。件代号。出口参数:若操作成功,则出口参数:若操作成功,则CF0; 若操作失败,则若操作失败,则CF1,(,(AX)错误代码。错误代码。 4读文件(3FH)功能:按文件代号读取文件。功能:按文件代号读取文件。入入口口参参数数:(AH)3FH,(BX)文文件代号,(件代号,(C
141、X)要读取的字节数;)要读取的字节数; DS:DX指指向向接接收收数数据据缓缓冲冲区区的的段段地地址址和偏移地址。和偏移地址。出出 口口 参参 数数 : 若若 操操 作作 成成 功功 , 则则 CF 0,(AX)实实际际读读入入字字节节数数,(AX)0,文件结束;,文件结束; 若若操操作作失失败败,则则CF1,(AX)错误代码。错误代码。5写文件(40H)功能:按文件代号写文件。功能:按文件代号写文件。入入口口参参数数:(AH)40H,(BX)文文件件代号,(代号,(CX)要写入的字节数;)要写入的字节数; DS:DX指指向向存存放放写写入入信信息息数数据据缓缓冲冲区区的段地址和偏移地址。的段
142、地址和偏移地址。出出 口口 参参 数数 : 若若 操操 作作 成成 功功 , 则则 CF 0,(AX)写入字节数;)写入字节数; 若若操操作作失失败败,则则CF1,(AX)错误代码。错误代码。 6 . 移动文件指针(42H)功能:移动由文件代号标志的文件读写指针的位置入口参数:在bx预置文件代号,在cx:dx双字中预置移 动位移量,在 al 中预置移动方式移动方式:00h 移动后文件指针值=0+移动位移量01h 移动后文件指针值=当前文件指针值+移动位移量02h 移动后文件指针值=文件尾值+移动位移量出口参数:CF=0 表示移动成功,此时CX:DX双字中返回移动后文件指针值;CF=1 表示移动
143、失败,此时AX中返回值为1表示移动方式无效,为6表示无效的文件代号。7 7取取/ /置文件属性(置文件属性(43H43H)功能:按文件代号写文件。功能:按文件代号写文件。功能:按文件代号写文件。功能:按文件代号写文件。入入入入口口口口参参参参数数数数:(AHAH)43H43H,DSDS:DXDX指指指指向向向向ASCII ASCII Z Z串的段地址和偏移地址。串的段地址和偏移地址。串的段地址和偏移地址。串的段地址和偏移地址。 (ALAL)0 0,取取取取文文文文件件件件属属属属性性性性,(ALAL)1 1,置置置置文件属性;文件属性;文件属性;文件属性; 置置置置文文文文件件件件属属属属性性
144、性性时时时时,(CXCX)新新新新文文文文件件件件属属属属性性性性(低低低低字节)。字节)。字节)。字节)。出出出出口口口口参参参参数数数数:若若若若操操操操作作作作成成成成功功功功,则则则则CFCF0 0,若若若若为为为为取取取取属属属属性性性性,(CXCX)文件属性;)文件属性;)文件属性;)文件属性; 若若若若操操操操作作作作失失失失败败败败,则则则则CFCF1 1,(AXAX)错错错错误误误误代代代代码。码。码。码。data segmentdata segment fname db c:masmfile1.dat,0 fname db c:masmfile1.dat,0 dat db
145、80h dup(0) dat db 80h dup(0) dat1 db 80h dup(0) dat1 db 80h dup(0)data endsdata endscode segmentcode segment assume cs:code,ds:data,es:data assume cs:code,ds:data,es:datastart:mov ax,datastart:mov ax,data mov ds,ax mov ds,ax mov es,ax mov es,ax mov dx,offset fname mov dx,offset fname mov cx,0 mov cx
146、,0 mov ah,3ch mov ah,3ch int 21h int 21h mov si,ax mov si,axnew: mov bx,0new: mov bx,0 mov cx,20h mov cx,20h era:mov ah,01h era:mov ah,01h int 21h int 21h mov datbx,al mov datbx,al inc bx inc bx loop era loop era mov datbx,0ah mov datbx,0ah mov dx,offset dat mov dx,offset dat mov cx,20h mov cx,20h m
147、ov bx,si mov bx,si mov ah,40h mov ah,40h int 21h int 21h mov bx,si mov bx,si mov ah,3eh mov ah,3eh int 21h int 21h mov ah,4ch mov ah,4ch int 21h int 21h code ends code endsend startend start例:从键盘输入例:从键盘输入20个字符存放到利用扩充文件管理方式建立个字符存放到利用扩充文件管理方式建立的文件中。的文件中。data segmentdata segment fname db c:masmfile1.da
148、t,0 fname db c:masmfile1.dat,0 fname1 db c:masmfile2.dat,0 fname1 db c:masmfile2.dat,0 dta db 80h dup(0) dta db 80h dup(0) dta1 db 80h dup(0) dta1 db 80h dup(0)data endsdata endscode segmentcode segment assume cs:code,ds:data assume cs:code,ds:datastart:mov ax,datastart:mov ax,data mov ds,ax mov ds,
149、ax mov es,ax mov es,ax mov dx,offset fnamemov dx,offset fname mov al,0 mov al,0 mov ah,3dh mov ah,3dh int 21h int 21h mov si,ax mov si,ax mov bx,si mov bx,si mov dx,offset dta1mov dx,offset dta1 mov cx,10h mov cx,10h mov ah,3fh mov ah,3fh int 21h int 21h mov di,ax mov di,ax mov ah,3ehmov ah,3eh int
150、21h int 21h mov dx,offset fname1mov dx,offset fname1 mov cx,0 mov cx,0 mov ah,3ch mov ah,3ch int 21h int 21h mov si,ax mov si,ax mov dx,offset dta1mov dx,offset dta1 mov cx,di mov cx,di mov bx,si mov bx,si mov ah,40h mov ah,40h int 21h int 21h mov bx,si mov bx,si mov ah,3eh mov ah,3eh int 21h int 21
151、h mov ah,4ch mov ah,4ch int 21h int 21hcode endscode endsend startend start例:从文件例:从文件file1中读取中读取10个字符到个字符到file2文件中文件中data segmentdata segment fname db c:masmfile1.dat,0 fname db c:masmfile1.dat,0 data1 db 8,?,8 dup(?) data1 db 8,?,8 dup(?) dat1 db 3000h dup(0) dat1 db 3000h dup(0) src dw 0ah src dw
152、0ah mess1 db reading from n1=?,10,13,$ mess1 db reading from n1=?,10,13,$ mess2 db long n2=?,10,13,$ mess2 db long n2=?,10,13,$ mess3 db 10,13,$ mess3 db 10,13,$data endsdata endsstack segment stack stack segment stack dw 100 dup(0) dw 100 dup(0) top label word top label wordstack endsstack endscode
153、 segmentcode segmentmain proc farmain proc far assume cs:code,ds:data,ss:stack assume cs:code,ds:data,ss:stackstart:push dsstart:push ds sub ax,ax sub ax,ax push ax push ax mov ax,data mov ax,data mov ds,ax mov ds,ax mov es,ax mov es,ax mov ax,stack mov ax,stack mov ss,ax mov ss,ax mov dx,offset mes
154、s1 mov dx,offset mess1 mov ah,09h mov ah,09h int 21h int 21hcall inputcall input dec di dec di mov si,di mov si,di mov dx,offset mess3 mov dx,offset mess3 mov ah,9 mov ah,9 int 21h int 21h mov dx,offset mess2 mov dx,offset mess2 mov ah,9 mov ah,9 int 21h int 21hcall inputcall input mov dx,offset mes
155、s3 mov dx,offset mess3 mov ah,09h mov ah,09h int 21h int 21h mov dx,offset fname mov dx,offset fname mov al,0 mov al,0 mov ah,3dh mov ah,3dh int 21h int 21h mov bx,ax mov bx,ax mov cx,0 mov cx,0 mov dx,si mov dx,si mov al,0 mov al,0 mov ah,42h mov ah,42h int 21h int 21h 例:从文件FILE1.DAT中读文件从N1起,长度为N2的
156、字符串,并在屏幕中显示。N1 N2 为十进制数。 mov dx,offset dat1 mov dx,offset dat1 mov cx,di mov cx,di mov ah,3fh mov ah,3fh int 21h int 21h mov di,ax mov di,ax mov ah,3eh mov ah,3eh int 21h int 21h mov dx,offset mess3 mov dx,offset mess3 mov ah,09h mov ah,09h int 21h int 21h mov dx,offset dat1 mov dx,offset dat1 mov a
157、l,$ mov al,$ mov bx,di mov bx,di mov dat1bx,al mov dat1bx,al mov dx,offset dat1 mov dx,offset dat1 mov ah,9 mov ah,9 int 21h int 21h mov ah,4ch mov ah,4ch int 21h int 21hmain endp main endp input proc nearinput proc near mov dx,offset data1 mov dx,offset data1 mov ah,0ah mov ah,0ah int 21h int 21h m
158、ov bx,1 mov bx,1 mov al,data1bx mov al,data1bx mov ah,0 mov ah,0 mov cx,ax mov cx,ax mov bx,2 mov bx,2 mov di,0 mov di,0loop1: mov al,data1bxloop1: mov al,data1bx sub al,30h sub al,30h mov ah,0 mov ah,0 push ax push ax mov dx,offset mess3 mov dx,offset mess3 mov ah,9 mov ah,9 int 21h int 21h mov ax,
159、di mov ax,di mul src mul src mov di,ax mov di,ax pop ax pop ax add ax,di add ax,di mov di,ax mov di,ax inc bx inc bx loop loop1 loop loop1 ret retinput endpinput endpcode endscode endsend startend start9.4.1 BIOS磁盘存取功能磁盘存取功能 BIOSBIOS磁磁磁磁盘盘盘盘操操操操作作作作INT INT 13H13H处处处处理理理理的的的的记记记记录录录录都都都都是是是是一一一一个个个个扇
160、扇扇扇区区区区的的的的大大大大小小小小,都都都都是以实际的磁道号和扇区号寻址的。是以实际的磁道号和扇区号寻址的。是以实际的磁道号和扇区号寻址的。是以实际的磁道号和扇区号寻址的。读、写和检查磁盘文件之前,都要把下列寄存器初始化:读、写和检查磁盘文件之前,都要把下列寄存器初始化:读、写和检查磁盘文件之前,都要把下列寄存器初始化:读、写和检查磁盘文件之前,都要把下列寄存器初始化:AHAH:子功能号(读、写、检查或格式化)。:子功能号(读、写、检查或格式化)。:子功能号(读、写、检查或格式化)。:子功能号(读、写、检查或格式化)。ALAL:扇区数。:扇区数。:扇区数。:扇区数。CHCH:柱面:柱面:柱
161、面:柱面/ /磁道号(磁道号(磁道号(磁道号(0 0为起始号)。为起始号)。为起始号)。为起始号)。CLCL:起始的扇区号(:起始的扇区号(:起始的扇区号(:起始的扇区号(1 1为起始号)。为起始号)。为起始号)。为起始号)。DHDH:磁头:磁头:磁头:磁头/ /盘面号(对软盘是盘面号(对软盘是盘面号(对软盘是盘面号(对软盘是0 0或或或或1 1)。)。)。)。DLDL:驱驱驱驱动动动动器器器器号号号号(软软软软盘盘盘盘:0 0驱驱驱驱动动动动器器器器A A,1 1驱驱驱驱动动动动器器器器B B,硬硬硬硬盘盘盘盘:80H80H驱动器驱动器驱动器驱动器1 1,81H81H驱动器驱动器驱动器驱动器
162、2 2,。)。)。)。)ESES:BXBX:数据区中:数据区中:数据区中:数据区中I/OI/O缓冲区的地址。缓冲区的地址。缓冲区的地址。缓冲区的地址。1 10 0号功能号功能功能:复位磁盘系统。功能:复位磁盘系统。功能:复位磁盘系统。功能:复位磁盘系统。入口参数:(入口参数:(入口参数:(入口参数:(AHAH)0 0。出口参数:无。出口参数:无。出口参数:无。出口参数:无。这这这这个个个个操操操操作作作作执执执执行行行行对对对对磁磁磁磁盘盘盘盘控控控控制制制制器器器器的的的的硬硬硬硬件件件件复复复复位位位位。如如如如果果果果在在在在其其其其他他他他磁磁磁磁盘盘盘盘操操操操作作作作之之之之后后后
163、后调调调调用用用用这这这这个个个个功功功功能能能能,则则则则返返返返回回回回一一一一系系系系列错误。列错误。列错误。列错误。2 21 1号功能号功能功能:读磁盘状态。功能:读磁盘状态。功能:读磁盘状态。功能:读磁盘状态。入口参数:(入口参数:(入口参数:(入口参数:(AHAH)1 1。出口参数:(出口参数:(出口参数:(出口参数:(ALAL)中返回状态字节。)中返回状态字节。)中返回状态字节。)中返回状态字节。3 32 2号功能号功能功能:从指定磁盘的指定位置读取数据。功能:从指定磁盘的指定位置读取数据。功能:从指定磁盘的指定位置读取数据。功能:从指定磁盘的指定位置读取数据。入口参数:(入口参
164、数:(入口参数:(入口参数:(AHAH)2 2 (ALAL)扇区数,()扇区数,()扇区数,()扇区数,(CHCH),(),(),(),(CLCL)磁道号,扇区号)磁道号,扇区号)磁道号,扇区号)磁道号,扇区号 (DHDH),(),(),(),(DLDL)磁头号,驱动器号)磁头号,驱动器号)磁头号,驱动器号)磁头号,驱动器号 (ESES:BXBX):数据缓冲区地址):数据缓冲区地址):数据缓冲区地址):数据缓冲区地址出口参数:读成功,(出口参数:读成功,(出口参数:读成功,(出口参数:读成功,(AHAH)0 0,(,(,(,(ALAL)读出的扇区数;)读出的扇区数;)读出的扇区数;)读出的扇区
165、数; 读失败,(读失败,(读失败,(读失败,(AHAH)出错代码。)出错代码。)出错代码。)出错代码。4 43 3号功能号功能功能:向指定磁盘的指定位置写数据。功能:向指定磁盘的指定位置写数据。功能:向指定磁盘的指定位置写数据。功能:向指定磁盘的指定位置写数据。入口参数:(入口参数:(入口参数:(入口参数:(AHAH)3 3 (ALAL)扇区数,()扇区数,()扇区数,()扇区数,(CHCH),(),(),(),(CLCL)磁道号,扇区号)磁道号,扇区号)磁道号,扇区号)磁道号,扇区号 (DHDH),(),(),(),(DLDL)磁头号,驱动器号)磁头号,驱动器号)磁头号,驱动器号)磁头号,驱
166、动器号 (ESES:BXBX):数据缓冲区地址):数据缓冲区地址):数据缓冲区地址):数据缓冲区地址出口参数:写成功,(出口参数:写成功,(出口参数:写成功,(出口参数:写成功,(AHAH)0 0,(,(,(,(ALAL)写入的扇区数;)写入的扇区数;)写入的扇区数;)写入的扇区数; 写失败,(写失败,(写失败,(写失败,(AHAH)出错代码。)出错代码。)出错代码。)出错代码。 5 54 4号功能号功能功能:检验磁盘扇区。功能:检验磁盘扇区。功能:检验磁盘扇区。功能:检验磁盘扇区。入口参数:(入口参数:(入口参数:(入口参数:(AHAH)4 4(ALAL)扇区数,()扇区数,()扇区数,()
167、扇区数,(CHCH),(),(),(),(CLCL)磁道号,扇区号)磁道号,扇区号)磁道号,扇区号)磁道号,扇区号(DHDH),(),(),(),(DLDL)磁头号,驱动器号)磁头号,驱动器号)磁头号,驱动器号)磁头号,驱动器号出出出出口口口口参参参参数数数数:检检检检查查查查成成成成功功功功,(AHAH)0 0,(ALAL)检检检检验验验验的的的的扇扇扇扇区数;区数;区数;区数; 检查失败,(检查失败,(检查失败,(检查失败,(AHAH)出错代码。)出错代码。)出错代码。)出错代码。本章小结 对外设进行控制,使用其完成输入/输出工作。汇编语言能直接控制硬件工作,因此成为编写高性能输入/输出程序最有效的程序设计语言。 本章在中断调用指令的基础上详细讲解了BIOS中断调用和DOS系统功能调用的使用方法。分别介绍了键盘、显示器、磁盘文件的输入/输出方法,以及两种调用的区别,并举例说明了常见的输入/输出程序的编写方法。在今后如果用到中断调用的其他功能,可以查看有关资料。