汇编常⽤的INT21H系统调⽤
系统功能调⽤——由DOS提供的⼀组实现特殊功能的⼦程序供程序员在编写⾃⼰的程序时调⽤,以减轻编程的⼯作量。
分两种,DOS系统功能调⽤和BIOS终端调⽤。
汇编语⾔中DOS系统功能调⽤有很多,涉及屏幕显⽰、⽂件管理、I/O管理等等,每个⼦程序都有⼀个功能号,所有的功能调⽤的格式都是⼀致的。调⽤的步骤⼤致如下:
下⾯归纳5个在汇编中常⽤的INT 21H系统功能调⽤。
AH                        功能        ⼊⼝参数    出⼝参数
4CH返回DOS                ⽆        ⽆
1键盘输⼊⼀个字符到AL中                ⽆        AL=字符
2输出DL寄存器的字符到显⽰器DL(存放⼀个字符)          ⽆
9输出⼀个以“$”结尾的字符串到显⽰
DS:字符串所在的段地
DX:字符串⾸地址
调用子程序的例子
0AH从键盘输⼊⼀个字符串到指定缓冲区DS:缓冲区所在的段地
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,程序转⼊相应的服务⼦程序,若按下其他键则会继续等待。代码:
KEY:  MOV  AH,1
INT  21H  ;系统等待输⼊⼀个字符
CMP  AL,'1'
JE  ONE ;如果输⼊字符为1则跳到标识符ONE处执⾏
CMP  AL,'2'
JE  TWO ;如上解析
CMP  AL,'3'
JE  THREE
JMP  KEY ;如果不是1、2、3则继续输⼊字符
ONE:  ......
TWO:  ......
THREE: ......
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?”字符串。并且光标回车换⾏。
代码:
DATA SEGMENT
STR1 DB 'HOW DU YOU DO?',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STR1;字符串⾸偏移地址放到DX中
MOV AH,9
NT 21H;输出字符串
MOV AH,4CH
INT 21H
CODE ENDS
END START
5、从键盘输⼊⼀个字符串到缓冲区(AH=0AH)
功能:从键盘输⼊⼀串ASCII码字符到缓冲区,输⼊结束为缓冲区的个数或者“回车”字符。
⼊⼝参数:DX=缓冲区⾸偏移地址;DS=缓冲区段地址
调⽤⽅法
MOV      AX,缓冲区的⾸址的段地址
MOV      DS,AX
MOV      DX,缓冲区的⾸址的偏移地址
MOV      AH,0AH
INT        21H
执⾏完上⾯调⽤,将从键盘接受字符串送到内存的输⼊缓冲区(由DS:DX指定缓冲区),要求预先定义⼀个缓冲区,缓冲区的第⼀个字节指定容纳的最⼤字符个数,由⽤户给出;第⼆个字节存放实际的最⼤字符个数,由系统最后添⼊;从第三个字节开始存放从键盘接受的字符,直到ENTER键结束。
<;例⼦>:
DATA SEGMENT
BUF  DB  20,        ;存放最⼤字符个数20个            DB  ?,        ;存放实际输⼊字符个数            DB  20 DUP(?)  ;存放输⼊字符DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV  AX,DATA  ;缓冲区所在段基址
MOV  DS,AX
LEA  DX,BUF    ;缓冲区⾸址偏移地址
MOV  AH,0AH
INT  21H
MOV  AH  4CH
INT  21H
CODE ENDS
END  START

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。