《汇编语言第6章系统功能调用.ppt》由会员分享,可在线阅读,更多相关《汇编语言第6章系统功能调用.ppt(40页珍藏版)》请在三一办公上搜索。
1、第6章 系统功能调用,6.1 系统功能调用概述6.2 DOS系统功能调用6.3 BIOS系统功能调用,6.1 系统功能调用概述,(1)直接访问硬件(2)使用BIOS功能调用(3)使用DOS功能调用,6.2 DOS系统功能调用,常用DOS系统功能调用 DOS系统功能调用实例,常用DOS系统功能调用,1、DOS功能调用概述2、调用方法3、DOS功能调用分类4、常用DOS系统功能调用,1、DOS功能调用概述,为了方便程序员的使用,把这些子程序编写成相对独立的程序模块并且编上号。程序员利用汇编语言可方便地调用这些子程序。程序员调用这些子程序可减少对系硬件环境的考虑和依赖,从而一方面可大大精简应用程序的
2、编写,另一方面可使程序有良好的通用性。这 些编了号的可由程序员调用的子程序就称为DOS功能调用或系统调用。,例6-1 用 09H 号功能调用,显示输出指定的串字符串。,CODE SEGMENT ASSUME CS:CODE,DS:CODE ORG 100H;设置偏移地址 START:PUSH CS POP DS;代码段段地址送 DS LEA DX,STRING;DX字符串的首地址 MOV AH,09H;09H 号功能调用 INT 21H MOV AH,4CH;执行 4CH 号功能调用,终止程序运行返回 DOS INT 21H STRING DB Welcome to study HUIBIAN
3、!,$CODE ENDS END START,1、DOS功能调用概述,DOS功能的调用主要包括下面三个方面的子程序:基本I/O子程序;文件管理子程序;其他(包括内存管理、置取时间、置取中断向量、终止程序等)。,2、调用方法,DOS系统功能调用的方法一般可分为以下几步:根据所需的功能调用设置入口参数的,但大部分功能调用需要入口参数,在调用前应按要求准备好入口参数;把功能调用号送AH寄存器;发软中断指令“INT 21H”;可根据有关功能调用的说明取得出口参数。大部分功能调用都有出口参数,部分功能调用没有出口参数。,3、DOS功能调用分类,(1)字符I/O管理(2)初级文件管理(3)高级文件管理(4
4、)内存管理(5)作业管理(6)其他资源管理,4、常用DOS系统功能调用,1、01H键盘输入并回显 格式:MOVAH,1 INT 21H功能:从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示,4、常用DOS系统功能调用,2、02H显示输出格式:MOVDL,待显示字符的ASCII码 MOVAH,2 INT21H 功能:将DL寄存器中的字符送显示器显示,如果DL中为(CTRL)+(BREAK)的ASCII码,则退出。,4、常用DOS系统功能调用,3、03H异步通信输入4、04H异步通信输出5、05H打印机输出格式:MOVDL,待打印字符的ASCII码 MOV AH,5 INT 21H功能
5、:将DL寄存器中的字符送打印机打印。,4、常用DOS系统功能调用,6、06H直接控制台输入输出字符 06H功能是从键盘输入一个字符,或输出一个字符到屏幕,有两种入口参数:DL0FFH,表示是从键盘输入字符。ZF=0,将字符的ASCII码送入寄存器AL。ZF=1,寄存器AL中不是键入字符ASCII码。DL0FFH,表示输出一个字符到屏幕。此时DL寄存器中内容就是输出字符的ASCII码。此调用与01H和02H功能调用不同之处在于不检查Ctrl+Break。,4、常用DOS系统功能调用,7、07H直接控制台输入无回显07H功能是等待从标准输入设备(键盘)输入字符(ASCII码)并送入AL寄存器中,但
6、不送屏幕显示。没有入口参数,出口参数是输入字符码,出口参数送入AL寄存器中,4、常用DOS系统功能调用,8、08H键盘输入无回显08H功能是等待从键盘输入字符,将其ASCII码送入AL寄存器中。其没有入口参数,出口参数是输入字符码,出口参数送入AL寄存器中。08H与01H系统功能调用不同之处在于键入的字符不送屏幕显示。,4、常用DOS系统功能调用,9、09H显示字符串格式:LEA DX,待显示字符串首偏移地址 MOV AH,9 INT 21H功能:将当前数据区中以$结尾的字符串送显示器显示。,4、常用DOS系统功能调用,10、0AH键盘输入字符串到缓冲区 格式:LEADX,缓冲区首偏移地址 M
7、OV AH,10 INT 21H功能:从键盘上输入一字符串到用户定义的输入缓冲区内,并送显示器显示。,4、常用DOS系统功能调用,11、0BH检查键盘状态0BH功能是键盘有任意键按下时,则将0FFH送入AL寄存器中,并检查该键是否是Ctrl+Break,如果是则退出。无任何键按下时则将0送入AL寄存器中。,4、常用DOS系统功能调用,12、2BH设置日期2BH的功能是设置有效日期。入口参数:CX=年DH=月DL=日出口参数存放在AL寄存器中,AL=0表示设置成功,日期有效;AL=0FFH表示设置无效。,4、常用DOS系统功能调用,13、2AH取得日期2AH的功能是将当前有效日期取到CX和DX寄
8、存器中。其出口参数是年号、月份和日期,年号置入CX寄存器中,月份和日期置入DX寄存器中。,4、常用DOS系统功能调用,14、2DH设置时间2DH的功能是设置有效时间。入口参数:CH=时CL=分DH=秒DL=10毫秒;出口参数存放在AL中,AL=0表示设置时间有效;AL=0FFH表示设置无效。,4、常用DOS系统功能调用,15、2CH取得时间2CH功能是将当前有效时间取到CX和DX寄存器中;其没有入口参数,出口参数存放在CX和DX寄存器中,时间存放格式与2DH 号系统功能调用相同。,4、常用DOS系统功能调用,16、4CH返回操作系统4CH功能是结束当前正在执行的程序,并返回操作系统,屏幕显示操
9、作系统提示符。,DOS中断的功能、入口和出口参数,6.3 BIOS系统功能调用,6.3.1 BIOS系统功能调用概述6.3.2 BIOS系统功能调用实例,6.3.1 BIOS系统功能调用概述,BIOS系统功能除处理系统的全部内部中断外,还提供了许多基本输入输出设备级的控制功能。这时我们变成时能够用到的基本的同输入输出之间的基本界面。在只读存储器中提供了BIOS基本的输入输出系统,它占用系统板上8K字节的ROM区,又称ROMBIOS。在系统板的ROM中存放着一套程序称为BIOS(基本输入输出系统),BIOS中主要包含以下几部分内容:(1)硬件系统的检测和初始化程序;(2)外部中断和内部中断的中断
10、例程;(3)用于对硬件设备进行I/O操作的中断例程;(4)其他和硬件系统相关的中断例程。,BIOS中主要包含以下几部分内容:(1)硬件系统的检测和初始化程序;(2)外部中断和内部中断的中断例程;(3)用于对硬件设备进行I/O操作的中断例程;(4)其他和硬件系统相关的中断例程。,BIOS使用的中断类型号,键盘I/O中断调用(16H中断调用)16H中断调用有三个功能,功能号为02。(1)AH=0 功能:从键盘读字符到AL寄存器,当无键按下时,处于等待状态。入口参数:AH=0出口参数:AL中为键盘输入的字符的ASCII码值,AH中为扫描码。,(2)AH=1 功能:读键盘缓冲区字符到AL寄存器中,并置
11、ZF标志位,若按过任意一键(即键盘缓冲区不空),置ZF=0,否则ZF=1.入口参数:AH=1出口参数:若ZF=0,则AL中为输入的字符的ASCII码。由于该功能是从键盘缓冲区读数据,当没有任何键被按下时,不等待而立即返回。一般通过检测ZF标志来控制某一程序的执行.,3)AH=2 功能:读取特殊功能键的状态。入口参数:AH=2出口参数:AL为各特殊功能键的状态,2、键盘09H的处理过程(1)从键盘接口的输出缓冲寄存器(60H)读取系统扫描码。(2)判断该键是单独按下或是与组合键(shift、ctrl或alt)一起按下。若字符键单独按下,将扫描码转换为相应的ASCII码或扩展码写入键盘缓冲区。(3
12、)如果是换档键(如caps lock、ins等),将其状态存入BIOS数据区中的键盘标志单元。(4)如果是组合键(如ctrl+alt+del),则直接执行,完成其相应的功能。(5)对于中止组合键(如ctrl+C或ctrl+break),强行中止应用程序的执行,返回DOS.(6)将转换的ASCII码作为低字节,以原来的系统扫描码作为高字节存入键盘缓冲区,供系统调用。(7)在完成上述任务后,结束中断调用并返回。至此,一次按键输入的信息才真正送入计算机之中。,2、打印机I/O中断调(17H中断调用)17H中断调用有三个功能,功能号为02。(1)AH=0 本功能为把AL中指定的字符在打印机上打印出来。
13、(2)AH=1 本功能为对指定的打印机初始化。(3)AH=2 本功能为读取打印机的状态信息。,3、时钟中断调用(1AH中断调用)1AH中断调用有二个功能。功能号为0和1。(1)AH=0 本功能为读取时钟计数器的当前值。(2)AH=1 本功能为设置时钟计数器的当前值。,例6-9编写一个用键盘输入文件名,若输入的文件存在,则显示其内容,否则,显示文件不存在的信息的程序,若输入的字符串为空,则程序运行结束。,.MODELSMALL.DATA File DB30,?,30 DUP(?),0 Err DBThis file isnt found,10,13,$BuffDB128 dup(?).CODE.
14、STARTUP start:MOV AH,0AH;利用0AH功能,输入文件名LEA DX,File;DS:DX=输入缓冲区逻辑地址INT 21H;MOV BL,File+1CMP BL,0;检查文件名是否为空JZ stop;若空则跳转到stop,XOR BH,BH MOV FileBX+2,0 MOV DX,Offset File+2 MOV AH,3DH;打开文件功能;DS:DX=子目录说明串首地址 MOV AL,0H;AL=打开方式(0为只读)INT 21H JNC found LEA DX,Err MOV AH,9H;显示字符串功能INT 21H JMP start,found:MOV
15、BX,AX;把文件句柄赋给BX view:LEA DX,BUFF MOV AH,3FH;读文件内容MOV CX,128 INT 21H CMP AX,0JZ cls;读取的字符数为0 JC cls;读错误 PUSH BX;保存文件句柄 MOV DX,offset buff MOV CX,AX,MOV BX,1;屏幕设备的句柄规定为1 MOV AH,40H;在屏幕上显示读出的字符INT 21H POP BX;恢复文件句柄 JMP view cls:MOV AH,3EH;关闭文件INT 21H JMP START stop:.EXIT 0 END,例6-10 编写一个创建子目录的程序,若目录创建成
16、功,显示成功信息,否则,显示创建失败信息,用键盘输入一个目录路径名,若输入的字符串为空,则程序运行结束;,.MODELSMALL.DATA DirDB30,?,30 DUP(?),0 Vnews DBVictory,10,13,$Fnews DBFailure,10,13,$.CODE.STARTUP start:MOV AH,0AH;利用0AH功能,输入目录名LEA DX,Dir INT 21H MOV BL,Dir+1 CMP BL,0 JZ stop;检查输入的字符串是否为空,XOR BH,BH MOV DirBX+2,0;确保字符串以0为结束标志MOV DX,Offset Dir+2
17、MOV AH,39H;利用39H功能,创建子目录INT 21H.IF CARRY?LEADX,Fnews.ELSELEADX,Vnews.ENDIF MOV AH,9H INT 21H JMP start stop:.EXIT 0 END,6.3.2 BIOS系统功能调用实例,例6-14 试编制键入一个39间的数字,输出一个用“*”组成的三角形的源程序。例如,键入5,输出的三角形如下所示:*,例6-11 在每页的开始处打印“Hello world”字符串,并空一行才打印其它内容;当打印机不能正常打印(非硬件故障)时,提示其原因。,.MODEL SMALL.DATA TopDB0CH,Hello
18、 World,0DH,0AH,0AH CountEQU$-Top NEWS1DBTime Out Error$”NEWS2DBIntput Or Output Error$”NEWS3DBOut of Paper$”TimeERREQU01H InOut EQU08H OutP EQU20H.CODE.STARTUPMOV AH,1 MOV DX,0;初始化连接在LPT1上的打印机INT 17H MOV AH,2 MOV DX,0;读取LPT1打印机的状态字节INT 17H TEST AL,TimeERR or InOut or OutP JNZ ErrNEWS ErrNEWS:,TEST A
19、L,TimeERR JZ errmsg1 LEA DX,NEWS1 JMP displayerrmsg1:TEST AL,InOut JZ errmsg2 LEA DX,NEWS2 JMP disp errmsg2:LEA DX,NEWS3 display:MOV AH,9H INT 21H MOV CX,Count;待打印的字符个数 XOR BX,BX Start:MOV AH,5H;调用05H功能打印字符MOV DL,TopBX INT 21H INC BX LOOP start.EXIT0 END,CODE SEGMENTASSUME CS:CODESTART:MOV AH,0INT 16HCMP AL,33HJC STARTCMP AL,3AHJNC STARTAND AL,0FHMOV BL,ALMOV BH,0SJW1:MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HINC BHCMP BL,BHJNC SJW2MOV AH,4CHINT 21HSJW2:XOR CL,CLSJW3:MOV DL,*MOV AH,2INT21HINC CLCMP CL,BHJNZ SJW3JMP SJW1CODE ENDSEND START,