您的位置:首页 > 理论基础

自学计算机中断知识--INT 21

2011-08-08 15:37 453 查看
INT 21是计算机中断的一种,不同的AH值表示不同的中断功能。

举个例子,如果在DOS下面,键入两行代码:

MOV AH, 02H
INT 21H


它代表的意思是在屏幕上显示输出。

这里有一份table,收纳了全部的INT 21中断类型。

[align=center]表:DOS系统功能调INT 21H[/align]

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

概念补充:

  中断向量表是放在MEMORY里面的,位置是:00:00。这个地方开始的每4个BYTE,代表一个INT。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: