当前位置:课程学习>>第三章>>知识讲解>>视频课堂>>知识点三
汇编代码除8086微处理器的机器指令外,还可以使用DOS操作系统和BIOS提供的功能。这些常用功能可以方便程序设计,更快更稳定地完成开发。
1.DOS功能调用
MS-DOS即微软磁盘操作系统。它不仅提供了许多命令,还给用户提供了80多个常用子程序。DOS功能调用就是对这些子程序的调用,也叫系统功能调用。子程序的顺序编号称为功能调用号。
DOS功能调用的过程是,根据需要的功能调用设置入口参数,把功能调用号送AH寄存器,执行软中断指令INT 21H后,可以根据有关功能调用的说明取得出口参数。
DOS功能调用非常丰富,在此仅举几例。更多的功能调用,需要学生自行在学习过程中查阅手册。
(1)单个字符输入
接收从键盘输入的一个字符并在屏幕回显。输入字符的ASCII码存入AL寄存器。若按下组合键Ctrl+Break或Ctrl+C,则程序返回DOS。
功能调用号 AH=01H
例:
MOV AH,01H
INT 21H
(2)字符串输入
接收从键盘输入的一个字符串。
功能调用号 AH=0AH
入口参数:存放字符串的接收缓冲区首地址和最大字符个数。
寄存器DS和DX存放接收缓冲区首地址,分别存放其段地址和偏移地址;缓冲区第一字节存放接收字符串的最大字符个数。
即:
DS=缓冲区的段地址
DX=缓冲区的偏移量
缓冲区第1字节=接收字符串的最大字符个数
出口参数:输入的字符串及实际输入的字符个数。缓冲区第二字节存放实际输入的字符个数(不包括回车符);第三字节开始存放接收的字符串。
即:
缓冲区第2字节 为 实际输入的字符个数(不包括回车符)
缓冲区第3字节 为 接收到的字符串的第1个字符
缓冲区第4字节 为 接收到的字符串的第2个字符
缓冲区第5字节 为 接收到的字符串的第3个字符
… …
字符串必须以回车键结束,回车符是接收到的字符串的最后一个字符。
如果输入的字符数超过设定的最大字符个数,则随后的输入字符被丢失并响铃,直到遇到回车键为止。如果在输入时按组合键Ctrl+C或Ctrl+Break,则结束程序。
例
DATA SEGMENT
BUF DB 100
DB 0
DB 100 DUP(0)
DATA ENDS
CODE SEGMENT
START:
ASSUME CS:CODE,DS:DATA
MOV AX,DATA
MOV DS,AX
;----------功能调用开始
MOV DX,OFFSET BUF ; 入口,缓冲区偏移量
MOV AH,10 ; 功能调用号 AH=0AH
INT 21H
; ---------取功能调用的结果-----------
mov AL, buf+1 ;接收到的字符数
mov AH, buf+2 ;接收到的第1个字符
; 程序运行结束
MOV AH,4CH
INT 21H
CODE ENDS
END START ; 代码段开始
以上代码参见 示例代码 3.asm。
代码的请解参见视频 [录屏\03 8086汇编语言程序设计_3.mp4]。
(3)单字符输出
在屏幕上显示一个字符。
功能调用号AH=02H。
入口参数:要显示的字符的ASCII码保存于寄存器DL。
例:
MOV DL,'2' ;入口参数,要显示的字符的ASCII码'2'保存于寄存器DL
MOV AH,2 ;功能调用号AH=02H
INT 21H
(4)字符串输出
在屏幕上显示一个字符串。
功能调用号AH=9。
入口参数:是被输出字符串首址,接收入口参数的是寄存器DS和DX,分别存入被输出字符串首址的段基值和偏移量。要求字符串以'2'结束,该字符作为字符串结束符,'2'不输出。
例:
DATA SEGMENTS
STRING DB ‘Hello ASM!$';定义字符串
…
DATA ENDS
CODE SEGMENT
…
MOV DX,OFFSET STRING
MOV AH,9
INT 21H
…
CODE ENDS
(5)进程终止
结束当前程序,返回DOS。
功能调用号AH=4CH。
例:
MOV AH,4CH
INT 21H
例:
MOV AX,4C00H ;注意,同时改变了AL
INT 21H
2.BIOS功能调用
在PC机中,BIOS常驻ROM,独立于DOS,可与任何操作系统一起工作。它的主要功能是驱动系统所配置的外部设备,如磁盘驱动器、显示器、打印机及异步通信接口等。通过INT 10H~INT 1AH向用户提供服务程序的入口,使用户无须对硬件有深入了解,就可完成对I/O设备的控制与操作。BIOS的中断调用与DOS功能调用方法类似。
在非PC机的8086微处理器开发板中,或仅使用8086微处理器的环境下,BIOS功能调用无效。
BIOS功能丰富,这里仅举一例。键盘I/O程序以16H号中断处理程序的形式存在,它提供若干功能,每一个功能有一个编号。在调用键盘I/O程序时,把功能编号置入AH寄存器,然后发出中断指令INT 16H。调用返回后,从有关寄存器中取得出口参数。
入口参数:
AH=00H
出口参数:
AH=键盘的扫描码
AL=字符的ASCII码
例:
MOV AH,0 ;入口参数
INT 16H ;BIOS功能调用;
此时,AH为键盘扫描码,AL为字符的ASCII码
上面的程序段利用BIOS中断服务,实现从键盘读一个字符的功能。