IBM-PC汇编语言程序设计第14章-BIOS和DOS-中断课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《IBM-PC汇编语言程序设计第14章-BIOS和DOS-中断课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IBM PC 汇编语言 程序设计 14 BIOS DOS 中断 课件
- 资源描述:
-
1、 第第14章章 BIOS和和DOS 中断中断 MS_DOS系统中,有两层内部子程序可供用户调用:基本输入输出子程序BIOS层的功能模块以及DOS层的功能模块。这些子程序对于程序员来讲都可以看成是中断处理程序,它们的入口地址都存在中断矢量表中。用户使用功能号及相应的软件中断指令就可以直接调用它们,这就在很大程度上方便了程序员对这些微机系统功能的扩充与开发。驻留在内存较高地址区域0FE000H开始的8KROM中装有基本输入输出系统BIOS(Basic Input/Output System),提供了系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块用来处理系统中断。使用BIOS
2、功能调用,使程序员不必了解硬件I/O接口的特性,可直接使用指令来设置参数,然后调用BIOS中的程序,所以利用BIOS功能调用所编写的程序就更加简单明了,其可读性好,而且更加易于移植。BIOS已固化在EPROM中而成为固件。磁盘操作系统DOS(Disk Operrating System)是IBM_PC机中最重要的操作系统,它有二个DOS模块:IBMBIO.COM和IBMDOS.COM。因为DOS模块提供了更多更必要的测试,使DOS操作比使用相应功能的BIOS操作更简易,并且DOS对硬件的依赖性更少些。在编程中的某些情况下,我们既可选择DOS中断也可以选择BIOS中断来执行相同的功能。例如,打印
3、机输出一个字符的功能,可用中断类型号为21H的DOS功能调用中的功能号5,也可以用中断类型号为17H的BIOS功能调用中的功能号0。由于BIOS比DOS更靠近硬件,在一般情况下尽可能地使用DOS功能调用,但在少数情况下,必须使用BIOS功能,因为它没有等效的DOS功能。在内存单元最低的1K个字节单元的中断矢量表中,可以存放256(0FFH)个中断子程序的入口地址。对这些中断调用是通过软中断指令INT来实现的。中断指令的操作数就是中断类型码。如:INT n。中断调用的类型码及其功能,请参阅附录F。14.1 键盘I/O键盘是计算机用来输入信息的最基本输入设备,是人机对话的主要界面。键盘上的按键可分
4、成以下3种基本类型:(1)字符数字等按键:字母A(A)Z(Z),数字09及#,$,%,&,等常用的符号,这些字符数字键可向计算机传输ASCII码字符;(2)扩展功能的按键:Home,PgUp,PgDn,End,BackSpacd,Ins,Del,Enter,等以及程序功能按键F1F10等,这些键按下将产生一个动作,如按下End键将使光标移到屏幕上现行行文本的末尾;(3)和其它键组合使用的控制键:Alt,Ctrl以及Shift等,利用组合控制键能够改变其它键所产生的字符码,如,直接按8键,屏幕显示8,而当先按Shift键不放再按8键,则在清华紫光的中文状态下结果为;在DOS状态下按Shift8的
5、结果是*号。键盘上有的按键存在对应的ASCII码;有的没有,如F1F10的功能键,但键盘上的每个键都对应一个扫描码,从ESC(01)DEL(83),我们就可以根据扫描码唯一确定是哪个键改变了其状态。表141为按键与其对应的扫描码(十六进制表示)。14.1.1 BIOS键盘中断键盘中断我们利用键盘进行通信,可以使用DOS功能调用,也可以使用BIOS功能调用。BIOS功能调用中的中断类型码16H,提供了基本的键盘操作,中断类型码16H的中断处理程序包括3个不同的功能,由AH寄存器的内容来选择。AH中存放的是调用功能号,可看成是某中断类型号中的菜单号。AH=0功能:从键盘读一字符。调用返回参数:AL
6、=字符的ASCII码,AH=键盘扫描码。调用示例:MOV AH,0INT 16H2AH1功能:读键盘缓冲区的字符,该子功能检查键盘是否有字符输入。调用返回:(1)若有键已按下在等待输入:ZF=0AH=键盘扫描码AL=字符的ASCII码(2)如无键按下:ZF=1,缓冲区为空。3AH2 功能:读键盘功能转换键返回参数:AL=键盘状态字节,其各状态位意义如下:当状态位为1时的含义。D7:Insert打开D6:Caps Lock打开D5:Num Lock打开D4:Scroll Lock打开D3:Alt键按下D2:Ctrl键按下D1:Left-shift键按下D0:Rghit-shift键按下调用例子:
7、要查看键盘的大写/小写状态,可编制以下的程序段:MOV AH,02HINT 16HTEST AL,40H ;测试CAPS LOCK键JNZ CAPS ;大写转CAPS ;小写CAPS:;大写 Ctrl-Break键。INT 21H的功能号8不回显字符,但检验Ctrl-Break键。单字符输入功能(前面章节已有介绍)的用途是很明显的,如:在交互程序中,常需要用户对一个提示做出应答,或通过输入一个字母或数字对菜单的项进行选择,这都要使用单字符的输入功能。【例141】编写程序段实现:当程序显示出一串信息时,要求回答Y或N,回答Y,程序转入标号为YES的程序段;回答N使程序转入标号为NO的程序段,而按
8、下其它键,程序就返回等待再按键。;设已显示一串信息INKEY:MOV AH,1 ;INT 21HCMP AL,YJZ YES ;是大写Y转YESCMP AL,yJZ YES ;是小写Y转YES,有这两步就可识别大小写CMP AL,NJZ NOCMP AL,nJZ NOJMP INKEYYES:NO:如果想要检测Enter(Return)的键是否已按下,就要求在指令中写出它的ASCII码0DH或13。如要求程序只有在按下Enter(Return)键后才能继续运行,可使用下面的指令序列:WENTER:MOV AH,7 ;使用7号功能,使按下的字符不回显INT 21HCMP AL,0DHJNZ WE
9、NTER ;不是回车键,返回继续按键如果要求程序能够接收功能键或数字组合键必须进行两次DOS调用,第一次回送00,第二次回送扫描码。【例142】当用户通过键入F1,F2或F3来选择3个不同的程序模块,若按下其它键输出错误信息,其检测与识别的主要程序段为:MOV AH,7INT 21HCMP AL,0 ;是功能键吗?JZ GLJ ;是,转GLJJMP ERROR ;不是功能键,转出错处理GLJ:MOV AH,7INT 21HCMP AL,3BH ;F1的扫描码为3BHJZ CXD1 ;是F1键按下,转程序段1 CMP AL,3CH ;是F2吗?JZ CXD2CMP AL,3DH ;是F3吗?JZ
10、 CXD3JMP ERROR ;按其它功能键,也转出错处理 2输入字符串输入字符串 在编写程序的过程中,需要用户输入姓名、地址、菜单项字符串或其它字符串等,DOS功能调用的中断类型号21H内的功能号0AH(10),能从键盘读入一串字符并把它存入程序员自己定义的缓冲区中。缓冲区的第一个字节存入缓冲区能接收的预订字符个数,该数值由程序员设置,其数值的范围为1255,不可为0,因为缓冲区只用一个字节存放字符数,所以预订的最大数为255;缓冲区的第二个字节存入本次调用实际输入的字符数(不含回车键),该值由DOS调用返回时系统自动填入;从缓冲区的第三个字节开始存放从键盘输入的字符,若实际输入的字符少于定
11、义的字节数,则多余字节补上零,但如果实际输入的字符多于事先预订的字节数,则多余字符将被略去,且响铃提示,直到输入一个回车键才算结束。字符串按字节存入缓冲区,最后结束字符串的回车符0DH还要占用一个字节,因此整个缓冲区的字节空间应为实际输入的最大字符数加2(包含系统自动填入的实际字符数与回车键0DH在内),实际字符数不包含回车键0DH。【例143】编写在数据区定义字符缓冲区以及输入字符串的指令集。LENMAX DB 100 ;字符缓冲区的定义ACTLEN DB?STRING DB 100 DUP(?);输入字符串指令为:MOV DX,OFFSET LENMAXMOV AH,0AHINT 21H
12、INT 21H的功能号0AH把实际字符数(不包括回车键0DH)填入缓冲区的第二个字节,并保持指针DS:DX指向缓冲区的第一个字节。注:从键盘输入字符串到内存缓冲区的同时,并自动送显示器显示。0AH功能号调用时,要求指针DS:DX指向整个缓冲区首地址。【例144】从键盘输入一组字符串信息。本程序将接收键入字符串并显示,直到遇回车键结束输入。DATA SEGMENTMESS1 DB 10 ;设置缓冲区空间 DB?DB 10 DUP(?)DATA ENDSSTAK SEGMENT STACK DB 100 DUP(?)STAK ENDSCODE SEGMENT ASSUME CS:CODE,DS:D
13、ATASTART:MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESS1;置缓冲区地址指针MOV AH,0AHINT 21H MOV 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 A
14、SSUME CS:CODE,DS:DATA GO:MOV AX,DATA MOV DS,AX LEA DX,DA1 ;指针指向缓冲区首址 MOV 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
15、 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,0CHMOV AL,7INT 21H 这几条指令序列,是先清除键盘缓冲区,实际提供的是输入功能7,它不回显,不检测Ctrl-
16、Break或Ctrl_C来结束程序。4.检验键盘状态检验键盘状态DOS功能调用INT 21H的功能号0BH,能够检验一个键是否被按动,如果一个键被按下,就在AL寄存器中存入0FFH,如果键没有被按下,那就在AL中存放00H。请读者注意:无论是哪一种情况,都将继续执行程序中的下一条指令。有时这种功能是很有用的,例如,我们希望程序保持运行的状态,同时又可以检验键盘,看用户是否按下任意一个键来终止程序或是退出循环。【例145】用按键结束循环的例子。LOP:MOV AH,0BH ;检测键盘有键按下否INT 21HCMP AL,0JE LOP ;没有键按下,AL0NEXT1:以上指令序列的特点是,在未按
17、键之前,程序总是不断地执行循环,只要有按下任何一个键,程序就可以退出循环。14.2 显示器显示器I/O 单色适配器只能显示字符,只可用于显示黑白效果。字符由标准字母、数字、符号,加上一些简单图形所组成。如果显示器的屏幕被划分成80列25行,适配器就是在这个2000个(2580)网格位置上显示字符。屏幕上的每个字符位置都是与显示缓冲区中相应的存储单元一一对应,我们称此屏幕是“存储器映象”的。14.2.1 显示属性显示属性 单色显示的屏幕上,每个字符在存储器中都由两个字节表示,一个字节存放字符的ASCII码,另一个字节保存该字符的属性。字符的属性确定了要显示字符的特性,如字符是否要闪烁显示,是否需
18、要加亮,是否要反相显示。代表单色显示属性的字节各位含义如图141所示。2设置光标位置设置光标位置 利用BIOS功能调用INT 10H的功能号2设置光标位置。在字符显示方式下,设置字符坐标。功能调用前的设置:AH=02HBH=页号(在当前屏幕显示时,BH=0)DH=行号(Y坐标)DL=列号(X坐标)当屏幕显示25行,每行80个字符时,行与列设在(0,0)位置是屏幕的左上角,(24,79)是屏幕的右下角。BH中必须包含被输出的页号,对单色显示器来说,页号总是0。【例146】置光标的大小:开始行(扫描行)为0,结束行为3;置光标的位置:光标设置在第10行(字符行)第20列。编写的指令序列如下:MOV
19、 CH,0MOV CL,3MOV AH,1INT 10H ;控制光标大小;-MOV DH,9 ;第10行MOV DL,19 ;第20列MOV BH,0 ;页0MOV AH,2INT 10H 3读光标位置读光标位置 利用BIOS功能调用INT 10H的功能号3都光标的位置。在字符显示方式下,返回的是屏幕上光标的当前位置以及光标的大小。页号必须在BH中指定。功能调用之前:AH=03HBH=00H 在完成子功能调用之后,将把光标的位置行号回送给DH,列号回送给DL;光标大小的参数填入CH(光标开始行)和CL(光标结束行),实际上,在CH和CL中回收的是用功能号1所设置的光标参数。返回的光标位置和光标
20、大小的寄存器是:DH=光标当前行号(字符行)DL=光标当前列号CH=光标的起始线(扫描线)CL=光标的结束线 4读光笔位置读光笔位置BIOS功能调用的INT 10H中功能号4,是读取光笔的位置。其功能调用为:MOV AH,04HINT 10H此子功能调用返回时:当AH=0,表示光笔未触发;若AH=1,表示光笔已触发;返回的光笔位置为:DH=字符行DL=字符列CX=象素行BX=象素列 5.选择当前显示页选择当前显示页 利用BIOS功能调用INT 10H的功能号5是选择当前显示页,显示存储器可以存储几页(或屏)的显示信息,但是一次只能在屏幕上显示一页的信息,正在显示的那一页称为当前页(Active
21、 display page)。功能号05H就是选择哪一页作为当前显示页。对于不同的显示方式,适配器可用的页号也不同,如:显示方式 可用页号0,1 07(CGA)2,3 03(CGA)2,3,0DH 07(EGA)0EH 03(EGA)0FH,10H 01(EGA)功能调用前:AH05HAL当前显示页号如显示当前页:MOV AH,5MOV AL,0INT 10H 6清屏和屏幕上卷清屏和屏幕上卷 利用BIOS功能调用INT 10H的功能号6,能使屏幕内容上卷指定的行,这个功能需要设置7个参数:AH=06HAL=上卷行数(如AL=0,实际完成清屏幕功能)BH=新插入行的字符属性CH=上卷的左上角行号
22、CL=上卷的左上角列号DH=上卷的右下角行号DL=上卷的右下角列号 如果上卷屏幕的起始行列号不为(0,0),而结束的行列号不是(24,70),这里假设一个屏幕显示的字符为8025,则屏幕只有指定的那部分才具有上卷的功能,这个屏幕上的部分区域就称为窗口(Window),象这样的窗口可以在屏幕上设置多个,且都可独立使用。如果上卷超过指定窗口的顶部,这些行的内容就会被丢失,出现在窗口底部的新行被填为空格,其属性应由BH寄存器决定。如果AL=0,其实际完成的工作是清除屏幕的功能,或使指定的窗口为空白状态。7清屏和屏幕下卷 利用BIOS功能调用INT 10H的功能号7和功能号6相类似,也可使屏幕(或窗口
23、)初始化或使屏幕(或窗口)的内容下卷指定的行。这个功能也需要设置7个参数,子功能调用前:AH=07HAL=下卷行数(如AL=0,则指定屏幕上为空白)BH新插入行的字符属性CH=下卷的左上角行号CL=下卷的左上角列号DH=下卷的右下角行号DL=下卷的右下角列号 【例147】清除左上角行列号为(0,0),右下角行列号为(24,39)的窗口,初始化为反相显示,则这窗口相当于全屏幕的左半部分。MOV AH,7MOV AL,0MOV BH,70H ;反相显示MOV CH,0MOV CL,0MOV DH,24MOV DL,39INT 10H 【例148】要求编制一个完整的源程序,实现在屏幕的中部建立一个2
24、0列宽,9个字符行的窗口,并把键入的内容在这个窗口中显示出来。键入的字符在窗口的最下面一行显示,每当输入 20个字符,该行就向上卷动1行,当9行字符输入完后再输入,则顶端1行的内容就会丢失,以此就发生向上卷动。STAK SEGMENT STACKDB 100 DUP(?)STAK ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODESTART:PUSH DSSUB AX,AXPUSH AX;清屏幕并设置上卷功能MOV AH,6MOV AL,0 ;清屏MOV CH,0MOV CL,0MOV DH,24MOV DL,79MOV BH,07H ;显示属性,黑底白字I
25、NT 10H;-SZGB:MOV AH,2 ;设置光标位置MOV DH,16 ;16行MOV DL,30 ;30列MOV BH,0 ;0页INT 10H;-MOV CX,20 ;每行输入20个字符SRZH:MOV AH,1 ;输入字符 INT 21H ;DOS 21H的功能1调单字符输入CMP AL,1BH;判AL中是否为ESC键的ASCII码 JZ DONELOOP SRZH;MOV AH,6 ;设置上卷功能MOV AL,1 ;每次上卷一行MOV CH,8 ;左上角(,30)MOV CL,30 ;MOV DH,16 ;右下角(16,50)MOV DL,50 ;MOV BH,07HINT 10
展开阅读全文