安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章第9章BIOS和DOS中断调用程序设计•9.1键盘输入中断调用•9.2显示器输出中断调用开始安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章DOS中断和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章DOS中断和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—5715盒式磁带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,0int16hmovah,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,7int21hcmpal,3bh;F1jeoption1cmpal,3ch;F2jeoption2movah,4chint21hcodeendsend如果程序要求能接收功能键或数字组合键必须进行两次DOS功能调用:第一次回送00第二次回送扫描码例9-4检测键盘输入的功能键。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章datasegmentsmaxdb21sactdb?stridb21dup(?)dataendscodesegmentassumecs:code,ds:dataStart:movax,datamovds,axleadx,strimovah,0ahint21hmovah,4chint21hcodeendsEndstart(1)smaxdb21sactdb?stridb21dup(?)(2)smaxdb21db?db21dup(?)(3)smaxdb21,?,21dup(?)例9-5输入字符串程序2)输入字符串安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章Int21的功能0ch能清除键盘缓冲区,然后执行在AL中指定的功能。AL中指定的功能可以是1,6,7,8或0AH。…movah,0chmoval,08hint21hincaljeexit…Exit:3)清除键盘缓冲区安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章例编写按任意键结束程序的程序段…movah,0bhint21hincaljeexit…Exit:4)检验键盘状态安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章显示器可以简单的分为单色显示器和彩色显示器。随着显示技术的发展,种类也更加丰富,常见的有阴极摄像管(CRT)、液晶显示器、等离子显示器等。显示器是通过显卡与主机相连。显示器的显示屏通常称之为屏幕,现在常用的显示器有14和17,常用的显示分辨率为800×600或1024×768等。常用的显示卡类型为VGA、SVGA、EVGA和TVGA等,显示卡上也都带有大量的显示存储器,能快速显示精美的图象。1.MDAMDA(MonochromeDisplayAdapter)属于单色显示适配器,是IBM最早研制的视频显示适配器。2.CGA在MDA推出的同时,IBM也推出了彩色图形显示适配器──CGA(ColorGraphicsAdapter)。9.2显示器I/O安徽理工大学计算机科学与技术系李敬兆《汇编语言》第9章3.EGA增强图形显示适配器──EGA(EnhancedGraphicsAdapter)是IBM公司推出的第二代图形显示适配器,它兼容了MDA和CGA的全部功能。4.VGA视频图形阵列显示适配器──VGA(VideoGraphicsArray)是IBM公司推出的第三代图形显示适配器,它兼容了MDA、CGA和E