INT 21是计算机中断的一种,不同的AH值表示不同的中断功能。
举个例子,如果在DOS下面,键入两行代码:
MOV AH, 02H INT 21H
它代表的意思是在屏幕上显示输出。
这里有一份table,收纳了全部的INT 21中断类型。
表:DOS系统功能调INT 21H
AH
|
功能
|
调用参数
|
返回参数
|
00
|
程序终止(同INT 20H)
|
CS=程序段前缀
|
|
01
|
键盘输入并回显
|
|
AL=输入字符
|
02
|
显示输出
|
DL=输出字符
|
|
03
|
异步通迅输入
|
|
AL=输入数据
|
04
|
异步通迅输出
|
DL=输出数据
|
|
05
|
打印机输出
|
DL=输出字符
|
|
06
|
直接控制台I/O
|
DL=FF(输入)
DL=字符(输出) |
AL=输入字符
|
07
|
键盘输入(无回显)
|
|
AL=输入字符
|
08
|
键盘输入(无回显)
检测Ctrl-Break |
|
AL=输入字符
|
09
|
显示字符串
|
DS:DX=串地址
'$'结束字符串 |
|
0A
|
键盘输入到缓冲区
|
DS:DX=缓冲区首地址
(DS:DX)=缓冲区最大字符数 |
(DS:DX+1)=实际输入的字符数
|
0B
|
检验键盘状态
|
|
AL=00 有输入
AL=FF 无输入 |
0C
|
清除输入缓冲区并
请求指定的输入功能 |
AL=输入功能号
(1,6,7,8,A) |
|
0D
|
磁盘复位
|
|
清除文件缓冲区
|
0E
|
指定当前缺省的磁盘驱动器
|
DL=驱动器号 0=A,1=B,...
|
AL=驱动器数
|
0F
|
打开文件
|
DS:DX=FCB首地址
|
AL=00 文件找到
AL=FF 文件未找到 |
10
|
关闭文件
|
DS:DX=FCB首地址
|
AL=00 目录修改成功
AL=FF 目录中未找到文件 |
11
|
查找第一个目录项
|
DS:DX=FCB首地址
|
AL=00 找到
AL=FF 未找到 |
12
|
查找下一个目录项
|
DS:DX=FCB首地址
(文件中带有*或?) |
AL=00 找到
AL=FF 未找到 |
13
|
删除文件
|
DS:DX=FCB首地址
|
AL=00 删除成功
AL=FF 未找到 |
14
|
顺序读
|
DS:DX=FCB首地址
|
AL=00 读成功
=01 文件结束,记录中无数据 =02 DTA空间不够 =03 文件结束,记录不完整 |
15
|
顺序写
|
DS:DX=FCB首地址
|
AL=00 写成功
=01 盘满 =02 DTA空间不够 |
16
|
建文件
|
DS:DX=FCB首地址
|
AL=00 建立成功
=FF 无磁盘空间 |
17
|
文件改名
|
DS:DX=FCB首地址
(DS:DX+1)=旧文件名 (DS:DX+17)=新文件名 |
AL=00 成功
AL=FF 未成功 |
19
|
取当前缺省磁盘驱动器
|
|
AL=缺省的驱动器号 0=A,1=B,2=C,...
|
1A
|
置DTA地址
|
DS:DX=DTA地址
|
|
1B
|
取缺省驱动器FAT信息
|
|
AL=每簇的扇区数
DS:BX=FAT标识字节 CX=物理扇区大小 DX=缺省驱动器的簇数 |
1C
|
取任一驱动器FAT信息
|
DL=驱动器号
|
同上
|
21
|
随机读
|
DS:DX=FCB首地址
|
AL=00 读成功
=01 文件结束 =02 缓冲区溢出 =03 缓冲区不满 |
22
|
随机写
|
DS:DX=FCB首地址
|
AL=00 写成功
=01 盘满 =02 缓冲区溢出 |
23
|
测定文件大小
|
DS:DX=FCB首地址
|
AL=00 成功(文件长度填入FCB)
AL=FF 未找到 |
24
|
设置随机记录号
|
DS:DX=FCB首地址
|
|
25
|
设置中断向量
|
DS:DX=中断向量
AL=中断类型号 |
|
26
|
建立程序段前缀
|
DX=新的程序段前缀
|
|
27
|
随机分块读
|
DS:DX=FCB首地址
CX=记录数 |
AL=00 读成功
=01 文件结束 =02 缓冲区太小,传输结束 =03 缓冲区不满 |
28
|
随机分块写
|
DS:DX=FCB首地址
CX=记录数 |
AL=00 写成功
=01 盘满 =02 缓冲区溢出 |
29
|
分析文件名
|
ES:DI=FCB首地址
DS:SI=ASCIIZ串 AL=控制分析标志 |
AL=00 标准文件
=01 多义文件 =02 非法盘符 |
2A
|
取日期
|
|
CX=年
DH:DL=月:日(二进制) |
2B
|
设置日期
|
CX:DH:DL=年:月:日
|
AL=00 成功
=FF 无效 |
2C
|
取时间
|
|
CH:CL=时:分
DH:DL=秒:1/100秒 |
2D
|
设置时间
|
CH:CL=时:分
DH:DL=秒:1/100秒 |
AL=00 成功
=FF 无效 |
2E
|
置磁盘自动读写标志
|
AL=00 关闭标志
AL=01 打开标志 |
|
2F
|
取磁盘缓冲区的首址
|
|
ES:BX=缓冲区首址
|
(P.S.因为直接复制粘贴失败,而我又是个HTML的菜鸟,只好把别人表格的源码修修改改COPY过来了。)
概念补充:
中断向量表是放在MEMORY里面的,位置是:00:00。这个地方开始的每4个BYTE,代表一个INT。
转载自http://www.cnblogs.com/cffx-chu/archive/2011/08/08/2131020.html