IBM-PC汇编语言程序设计 教学课件 ppt 作者 余朝琨 第14章 BIOS和DOS 中断

上传人:E**** 文档编号:89189188 上传时间:2019-05-21 格式:PPT 页数:95 大小:1.04MB
返回 下载 相关 举报
IBM-PC汇编语言程序设计 教学课件 ppt 作者 余朝琨 第14章 BIOS和DOS 中断_第1页
第1页 / 共95页
IBM-PC汇编语言程序设计 教学课件 ppt 作者 余朝琨 第14章 BIOS和DOS 中断_第2页
第2页 / 共95页
IBM-PC汇编语言程序设计 教学课件 ppt 作者 余朝琨 第14章 BIOS和DOS 中断_第3页
第3页 / 共95页
IBM-PC汇编语言程序设计 教学课件 ppt 作者 余朝琨 第14章 BIOS和DOS 中断_第4页
第4页 / 共95页
IBM-PC汇编语言程序设计 教学课件 ppt 作者 余朝琨 第14章 BIOS和DOS 中断_第5页
第5页 / 共95页
点击查看更多>>
资源描述

《IBM-PC汇编语言程序设计 教学课件 ppt 作者 余朝琨 第14章 BIOS和DOS 中断》由会员分享,可在线阅读,更多相关《IBM-PC汇编语言程序设计 教学课件 ppt 作者 余朝琨 第14章 BIOS和DOS 中断(95页珍藏版)》请在金锄头文库上搜索。

1、第14章 BIOS和DOS 中断 14.1 键盘I/O 14.2 显示器I/O 14.3 打印机I/O 14.4 串行通讯口I/O 14.5 显示方式 14.6 文本方式 14.7 字符图形 14.8 彩色图形 14.9 磁盘文件管理, 第14章 BIOS和DOS 中断 MS_DOS系统中,有两层内部子程序可供用户调用:基本输入输出子程序BIOS层的功能模块以及DOS层的功能模块。这些子程序对于程序员来讲都可以看成是中断处理程序,它们的入口地址都存在中断矢量表中。用户使用功能号及相应的软件中断指令就可以直接调用它们,这就在很大程度上方便了程序员对这些微机系统功能的扩充与开发。 驻留在内存较高地

2、址区域0FE000H开始的8KROM中装有基本输入输出系统BIOS(Basic Input/Output System),提供了系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块用来处理系统中断。使用BIOS功能调用,使程序员不必了解硬件I/O接口的特性,可直接使用指令来设置参数,然后调用BIOS中的程序,所以利用BIOS功能调用所编写的程序就更加简单明了,其可读性好,而且更加易于移植。BIOS已固化在EPROM中而成为固件。 磁盘操作系统DOS(Disk Operrating System)是IBM_PC机中最重要的操作系统,它有二个DOS模块:IBMBIO.COM和IB

3、MDOS.COM。因为DOS模块提供了更多更必要的测试,使DOS操作比使用相应功能的BIOS操作更简易,并且DOS对硬件的依赖性更少些。在编程中的某些情况下,我们既可选择DOS中断也可以选择BIOS中断来执行相同的功能。例如,打印机输出一个字符的功能,可用中断类型号为21H的DOS功能调用中的功能号5,也可以用中断类型号为17H的BIOS功能调用中的功能号0。由于BIOS比DOS更靠近硬件,在一般情况下尽可能地使用DOS功能调用,但在少数情况下,必须使用BIOS功能,因为它没有等效的DOS功能。,在内存单元最低的1K个字节单元的中断矢量表中,可以存放256(0FFH)个中断子程序的入口地址。对

4、这些中断调用是通过软中断指令INT来实现的。中断指令的操作数就是中断类型码。如:INT n。 中断调用的类型码及其功能,请参阅附录F。 14.1 键盘I/O 键盘是计算机用来输入信息的最基本输入设备,是人机对话的主要界面。键盘上的按键可分成以下3种基本类型: (1)字符数字等按键:字母A(A)Z(Z),数字09及#,$,%,&,等常用的符号,这些字符数字键可向计算机传输ASCII码字符; (2)扩展功能的按键:Home,PgUp,PgDn,End,BackSpacd,Ins,Del,Enter,等以及程序功能按键F1F10等,这些键按下将产生一个动作,如按下End键将使光标移到屏幕上现行行文本

5、的末尾; (3)和其它键组合使用的控制键:Alt,Ctrl以及Shift等,利用组合控制键能够改变其它键所产生的字符码,如,直接按8键,屏幕显示8,而当先按Shift键不放再按8键,则在清华紫光的中文状态下结果为;在DOS状态下按Shift8的结果是*号。 键盘上有的按键存在对应的ASCII码;有的没有,如F1F10的功能键,但键盘上的每个键都对应一个扫描码,从ESC(01)DEL(83),我们就可以根据扫描码唯一确定是哪个键改变了其状态。表141为按键与其对应的扫描码(十六进制表示)。, 14.1.1 BIOS键盘中断 我们利用键盘进行通信,可以使用DOS功能调用,也可以使用BIOS功能调用

6、。 BIOS功能调用中的中断类型码16H,提供了基本的键盘操作,中断类型码16H的中断处理程序包括3个不同的功能,由AH寄存器的内容来选择。AH中存放的是调用功能号,可看成是某中断类型号中的菜单号。 AH=0 功能:从键盘读一字符。 调用返回参数:AL=字符的ASCII码,AH=键盘扫描码。 调用示例: MOV AH,0 INT 16H 2AH1 功能:读键盘缓冲区的字符,该子功能检查键盘是否有字符输入。 调用返回:(1)若有键已按下在等待输入: ZF=0 AH=键盘扫描码 AL=字符的ASCII码 (2)如无键按下:ZF=1,缓冲区为空。 3AH2 功能:读键盘功能转换键 返回参数:AL=键

7、盘状态字节,其各状态位意义如下:,当状态位为1时的含义。 D7:Insert打开 D6:Caps Lock打开 D5:Num Lock打开 D4:Scroll Lock打开 D3:Alt键按下 D2:Ctrl键按下 D1:Left-shift键按下 D0:Rghit-shift键按下 调用例子:要查看键盘的大写/小写状态,可编制以下的程序段: MOV AH,02H INT 16H TEST AL,40H ;测试CAPS LOCK键 JNZ CAPS ;大写转CAPS ;小写 CAPS: ;大写 ,Ctrl-Break键。INT 21H的功能号8不回显字符,但检验Ctrl-Break键。 单字符

8、输入功能(前面章节已有介绍)的用途是很明显的,如: 在交互程序中,常需要用户对一个提示做出应答,或通过输入一个字母或数字对菜单的项进行选择,这都要使用单字符的输入功能。 【例141】 编写程序段实现:当程序显示出一串信息时,要求回答Y或N,回答Y,程序转入标号为YES的程序段;回答N使程序转入标号为NO的程序段,而按下其它键,程序就返回等待再按键。 ;设已显示一串信息 INKEY: MOV AH,1 ; INT 21H CMP AL,Y JZ YES ;是大写Y转YES CMP AL,y JZ YES ;是小写Y转YES,有这两步就可识别大小写 CMP AL,N JZ NO CMP AL,n

9、JZ NO JMP INKEY YES: NO: ,如果想要检测Enter(Return)的键是否已按下,就要求在指令中写出它的ASCII码0DH或13。如要求程序只有在按下Enter(Return)键后才能继续运行,可使用下面的指令序列: WENTER: MOV AH,7 ;使用7号功能,使按下的字符不回显 INT 21H CMP AL,0DH JNZ WENTER ;不是回车键,返回继续按键 如果要求程序能够接收功能键或数字组合键必须进行两次DOS调用,第一次回送00,第二次回送扫描码。 【例142】 当用户通过键入F1,F2或F3来选择3个不同的程序模块,若按下其它键输出错误信息,其检测

10、与识别的主要程序段为: MOV AH,7 INT 21H CMP AL,0 ;是功能键吗? JZ GLJ ;是,转GLJ JMP ERROR ;不是功能键,转出错处理 GLJ: MOV AH,7 INT 21H CMP AL,3BH ;F1的扫描码为3BH JZ CXD1 ;是F1键按下,转程序段1 CMP AL,3CH ;是F2吗? JZ CXD2 CMP AL,3DH ;是F3吗? JZ CXD3 JMP ERROR ;按其它功能键,也转出错处理,2输入字符串 在编写程序的过程中,需要用户输入姓名、地址、菜单项字符串或其它字符串等,DOS功能调用的中断类型号21H内的功能号0AH(10),

11、能从键盘读入一串字符并把它存入程序员自己定义的缓冲区中。缓冲区的第一个字节存入缓冲区能接收的预订字符个数,该数值由程序员设置,其数值的范围为1255,不可为0,因为缓冲区只用一个字节存放字符数,所以预订的最大数为255;缓冲区的第二个字节存入本次调用实际输入的字符数(不含回车键),该值由DOS调用返回时系统自动填入;从缓冲区的第三个字节开始存放从键盘输入的字符,若实际输入的字符少于定义的字节数,则多余字节补上零,但如果实际输入的字符多于事先预订的字节数,则多余字符将被略去,且响铃提示,直到输入一个回车键才算结束。 字符串按字节存入缓冲区,最后结束字符串的回车符0DH还要占用一个字节,因此整个缓

12、冲区的字节空间应为实际输入的最大字符数加2(包含系统自动填入的实际字符数与回车键0DH在内),实际字符数不包含回车键0DH。,【例143】 编写在数据区定义字符缓冲区以及输入字符串的指令集。 LENMAX DB 100 ;字符缓冲区的定义 ACTLEN DB ? STRING DB 100 DUP(?) ;输入字符串指令为: MOV DX,OFFSET LENMAX MOV AH,0AH INT 21H INT 21H的功能号0AH把实际字符数(不包括回车键0DH)填入缓冲区的第二个字节,并保持指针DS:DX指向缓冲区的第一个字节。 注:从键盘输入字符串到内存缓冲区的同时,并自动送显示器显示。

13、0AH功能号调用时,要求指针DS:DX指向整个缓冲区首地址。,【例144】 从键盘输入一组字符串信息。 本程序将接收键入字符串并显示,直到遇回车键结束输入。 DATA SEGMENT MESS1 DB 10 ;设置缓冲区空间 DB ? DB 10 DUP(?) DATA ENDS STAK SEGMENT STACK DB 100 DUP(?) STAK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESS1 ;置缓冲区地址指针 MOV AH,0AH INT 21H MO

14、V AX,4C00H INT 21H CODE ENDS END START,对DOS功能调用INT 21H中的功能号0AH,所输入的字符串的实际字符会显示在屏幕上,如果调用字符串显示功能号9重新在下一行再显示一次,其源程序如下所示: DATA SEGMENT DA1 DB 10 DB ? DB 10 DUP(?) DATA ENDS STAK SEGMENT STACK DW 100 DUP(?) STAK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA GO: MOV AX,DATA MOV DS,AX LEA DX,DA1 ;指针指向缓冲区首址 MOV

15、AH,10 ;输入字符串功能号 INT 21H LEA BX,DA1 MOV AL,DA1+1 ;取实际输入的字符个数 MOV AH,0 ADD BX,AX ;形成地址指针(偏移量) MOV BYTE PTR BX+2,$ ;用$取代0DH MOV AH,2 ;回车换行 MOV DL,10 INT 21H MOV DL,13 INT 21H LEA DX,DA1+2 ;指针指向实际输入字符首址 MOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS END GO,3清除键盘缓冲区 从键盘输入的字符实际上是先存放在一个16字节的键盘缓冲区内,功能1,7,8和0AH实际上都是从键盘缓冲区取得字符的DOS功能调用的功能号。 DOS功能调用INT 21H的功能号AH=0CH,能够清除键盘缓冲区,而后执行存在AL中所指定的功能号,AL指定的功能号可以是1,6,7,8或0AH,我们可以利用功能号0CH使得在程序输入一个字符之前,将以前所键入的字符清除。 功能号0CH的使用示例: MOV AH,0CH MOV AL,7 INT 21H 这几条指令序列,是先清除键盘缓冲区,实际提供的是输入功能7,它不回显,不检测Ctrl-Break或Ctrl_C来结束程序。 4. 检验键盘状态 DOS功能调用INT 21H的功能号0BH,能够检验一个键是否被按动,如果一个

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号