系统功能调用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
系统功能调用——由DOS提供的一组实现特殊功能的子程序供程序员在编写自己的程序时调用,以减轻编程的工作量。
分两种,DOS系统功能调用和BIOS终端调用。
汇编语言中DOS系统功能调用有很多,涉及屏幕显示、文件管理、I/O管理等等,每个子程序都有一个功能号,所有的功能调用的格式都是一致的。调用的步骤大致如下:
(1)系统功能号送到寄存器AH中;
(2)入口参数送到指定的寄存器中;
(3)用INT 21H指令执行功能调用;
(4)根据出口参数分析功能调用执行情况。
下面归纳5个在汇编中常用的INT 21H系统功能调用。
AH功能入口参数出口参数
4CH返回DOS无无
1键盘输入一个字符到AL中无AL=字符
2输出DL寄存器的字符到显示器DL(存放一个字符)无
DS:字符串所在的段地址
无9输出一个以“$”结尾的字符串到显示器
DX:字符串首地址
DS:缓冲区所在的段地址
缓冲区相应位置
0AH从键盘输入一个字符串到指定缓冲区
DX:缓冲区首地址
下面分别详细分析5种功能调用:
1、带返回码的结束(AH=4CH)
功能:返回DOS
入口参数:无
调用方法
MOV AH,4CH
INT 21H
通过4CH功能调用能够结束当前正在执行的程序,返回DOS系统,一般用于汇编程序的结束位置。
2、键盘输入一个字符(AH=1)
功能:从键盘输入一个字符到AL中,AL中为该字符的ASCII码。
入口参数:无
调用方法
MOV AH,1
INT 21H
执行完上面的系统调用后,出现提示输入光标,从键盘输入一个字符并保存其ASIIC码到AL寄存器中。
<例子>:交互式程序中用户按下数字键1,2,3,程序转入相应的服务子程序,若按下其他键则会继续等待。
代码:
[plain]view plaincopyprint?
1KEY: MOV AH,1
2 INT 21H ;系统等待输入一个字符
3 CMP AL,'1'
4 JE ONE ;如果输入字符为1则跳到标识符ONE处执行
5 CMP AL,'2'
6 JE TWO ;如上解析
7 CMP AL,'3'
8 JE THREE
9 JMP KEY ;如果不是1、2、3则继续输入字符
10ONE: ......
11TWO: ......
12THREE: ......
3、输出显示一个字符(AH=2)
功能:输出DL寄存器中的字符到显示器。
入口参数:被输出显示的字符或者字符ASCII码送到DL寄存器中
调用方法
MOV DL,字符码
MOV AH,2
INT 21H
执行完上面的调用后,显示器显示出DL中的字符。
<例如>:
MOV DL,'6' (也可以写成6的ASCII码36H,既:MOV DL,36H)
MOV AH,2
INT 21H
调用结果在屏幕上光标位置处显示6。
4、输出一个字符串(AH=9)
功能:输出显示一个以"$"字符结尾的字符串到显示器。
入口参数:DX=字符串偏移地址;DS=字符串的段地址
调用方法
MOV AX,字符串所在的段地址
MOV DS,AX
MOV DX,字符串的首址偏移地址
MOV AH,9
INT 21H
执行上面调用,输出以DS:DX为首地址,"$"为结尾的字符串到显示器中。若要在显示字符串光标自动回车换行,则在"$"字符前面加上0DH(回车),0AH(换行)字符。
<例子>:在屏幕上显示“HOW DO YOU DO?”字符串。并且光标回车换行。
代码:
[plain]view plaincopyprint?
13DATA SEGMENT
14 STR1 DB 'HOW DU YOU DO?',0DH,0AH,'$'
15DATA ENDS
16
17CODE SEGMENT
18 ASSUME CS:CODE,DS:DATA
19START:
20 MOV AX,DATA
21 MOV DS,AX
22 MOV DX,OFFSET STR1;字符串首偏移地址放到DX中
23 MOV AH,9
24 NT 21H;输出字符串
25
26 MOV AH,4CH
27 INT 21H
28CODE ENDS
29 END START
5、从键盘输入一个字符串到缓冲区(AH=0AH)
功能:从键盘输入一串ASCII码字符到缓冲区,输入结束为缓冲区的个数或者“回车”字符。
入口参数:DX=缓冲区首偏移地址;DS=缓冲区段地址
调用方法
MOV AX,缓冲区的首址的段地址
MOV DS,AX
MOV DX,缓冲区的首址的偏移地址
MOV AH,0AH
INT 21H
执行完上面调用,将从键盘接受字符串送到内存的输入缓冲区(由DS:DX指定缓冲区),要求预先定义一个缓冲区,缓冲区的第一个字节指定容纳的最大字符个数,由用户给出;第二个字节存放实际的最大字符个数,由系统最后添入;从第三个字节开始存放从键盘接受的字符,直到ENTER键结束。
<例子>:
[plain]view plaincopyprint?
30DATA SEGMENT
31 BUF DB 20, ;存放最大字符个数20个
32 DB ?, ;存放实际输入字符个数
33 DB 20 DUP(?) ;存放输入字符
34DATA ENDS
35CODE SEGMENT
36 ASSUME CS:CODE,DS:DATA
37START: