`
lingqi1818
  • 浏览: 253957 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【转】“INT 21H”指令说明及使用方法

DOS 
阅读更多

很多初学汇编语言的同学可能会对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/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=缓冲区首址
30
取DOS版本号
 
AH=发行号,AL=版本
31
结束并驻留
AL=返回码
DX=驻留区大小
 
33

Ctrl-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地址

分享到:
评论

相关推荐

    DOS功能调用INT21H一览表.doc

    DOS功能调用是一种通过INT 21H指令来调用DOS提供的各种功能的机制。通过设置AH寄存器的值来指定要调用的功能号,并设置入口参数,最后通过INT 21H指令来调用DOS提供的功能。 本文将对DOS功能调用INT21H一览表进行...

    台达PLC的DTM指令(数据转换与搬移指令)使用方法示例程序.docx

    若要获取到实际的16位数据"1770H",我们需要使用DTM指令来完成数据的整合。首先,我们需要查阅台达PLC的手册,了解DTM指令的具体用法。手册中通常会详细解释如何操作DTM指令,包括源地址、目标地址以及数据的组合...

    VS2008 MFC VLC 开发所需头文件inttypes.h&stdint;.h&stdbool;

    最后,`readme.txt`文件通常包含有关这些头文件的说明、使用注意事项或版权信息,建议查看该文件以获取更多细节。在实际项目开发中,遵循这些步骤可以确保正确地引入和使用这些关键的头文件,从而顺利完成VLC开发...

    汇编语言 大小写字母转换

    4. 转换后的字符通过`int 21h`的`02h`号功能输出到屏幕,然后使用`loop`指令继续处理下一个字符,直到字符串结束。 ``` display: mov ah, 02h mov dl, al int 21h loop again ``` 5. 最后,在所有字符处理...

    判断年份是否是闰年

    - 最后通过调用`INT 21H`中断指令来显示消息并退出程序。 #### 四、程序流程 1. **初始化**:加载数据段地址到`DS`。 2. **读取年份**:将待检测的年份加载到`AX`。 3. **判断是否为普通闰年**: - 除以100,...

    汇编语言指令集合

    ### 汇编语言指令集合解析 #### 一、伪指令和特殊符号 ...以上是基于提供的内容对汇编语言指令集中的部分指令进行了详细的解释和说明。这些指令是汇编语言中非常基础且常用的操作,对于理解和编写汇编代码至关重要。

    intrins.h头文件介绍

    在C语言编程中,头文件`intrins.h`扮演着重要的角色,它提供了一组内联函数,这些函数直接映射到微控制器的特定指令,以提高程序的效率。本文将深入探讨`intrins.h`头文件中的常见函数及其用途,特别关注在C51编译器...

    masm5.0用法说明

    - 如果程序不显示输出结果,确保你的代码包含相应的输出语句,如`INT 21H`调用。 6. **环境变量设置** - 若你的汇编程序和`masm.exe`、`link.exe`不在同一目录下,需要设置系统环境变量PATH,以便在任何地方都能...

    键盘录入数据的转换与显示汇编程序源代码及说明文档

    在汇编语言中,键盘数据的获取通常通过中断服务例程实现,如INT 16H或INT 9H中断。这些中断服务会捕获用户的按键动作,并将键码存储在特定的寄存器中,如AX或AL。开发者需要编写汇编代码来响应这些中断,读取键码,...

    8086指令系统

    汇编程序的最后,需要返回调用者,例如用:mov ah,4ch int 21h。这是利用了 DOS 功能调用的 4ch 子功能(返回 DOS 的功能:AH=4ch),它的入口参数是 AL=返回数码。通常返回 0 表示没有错误。 在汇编语言中,每条...

    关于汇编语言基础指令介绍

    最后,使用`INT 21H`调用DOS功能来结束程序。 通过这个例子,我们可以看到汇编语言如何清晰地描述硬件操作,以及如何利用汇编语言的灵活性和控制力来编写特定功能的高效代码。学习汇编语言不仅可以增强对计算机系统...

    汇编编程实现二进制和十六进制之间的相互转换,DOS界面输出

    在汇编语言中,会使用类似`INT 21H`这样的指令来调用这些中断。 接下来,我们来看如何进行二进制和十六进制的转换。二进制和十六进制之间的转换主要基于数学原理。例如,将二进制转换为十六进制,可以将二进制数...

    80X86汇编DOS功能调用详解【

    #### 三、功能分类及使用说明 DOS系统功能调用被分为了六个主要类别,每类都提供了一系列实用的服务: 1. **字符I/O管理** - **编号**:01H到0CH - **功能**:管理显示器、键盘、打印机及异步通讯接口的字符输入...

    CJ1CS1指令

    #### 具体指令说明 第3章深入解释了CS/CJ系列指令的具体用法,其中包括但不限于: - **顺序输入指令**:如LD(装载)、AND(与)、OR(或)等,用于构建逻辑控制流程。 - **顺序输出指令**:如OUT(输出)、SET...

    汇编编写,安装中断代码和程序

    4. **调用中断**: 使用`INT`指令触发中断,如`INT 21h`(DOS中断)或`INT 0h`(BIOS中断)。 5. **显示文本**: 利用中断服务,比如DOS中断21h的9号功能(AH=09h)来在屏幕上显示字符串。 6. **返回DOS**: 通过`INT ...

    汇编语言教程-段寄存器的说明语句

    例如,通过调用中断21H的4CH号功能,并把返回码放入AL寄存器,然后执行INT 21H指令来结束程序: MOV AX, 4C00H INT 21H 以上是关于汇编语言中段寄存器和说明语句的基础知识点。掌握这些内容对于编写汇编语言程序至...

    汇编程序课程设计-对文件加密解密

    5. INT 21H的40H功能用于写文件,同样通过BX寄存器中的文件号,DS:DX指定待写数据地址,CX为要写的字节数。 设计任务分为四个主要步骤: 1. 指定文件名读取文件,这涉及到调用3DH功能打开文件并读取数据。 2. 对...

    汇编实验报告

    本实验旨在让学习者掌握基本的汇编语言程序设计方法与技巧,并熟悉汇编语言的编写、调试及运行流程。 ##### 2. 实验内容 - **系统软件的使用**:了解如何使用编辑程序、汇编程序、连接程序以及调试程序等系统工具。...

    一个完整的加密文件程序(附说明)

    具体来说,它利用了INT 21H中断指令中的4EH号功能来搜索当前目录下的第一个匹配文件,以及4FH号功能来搜索下一个匹配文件。为了实现这一功能,程序首先定义了一系列变量用于存储文件名、缓冲区等数据,并通过特定的...

    asm_helloworld_world_

    在DOS环境下,这通常涉及到使用INT 21H中断,调用它的9号功能(AH=09H)来显示字符串。 让我们来看看文件列表: 1. `039.asm`:这是源代码文件,包含汇编语言的代码,用于编写"Hello, World!"程序。 2. `DEBUG....

Global site tag (gtag.js) - Google Analytics