INT 21 指令集

本文由 简悦 SimpRead 转码, 原文地址 http://www.cnblogs.com/ynwlgh/archive/2011/12/12/2285017.html 很多初学汇编语言的同学可能会对 INT 21H 这条指令感到困惑,不知道是什么意思,下面就以一段简单的程序为大家讲解: 例如:需要键盘输入,并且回显。 AH 的值需要查表取得,表在下面 指令:MOV AH,01 INT 21H 通过这样两条指令,输入的字符就会被存储在 AL 中。 表:DOS 系统功能调 INT 21H


AH功能调用参数返回参数
00程序终止 (同 INT 20H)CS = 程序段前缀
01键盘输入并回显AL = 输入字符
02显示输出DL = 输出字符
03异步通迅输入AL = 输入数据
04异步通迅输出DL = 输出数据
05打印机输出DL = 输出字符
06直接控制台 I/ODL=FF(输入) DL = 字符 (输出)AL = 输入字符
07键盘输入 (无回显)AL = 输入字符
08键盘输入 (无回显) 检测 Ctrl-BreakAL = 输入字符
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 = 缓冲区首址
30取 DOS 版本号AH = 发行号, AL = 版本
31结束并驻留AL = 返回码 DX = 驻留区大小
33Ctrl-Break 检测AL=00 取状态 =01 置状态 (DL) DL=00 关闭检测 =01 打开检测DL=00 关闭 Ctrl-Break 检测 =01 打开 Ctrl-Break 检测
35取中断向量AL = 中断类型ES:BX = 中断向量
36取空闲磁盘空间DL = 驱动器号 0 = 缺省, 1=A,2=B,…成功: AX = 每簇扇区数 BX = 有效簇数 CX = 每扇区字节数 DX = 总簇数 失败: AX=FFFF
38置 / 取国家信息DS:DX = 信息区首地址BX = 国家码 (国际电话前缀码) AX = 错误码
39建立子目录 (MKDIR)DS:DX=ASCIIZ 串地址AX = 错误码
3A删除子目录(RMDIR)DS:DX=ASCIIZ 串地址AX = 错误码
3B改变当前目录 (CHDIR)DS:DX=ASCIIZ 串地址AX = 错误码
3C建立文件DS:DX=ASCIIZ 串地址 CX = 文件属性成功: AX = 文件代号 错误: AX = 错误码
3D打开文件DS:DX=ASCIIZ 串地址 AL=0 读 =1 写 =3 读 / 写成功: AX = 文件代号 错误: AX = 错误码
3E关闭文件BX = 文件代号失败: AX = 错误码
3F读文件或设备DS:DX = 数据缓冲区地址 BX = 文件代号 CX = 读取的字节数读成功: AX = 实际读入的字节数 AX=0 已到文件尾 读出错: AX = 错误码
40写文件或设备DS:DX = 数据缓冲区地址 BX = 文件代号 CX = 写入的字节数写成功: AX = 实际写入的字节数 写出错: AX = 错误码
41删除文件DS:DX=ASCIIZ 串地址成功: AX=00 出错: AX = 错误码 (2,5)
42移动文件指针BX = 文件代号 CX:DX = 位移量 AL = 移动方式 (0: 从文件头绝对位移, 1: 从当前位置相对移动, 2: 从文件尾绝对位移)成功: DX:AX = 新文件指针位置 出错: AX = 错误码
43置 / 取文件属性DS:DX=ASCIIZ 串地址 AL=0 取文件属性 AL=1 置文件属性 CX = 文件属性成功: CX = 文件属性 失败: CX = 错误码
44设备文件 I/O 控制BX = 文件代号 AL=0 取状态 =1 置状态 DX =2 读数据 =3 写数据 =6 取输入状态 =7 取输出状态DX = 设备信息
45复制文件代号BX = 文件代号 1成功: AX = 文件代号 2 失败: AX = 错误码
46人工复制文件代号BX = 文件代号 1 CX = 文件代号 2失败: AX = 错误码
47取当前目录路径名DL = 驱动器号 DS:SI=ASCIIZ 串地址(DS:SI)=ASCIIZ 串 失败: AX = 出错码
48分配内存空间BX = 申请内存容量成功: AX = 分配内存首地 失败: BX = 最大可用内存
49释放内容空间ES = 内存起始段地址失败: AX = 错误码
4A调整已分配的存储块ES = 原内存起始地址 BX = 再申请的容量失败: BX = 最大可用空间 AX = 错误码
4B装配 / 执行程序DS:DX=ASCIIZ 串地址 ES:BX = 参数区首地址 AL=0 装入执行 AL=3 装入不执行失败: AX = 错误码
4C带返回码结束AL = 返回码
4D取返回代码AX = 返回代码
4E查找第一个匹配文件DS:DX=ASCIIZ 串地址 CX = 属性AX = 出错代码 (02,18)
4F查找下一个匹配文件DS:DX=ASCIIZ 串地址 (文件名中带有? 或 *)AX = 出错代码 (18)
54取盘自动读写标志AL = 当前标志值
56文件改名DS:DX=ASCIIZ 串 (旧) ES:DI=ASCIIZ 串 (新)AX = 出错码 (03,05,17)
57置 / 取文件日期和时间BX = 文件代号 AL=0 读取 AL=1 设置 (DX:CX)DX:CX = 日期和时间 失败: AX = 错误码
58取 / 置分配策略码AL=0 取码 AL=1 置码 (BX)成功: AX = 策略码 失败: AX = 错误码
59取扩充错误码AX = 扩充错误码 BH = 错误类型 BL = 建议的操作 CH = 错误场所
5A建立临时文件CX = 文件属性 DS:DX=ASCIIZ 串地址成功: AX = 文件代号 失败: AX = 错误码
5B建立新文件CX = 文件属性 DS:DX=ASCIIZ 串地址成功: AX = 文件代号 失败: AX = 错误码
5C控制文件存取AL=00 封锁 =01 开启 BX = 文件代号 CX:DX = 文件位移 SI:DI = 文件长度失败: AX = 错误码
62取程序段前缀BX=PSP 地址
  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值