汇编入门与精通3.ppt
《汇编入门与精通3.ppt》由会员分享,可在线阅读,更多相关《汇编入门与精通3.ppt(77页珍藏版)》请在三一文库上搜索。
1、第九章 BIOS和DOS中断,1 BIOS与DOS中断调用概述 2 键盘I/O程序设计 3 显示器I/O程序设计 4 BIOS及DOS的时间功能调用,BIOS与DOS中断调用概述,在实际应用中,PC机与外部设备的传送数据大部分采用中断方式来实现,在主机系统主板上较高地址的ROM中,驻留着基本输入/输出系统(basic input / output system BIOS)的程序,它提供了系统加电自检、引导并装入操作系统、主要的I/O设备的处理程序等功能。用户可在不必了解中断服务程序的内部结构的基础上来使用中断服务程序。DOS是磁盘操作系统,是由BIOS在开机后自动装入内存的,DOS中断是建立在
2、BIOS之上的中断,它借用了BIOS软中断的功能来调用系统的中断服务程序。,键盘I/O程序设计,1.基础知识 键盘是计算机最基本的输入设备,键盘上的键主要分成三种基本类型键:字符键、功能键、组合控制键。 (1)字符码与扫描码 键盘上的每一个键都有一个按位置进行的编码:扫描码,用户每按下一个键,都会产生一个键盘中断,BIOS中的键盘中断处理程序根据读到的扫描码就能唯一确定按下了哪个键。如果按下的是字符键,键盘处理程序求出对应的ASCII码,把扫描码和ASCII码一起存入一个BIOS定义的键盘缓冲区中;如果按下的不是字符键,就把扫描码和一个全0字节一起存入键盘缓冲区。,(2)键盘缓冲区 由于所按键
3、并不会马上被用户读取,所以在BIOS的参数区中,定义了一个键盘输入缓冲区,它的位置在内存0040:001AH处,结构如下: 0040:001A BUFF_HEAD DW ? ;首指针 0040:001C BUFF_TAIL DW ? ;尾指针 0040:001 KB_BUFFER DW 16 DUP (?) ;16个字的缓冲区 0040:001 KB_BUFFER_END LABEL WORD;尾地址,2.BIOS键盘功能调用 BIOS提供的键盘中断类型号为16H,它的中断处理程序又分为3个功能,通过AH中的功能号来选择。 (1) 0号功能从键盘读入字符 输入参数:AH=0 返回结果:AH=键
4、入字符的扫描码 AL=键入字符的ASCII码(如按下的是字符键) 或AL=0(如按下的是其它键) 0号功能读键盘是强制读。,例:从键盘读一字符,把扫描码存到KEY1单元,ASCII码存到KEY2单元。 MOV AH,0 INT 16H MOV KEY1,AH MOV KEY2,AL,(2)1号功能读键盘缓冲区的字符 输入参数:AH=1 返回结果:ZF=0时,AH=扫描码,AL=字符的ASCII码或0 ZF=1时表示无键按下,键盘缓冲区为空,1号功能读键盘是探测读。 例如:在一程序中,加入一段指令序列,检测是否按下了ESC键,如果按下,则退出程序,否则,继续执行程序。加入的指令序列如下: MOV
5、 AH,1 ;1号功能 INT 16H ;BIOS的读键盘缓冲区的字符 JZ CONT ;ZF=1,无键按下继续执行程序 CMP AH,01H ;ZF=0,有键按下,判是ESC键的扫描码? JZ EXIT ;是ESC键的扫描码退出程序 CONT: ;继续执行程序 EXIT: ;退出程序,(3)2号功能读键盘状态字节 输入参数:AH=2 返回结果:AL=键盘状态字节 键盘上有一些控制键和状态键,如Shift、Ctrl、Alt、NumLock、Scroll、Ins和CapsLock等,当按下这些键时,键盘处理程序并不返回扫描码,而是设置键盘状态字节的相应位。键盘状态字节如下图所示:,【例1】编写程
6、序,当无键按下时,循环等待,当有键按下时,从键盘读10个按键,并将其扫描码和字符码保存到内存单元中。 (1)分析 1)利用INT 16H的1号功能为探测读键盘,当无键按下时循环等待,当有键按下时读键。 2)利用INT 16H的0号功能读取10个键的扫描码和字符码并保存到内存单元中。,DATA SEGMENT STRING DB 20 DUP (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR MOV AX,DATA ;初始化DS MOV DS,AX L1: MOV AH,1 ;利用INT 16H的功能1探测读键盘 IN
7、T 16H JZ L1 ;无键按下则循环 LEA SI,STRING MOV CX,10,L2: MOV AH,0 ;用INT 16H的功能0读键盘 INT 16H MOV SI,AL ;保存字符码 MOV SI+1,AH ;保存扫描码 ADD SI,2 LOOP L2 ;循环10次 MOV AX,4C00H INT 21H MAIN ENDP CODE ENDS END MAIN,3.DOS键盘功能调用 上面介绍了BIOS键盘功能调用(16H),而在实际应用中,对于一般的键盘操作,最好使用对硬件依赖更少、更为方便的DOS键盘功能调用。下表中列出了DOS功能调用INT 21H中与键盘输入有关的
8、功能调用。,【例2】 编写一程序,从键盘输入一字符,若为“Y”,则从键盘接收一个字符串;若为“N”,则结束程序;若都不是则循环读键盘。 (1)分析: 1)调用INT 21H的1号功能从键盘读入一个字符。 2)若键入的字符为Y,则调用INT 21H的0AH号功能从键盘输入一个字符串。 (2)程序流程图如下:,DATA SEGMENT STRING DB 20,?,20 DUP (?) ;定义存放字符串的缓冲区 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: MOV AX,DATA MOV DS,AX LOP1:
9、 MOV AH,1 ;从键盘读入一个字符 INT 21H CMP AL,Y ;若为“Y”,转输入字符串程序段 JZ IN_STRING CMP AL,N ;若为“N”,结束程序 JZ EXIT JMP LOP1 ;若都不是,循环读键盘字符 IN_STRING: LEA DX,STRING ;从键盘输入一字符串 MOV AH,0AH INT 21H EXIT: MOV AX,4C00H INT 21H MAIN ENDP CODE ENDS END START,显示器I/O程序设计,显示器通过显示适配器(显示卡)与PC机相连,显示卡是计算机和显示器的接口,现在常用的显示卡都支持字符显示和图形显示
10、两种方式,每种显示方式还有多种显示模式。 字符方式也称为文本方式,在这种显示方式下,屏幕上只能显示字符及其属性。字符通常是指字母、数字、符号和一些简单的图形(如菱形、笑脸符等)。在字符方式下,屏幕被划分为若干行和列,较典型的是80列25行。显示字符有两种方法,一种是用BIOS和DOS功能调用,另一种是直接组织显示缓冲区。,显示的基础知识,(1)显示模式 在字符方式下包括几种显示模式,每种模式具有不同的分辨率和颜色,如下表所示。其中用得最普遍的是显示模式3,在这种模式下,显示器的屏幕被划分成80列(0-79)25行(0-24),可以用列号和行号组成的坐标来表示屏幕上的每个可显示位置,如左上角的坐
11、标为(0,0),右下角的坐标为(79,24)。,BIOS显示功能调用,BIOS中提供的显示调用INT 10H功能如下: AH=0:设置显示模式 输入参数:AL=显示模式号(表8-10 常见的字符显示模式) 返回结果:无返回参数,只是屏幕设置为指定的模式 AH=1:设置光标类型 输入参数:(CH)4=0,光标显示,(CH)0-3=光标起始线 (CL)0-3=光标结束线,(CH)4=1,光标不显示(关闭) 返回结果:无,AH=2:设置光标位置 输入参数:BH=页号(一般为0) DH=新光标的行号 DL=新光标的列号 返回结果:无 AH=3:读光标位置 输入参数:BH=页号(要显示的当前页号) 返回
12、结果:CH=光标开始线,CL=光标结束线 DH=光标当前行号,DL=光标当前列号,AH=5:选择当前显示页 输入参数:AL=选择的页号 返回结果:无 AH=6:屏幕初始化或向上滚动 输入参数:AL=要滚动的行数,AL=0,全屏滚动(清屏) CH=滚动窗口左上角行号, CL=滚动窗口左上角列号 DH=滚动窗口右下角行号, DL=滚动窗口右下角列号 BH=滚入行属性 返回结果:无,AH=7:屏幕初始化或向下滚动 输入参数:AL=要滚动的行数,AL=0,全屏滚动(清屏) CH=滚动窗口左上角行号,CL=滚动窗口左上角列号 DH=滚动窗口右下角行号,DL=滚动窗口右下角列号 BH=滚入行属性 返回结果
13、:无 AH=8:读光标位置的属性和字符 输入参数:BH=显示页 返回结果:AH=光标位置的属性 AL=光标位置的字符,AH=9:在光标位置显示字符及属性 输入参数:BH=显示页 BL=字符的属性 AL=待显示字符的ASCII码 CX=字符重复次数(只显示一个字符时,CX=1) 返回结果:无 AH=0AH:在光标位置只显示字符,不改变属性 输入参数:BH=显示页 AL=待显示的字符 CX=字符重复次数(只显示一个字符时,CX=1) 返回结果:无,AH=0EH:显示字符且光标自动前移 输入参数:AL=要显示的字符 BL=前景色 返回结果:无 AH=0FH:获取当前的显示模式 输入参数:无 返回结果
14、:AL=当前显示模式号 AH=当前显示模式每行的列数 BH=当前显示页号,AH=13H:显示字符串 输入参数:ES:BP=字符串首地址 CX=串长度 DH,DL=起始行、列号 BH=显示页号 AL=0,BL=属性,光标保持在原处,串由字符组成,仅显示字符 AL=1,BL=属性,光标到串尾,串由字符组成,仅显示字符 AL=2,光标保持在原位不动,串由字符及属性组成 AL=3,光标到串尾,串由字符及彩色字符属性和背景属性(两个属性由一个字节决定)组成 返回结果:无,【例3】在屏幕中间建立一个34列11行反相显示的小窗口,在窗口最上面一行以青底淡红字显示一个菜单栏:File Edit Search
15、View Options Help,在屏幕最下面一行再显示该菜单栏,但每一项属性不同。,(1)分析 1)在屏幕中间建立一个34列11行反相显示的小窗口,应调用INT 10H的6号功能,定义左上角坐标为(7,23),右小角坐标为(17,56),即屏幕中间大小为34列11行的小窗口,把小窗口清为白底黑字的属性即为反相显示,指令序列如下: MOV AH,6 ;调用INT 10H的6号功能 MOV AL,0 ;AL=0,全屏滚动(清屏) MOV CH,7 ;CH=滚动窗口左上角行号7 MOV CL,23 ;CL=滚动窗口左上角列号23 MOV DH,17 ;DH=滚动窗口右下角行号17 MOV DL,
16、56 ;DL=滚动窗口右下角列号56 MOV BH,70H ;白底黑字,反向显示 INT 10H,2)在窗口最上面一行显示一个菜单栏,应调用INT 10H的功能13H MOV AH,13H ;INT 10H的功能13H,在窗口最上面一行显示菜单栏 LEA BP,STRING1 ;BP字符串SRING1的首地址 MOV CX,ST1_LEN ;CX=串长度ST1_LEN MOV DH,7 ;DH=起始行号7 MOV DL,23 ;DL=起始列号23 MOV BH,0 ;BH=显示页号,一般为0 MOV AL,1 ;光标到串尾,串由字符组成,仅显示字符 MOV BL,3CH ;字符属性为青底淡红色
17、 INT 10H,DATA SEGMENT STRING1 DB File Edit Search View Options Help ;窗口上面待显示的字符串 ST1_LEN EQU $-STRING1 ;显示串1的长度 STRING2 DB F,1ch,i, 1ch, l, 1ch, e,1ch, 20h, 1ch ;窗口下面待显示的字符串 DB E, 4ah, d, 4ah, i, 4ah, t, 4ah, 20h, 4ah DB S, 2dh, e, 2dh, a, 2dh, r, 2dh, c, 2dh, h, 2dh, 20h, 2dh DB V, 5ah, i, 5ah, e,
18、5ah, w, 5ah, 20h, 5ah DB O, 3eh, p, 3eh, t, 3eh, i, 3eh, o, 3eh, n, 3eh, s, 3eh, 20h, 3eh DB H, 6bh, e, 6bh, l, 6bh, p, 6bh ST2_LEN EQU ($-STRING2)/2 ;显示串2的长度 DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR MOV AX,DATA ;设置DS=ES MOV DS,AX MOV ES,AX MOV AH, 0 ;设置显示模式3 MOV AL,3 INT 10H,MOV
19、AH,6 ;清屏 MOV AL,0 MOV CH,0 ;屏幕左上角坐标 MOV CL,0 MOV DH,24 ;屏幕右下角坐标 MOV DL,79 MOV BH,07 ;属性 INT 10H MOV AH,1 ;暂停,等待键盘输入单个字符 INT 21H MOV AH,6 ;建立小窗口 MOV AL,0 ;全屏滚动 MOV CH,7 ;左上角坐标 MOV CL,23 MOV DH,17 ;右下角坐标 MOV DL,56,MOV BH,70H ;白底黑字,反向显示 INT 10H MOV AH,13H ;在窗口最上面一行显示菜单栏 LEA BP,STRING1 ;ES:BP字符串首地址 MOV
20、CX,ST1_LEN ;CX=串长度 MOV DH,7 ;DH,DL=起始行,列位置 MOV DL,23 MOV BH,0 MOV AL,1 MOV BL,3CH ;属性为青底淡红色 INT 10H MOV AH,1 ;暂停 INT 21H ;在窗口最下面一行以多种属性显示菜单栏,MOV AH,13H ;INT 10H的功能13H LEA BP,STRING2 ;串首地址 MOV CX,ST2_LEN ;显示串的长度 MOV DH,17 ;起始位置行号 MOV DL,23 ;起始位置列号 MOV BH,0 MOV AL,3 ;光标到串尾,串由字符及属性组成 INT 10H MOV AH,4CH
21、 ;返回DOS INT 21H MAIN ENDP CODE ENDS END MAIN,(4)程序说明: INT 10H的13H号功能有四种显示字符串的方式,前两种方式(AL=0,1),整个字符串只能以一种属性显示,后两种方式(AL=2,3)每个字符都可以不同属性显示。本程序中,显示窗口上面的菜单栏用AL=1的方式,显示字符的属性相同;显示窗口下面的菜单栏用AL=3的方式,每个字符以不同的属性显示。 (5)执行结果如下图:,3.DOS显示功能调用 DOS的INT 21H提供的显示功能调用如下: AH=2,显示一个字符,光标跟随字符移动,检测Ctrl_Break 输入参数:DL=待显示字符的A
22、SCII码 返回结果:无 AH=6,显示一个字符,光标跟随字符移动,不检测Ctrl_Break 输入参数:DL=待显示字符的ASCII码 返回结果:无 AH=9,显示字符串,光标跟随字符串移动 输入参数:DS:DX=待显示字符串的首地址,字符串必须以$结尾。 返回结果:无,用INT 21H的9号功能显示一个字符串,首先要在数据段中定义一个待显示的字符串,这个字符串必须以$结尾。例如,定义一个字符串如下: STRING DB HOW ARE YOU,0DH,0AH,$ 然后,在代码段中,显示该字符串的指令为: LEA DX,STRING MOV AH,9 INT 21H,【例4】用DOS时间功能
23、调用获取当前时间,并在屏幕上显示出来。 (1)分析 1)本程序首先调用DOS时间功能调用(INT 21H的2CH功能),读取系统当前时间: MOV AH,2CH INT 21H 执行后的返回结果:CH=小时(0-23) CL=分钟(0-59) DH= 秒(0-59) 2)然后按照一定的格式显示出来,其中需要多次把返回的二进制数结果转换成十进制并显示出来,所以用子程序来实现这一功能。,(2)编写程序如下: DATA SEGMENT TIME DB CURRETN TIME IS $ ;定义一个提示串 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 入门 精通
链接地址:https://www.31doc.com/p-2909481.html