几个常用的 DOS 系统功能调用(INT 21H)

键盘的输入和显示输出都采用了 DOS 系统功能调用 INT 21H,大大简化了编程。

所谓功能调用是计算机系统设计的简单 I/O 子程序,程序员不必了解繁琐的输入/输出的操作细节,而以一种简单、统一的方式使用外部设备,从而集中精力于算法编程,来实现程序目标。

DOS 系统功能 INT 21H 调用的方法:

(1)将调用功能的功能号存入 AH 寄存器;

(2)如必要,设置该调用功能的入口参数(调用参数);

(3)执行 INT 21H 指令;

(4)如必要,按规定取得出口参数(返回参数)。

DOS 系统功能调用 INT 21H,有数百种功能供用户使用。下面介绍几个常用的 DOS 系统功能调用,简要描述如表 1 所示。

部分常用的 DOS 系统功能调用(INT 21H)

表 1 部分常用的 DOS 系统功能调用(INT 21H)

注意

I/O 处理操作的都是 ASCII 码,对于键盘输入的数字,做计算时需将 ASCII 码转为二进制数,输出显示时需要将二进制数转为 ASCII 码。

  1. 键盘输入单个字符并回显(1 号功能)

例如:

MOV AH,1

INT 2lH

功能:等待从键盘输入一个字符,将该字符的 ASCII 码送入 AL 中,并送屏幕显示。

  1. 显示单个字符(2 号功能)

例如:

MOV AH,2

MOV DL,'A'

INT 2lH

功能:在当前光标位置显示字符 A。

注意:执行后 AL 寄存器的值被修改为 DL 的值。

  1. 显示字符串(9 号功能)

例如:

MOV AH,9

LEA DX,STR

INT 2lH

功能:显示由 DS:DX 所指向的以“$”结束的字符串 STR。

注意:执行后 AL 寄存器的值被修改为 $ 的 ASCII 码 24H。

  1. 键盘输入到缓冲区(0A 号功能)

例如:

MOV AH,0AH

LEA DX,BUF

INT 2lH

功能:从键盘输入一串 ASCII 码到缓冲区,用“回车”结束输入。DS:DX=BUF 首地址即缓冲区首地址,BUF 缓冲区第 1 个字节是缓冲区大小(含回车键),可见键盘输入缓冲区最大为 255 个字节,是事先定义的。第 2 个字节是实际输入的字节数(不含回车键),当以回车键结束输入时系统自动存入的。从第 3 个字节开始存放输入的内容(含回车键)。数据段中的缓冲区应按上述规定的格式定义。

例 3 键盘输入缓冲区程序。

data  segment

buf db 9       ; 定义缓冲区大小为9个字节(含回车键)

real db ?       ; 实际输入的字符个数

str db 9 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 2lh

code  ends

end start
  1. 结束程序并返回 DOS(4CH 号功能)

例如:

MOV AH,4CH

INT 21H

功能:结束程序并返回操作系统。

(完)

comments powered by Disqus