您的位置:首页 > 其它

INT 21H 指令说明及使用方法

2013-10-27 22:23 381 查看
转自:INT 21H 指令说明及使用方法

很多初学汇编语言的同学可能会对INT 21H这条指令感到困惑,不知道是什么意思,下面就以一段简单的程序为大家讲解:
例如:需要键盘输入,并且回显。
AH的值需要查表取得,表在下面
指令:MOV AH,01
     INT 21H
通过这样两条指令,输入的字符就会被存储在AL中。
 
[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]
DL=FF(输入)

DL=字符(输出)
[align=left]AL=输入字符[/align]
[align=left]07[/align]
[align=left]键盘输入(无回显)[/align]
[align=left] [/align]
[align=left]AL=输入字符[/align]
[align=left]08[/align]
键盘输入(无回显)

检测Ctrl-Break
[align=left] [/align]
[align=left]AL=输入字符[/align]
[align=left]09[/align]
[align=left]显示字符串[/align]
DS:DX=串地址

'$'结束字符串
[align=left] [/align]
[align=left]0A[/align]
[align=left]键盘输入到缓冲区[/align]
DS:DX=缓冲区首地址

(DS:DX)=缓冲区最大字符数
[align=left](DS:DX+1)=实际输入的字符数[/align]
[align=left]0B[/align]
[align=left]检验键盘状态[/align]
[align=left] [/align]
AL=00 有输入

AL=FF 无输入
[align=left]0C[/align]
清除输入缓冲区并

请求指定的输入功能
AL=输入功能号

(1,6,7,8,A)
[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]
AL=00 文件找到

AL=FF 文件未找到
[align=left]10[/align]
[align=left]关闭文件[/align]
[align=left]DS:DX=FCB首地址[/align]
AL=00 目录修改成功

AL=FF 目录中未找到文件
[align=left]11[/align]
[align=left]查找第一个目录项[/align]
[align=left]DS:DX=FCB首地址[/align]
AL=00 找到

AL=FF 未找到
[align=left]12[/align]
[align=left]查找下一个目录项[/align]
DS:DX=FCB首地址

(文件中带有*或?)
AL=00 找到

AL=FF 未找到
[align=left]13[/align]
[align=left]删除文件[/align]
[align=left]DS:DX=FCB首地址[/align]
AL=00 删除成功

AL=FF 未找到
[align=left]14

[/align]
[align=left]顺序读

[/align]
[align=left]DS:DX=FCB首地址

[/align]
AL=00 读成功

  =01 文件结束,记录中无数据

  =02 DTA空间不够

  =03 文件结束,记录不完整
[align=left]15[/align]
[align=left]顺序写[/align]
[align=left]DS:DX=FCB首地址[/align]
AL=00 写成功

  =01 盘满

  =02 DTA空间不够
[align=left]16[/align]
[align=left]建文件[/align]
[align=left]DS:DX=FCB首地址[/align]
AL=00 建立成功

  =FF 无磁盘空间
[align=left]17[/align]
[align=left]文件改名[/align]
DS:DX=FCB首地址

(DS:DX+1)=旧文件名

(DS:DX+17)=新文件名
AL=00 成功

AL=FF 未成功
[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]
AL=每簇的扇区数

DS:BX=FAT标识字节

CX=物理扇区大小

DX=缺省驱动器的簇数
[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]
AL=00 读成功

  =01 文件结束

  =02 缓冲区溢出

  =03 缓冲区不满
[align=left]22[/align]
[align=left]随机写[/align]
[align=left]DS:DX=FCB首地址[/align]
AL=00 写成功

  =01 盘满

  =02 缓冲区溢出
[align=left]23[/align]
[align=left]测定文件大小[/align]
[align=left]DS:DX=FCB首地址[/align]
AL=00 成功(文件长度填入FCB)

AL=FF 未找到
[align=left]24[/align]
[align=left]设置随机记录号[/align]
[align=left]DS:DX=FCB首地址[/align]
[align=left] [/align]
[align=left]25[/align]
[align=left]设置中断向量[/align]
DS:DX=中断向量

AL=中断类型号
[align=left] [/align]
[align=left]26[/align]
[align=left]建立程序段前缀[/align]
[align=left]DX=新的程序段前缀[/align]
[align=left] [/align]
[align=left]27

[/align]
[align=left]随机分块读

[/align]
DS:DX=FCB首地址

CX=记录数
AL=00 读成功

  =01 文件结束

  =02 缓冲区太小,传输结束

  =03 缓冲区不满
[align=left]28[/align]
[align=left]随机分块写[/align]
DS:DX=FCB首地址

CX=记录数
AL=00 写成功

  =01 盘满

  =02 缓冲区溢出
[align=left]29[/align]
[align=left]分析文件名[/align]
ES:DI=FCB首地址

DS:SI=ASCIIZ串

AL=控制分析标志
AL=00 标准文件

  =01 多义文件

  =02 非法盘符
[align=left]2A[/align]
[align=left]取日期[/align]
[align=left] [/align]
CX=年

DH:DL=月:日(二进制)
[align=left]2B[/align]
[align=left]设置日期[/align]
[align=left]CX:DH:DL=年:月:日[/align]
AL=00 成功

  =FF 无效
[align=left]2C[/align]
[align=left]取时间[/align]
[align=left] [/align]
CH:CL=时:分

DH:DL=秒:1/100秒
[align=left]2D[/align]
[align=left]设置时间[/align]
CH:CL=时:分

DH:DL=秒:1/100秒
AL=00 成功

  =FF 无效
[align=left]2E[/align]
[align=left]置磁盘自动读写标志[/align]
AL=00 关闭标志

AL=01 打开标志
[align=left] [/align]
[align=left]2F[/align]
[align=left]取磁盘缓冲区的首址[/align]
[align=left] [/align]
[align=left]ES:BX=缓冲区首址[/align]
[align=left]30[/align]
[align=left]取DOS版本号[/align]
[align=left] [/align]
[align=left]AH=发行号,AL=版本[/align]
[align=left]31[/align]
[align=left]结束并驻留[/align]
AL=返回码

DX=驻留区大小
[align=left] [/align]
[align=left]33

[/align]
[align=left]Ctrl-Break检测

[/align]
AL=00 取状态

  =01 置状态(DL)

DL=00 关闭检测

  =01 打开检测
DL=00 关闭Ctrl-Break检测

  =01 打开Ctrl-Break检测
[align=left]35[/align]
[align=left]取中断向量[/align]
[align=left]AL=中断类型[/align]
[align=left]ES:BX=中断向量[/align]
[align=left]36

[/align]
[align=left]取空闲磁盘空间

[/align]
DL=驱动器号 

0=缺省,1=A,2=B,...

成功:AX=每簇扇区数

     BX=有效簇数

     CX=每扇区字节数

     DX=总簇数

失败:AX=FFFF
[align=left]38[/align]
[align=left]置/取国家信息[/align]
[align=left]DS:DX=信息区首地址[/align]
BX=国家码(国际电话前缀码)

AX=错误码
[align=left]39[/align]
[align=left]建立子目录(MKDIR)[/align]
[align=left]DS:DX=ASCIIZ串地址[/align]
[align=left]AX=错误码[/align]
[align=left]3A[/align]
[align=left]删除子目录(RMDIR)[/align]
[align=left]DS:DX=ASCIIZ串地址[/align]
[align=left]AX=错误码[/align]
[align=left]3B[/align]
[align=left]改变当前目录(CHDIR)[/align]
[align=left]DS:DX=ASCIIZ串地址[/align]
[align=left]AX=错误码[/align]
[align=left]3C[/align]
[align=left]建立文件[/align]
DS:DX=ASCIIZ串地址

CX=文件属性
成功:AX=文件代号

错误:AX=错误码
[align=left]3D

[/align]
[align=left]打开文件

[/align]
DS:DX=ASCIIZ串地址

AL=0 读

  =1 写

  =3 读/写
成功:AX=文件代号

错误:AX=错误码
[align=left]3E[/align]
[align=left]关闭文件[/align]
[align=left]BX=文件代号[/align]
[align=left]失败:AX=错误码[/align]
[align=left]3F

[/align]
[align=left]读文件或设备

[/align]
DS:DX=数据缓冲区地址

BX=文件代号

CX=读取的字节数
读成功:

  AX=实际读入的字节数

  AX=0 已到文件尾

读出错:AX=错误码
[align=left]40[/align]
[align=left]写文件或设备[/align]
DS:DX=数据缓冲区地址

BX=文件代号

CX=写入的字节数
写成功:

  AX=实际写入的字节数

写出错:AX=错误码
[align=left]41[/align]
[align=left]删除文件[/align]
[align=left]DS:DX=ASCIIZ串地址[/align]
成功:AX=00

出错:AX=错误码(2,5)
[align=left]42

[/align]
[align=left]移动文件指针

[/align]
BX=文件代号

CX:DX=位移量

AL=移动方式(0:从文件头绝对位移,1:从当前位置相对移动,2:从文件尾绝对位移)
成功:DX:AX=新文件指针位置

出错:AX=错误码

[align=left]43

[/align]
[align=left]置/取文件属性

[/align]
DS:DX=ASCIIZ串地址

AL=0 取文件属性

AL=1 置文件属性

CX=文件属性
成功:CX=文件属性

失败:CX=错误码
[align=left]44

[/align]
[align=left]设备文件I/O控制

[/align]
BX=文件代号

AL=0 取状态

  =1 置状态DX

  =2 读数据

  =3 写数据

  =6 取输入状态

  =7 取输出状态
[align=left]DX=设备信息

[/align]
[align=left]45[/align]
[align=left]复制文件代号[/align]
[align=left]BX=文件代号1[/align]
成功:AX=文件代号2

失败:AX=错误码
[align=left]46[/align]
[align=left]人工复制文件代号[/align]
BX=文件代号1

CX=文件代号2
[align=left]失败:AX=错误码[/align]
[align=left]47[/align]
[align=left]取当前目录路径名[/align]
DL=驱动器号

DS:SI=ASCIIZ串地址
(DS:SI)=ASCIIZ串

失败:AX=出错码
[align=left]48[/align]
[align=left]分配内存空间[/align]
[align=left]BX=申请内存容量[/align]
成功:AX=分配内存首地

失败:BX=最大可用内存
[align=left]49[/align]
[align=left]释放内容空间[/align]
[align=left]ES=内存起始段地址[/align]
[align=left]失败:AX=错误码[/align]
[align=left]4A[/align]
[align=left]调整已分配的存储块[/align]
ES=原内存起始地址

BX=再申请的容量
失败:BX=最大可用空间

     AX=错误码
[align=left]4B

[/align]
[align=left]装配/执行程序

[/align]
DS:DX=ASCIIZ串地址

ES:BX=参数区首地址

AL=0 装入执行

AL=3 装入不执行
[align=left]失败:AX=错误码

[/align]
[align=left]4C[/align]
[align=left]带返回码结束[/align]
[align=left]AL=返回码[/align]
[align=left] [/align]
[align=left]4D[/align]
[align=left]取返回代码[/align]
[align=left] [/align]
[align=left]AX=返回代码[/align]
[align=left]4E[/align]
[align=left]查找第一个匹配文件[/align]
DS:DX=ASCIIZ串地址

CX=属性
[align=left]AX=出错代码(02,18)[/align]
[align=left]4F[/align]
[align=left]查找下一个匹配文件[/align]
DS:DX=ASCIIZ串地址

(文件名中带有?或*)
[align=left]AX=出错代码(18)[/align]
[align=left]54[/align]
[align=left]取盘自动读写标志[/align]
[align=left] [/align]
[align=left]AL=当前标志值[/align]
[align=left]56[/align]
[align=left]文件改名[/align]
DS:DX=ASCIIZ串(旧)

ES:DI=ASCIIZ串(新)
[align=left]AX=出错码(03,05,17)[/align]
[align=left]57[/align]
[align=left]置/取文件日期和时间[/align]
BX=文件代号

AL=0 读取

AL=1 设置(DX:CX)
DX:CX=日期和时间

失败:AX=错误码
[align=left]58[/align]
[align=left]取/置分配策略码[/align]
AL=0 取码

AL=1 置码(BX)
成功:AX=策略码

失败:AX=错误码
[align=left]59

[/align]
[align=left]取扩充错误码

[/align]
[align=left] [/align]
AX=扩充错误码

BH=错误类型

BL=建议的操作

CH=错误场所
[align=left]5A[/align]
[align=left]建立临时文件[/align]
CX=文件属性

DS:DX=ASCIIZ串地址
成功:AX=文件代号

失败:AX=错误码
[align=left]5B[/align]
[align=left]建立新文件[/align]
CX=文件属性

DS:DX=ASCIIZ串地址
成功:AX=文件代号

失败:AX=错误码
[align=left]5C

[/align]
[align=left]控制文件存取

[/align]
AL=00封锁

  =01开启

BX=文件代号

CX:DX=文件位移

SI:DI=文件长度
[align=left]失败:AX=错误码

[/align]
[align=left]62[/align]
[align=left]取程序段前缀[/align]
[align=left] [/align]
[align=left]BX=PSP地址[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: