当前位置:课程学习>>第三章>>知识讲解>>视频课堂>>知识点三


知识点三: 系统功能调用




汇编代码除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中断服务,实现从键盘读一个字符的功能。

进入下一个知识点的学习