汇编语言 INT 21H功能
作者&投稿:桂温 (若有异议请与网页底部的电邮联系)
mov ah,4ch 是向A寄存器高字节ah赋值16进制数4c。
此语句和int 21h 组合成一个完整的中断调用功能。
int 表示中断,中断有很多种类,其中21h表示DOS系统的系统调用中断这一大类,下面还分了很多小类,小类的选择是放在ah寄存器中的。2个语句组合表示这个中断是21h大类中的4c小类。
类似于(21h)年级 (4c)班。
关于中断的这些分类编号一般在汇编教材的附录里都会有的。
21H是一个中断号
可以说像个菜单
例如ie浏览器中的
文件
编辑。
文件里面有新建
打开等等功能。
也就是功能号
。
用
mov
ah,xx
表示。
如果仅仅单击ie浏览器中的
文件。
只是让你看到里面有什么功能。
所以21h中断号要和它的功能号一起来用。
mov
ah,xx
int
21h
01H、07H和08H —从标准输入设备输入字符
02H —字符输出
03H —辅助设备的输入
04H —辅助设备的输出
05H —打印输出
06H —控制台输入/输出
09H —显示字符串
0AH — 键盘缓冲输入
0BH —检测输入状态
0CH —清输入缓冲区的输入功能
(1)、功能01H、07H和08H
功能描述:从标准输入设备(如:键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾
入口参数:AH=01H,过滤掉控制字符,并回显
=07H,不过滤掉控制字符,不回显
=08H,过滤掉控制字符,不回显
出口参数:AL=输入字符的ASCII码
(2)、功能02H
功能描述:向标准输出设备(如:屏幕)输出一个字符。该输出还可被重定向,如果这样做,则将无法判断磁盘是否满
入口参数:AH=02H
DL=待输出字符的ASCII码
出口参数:无
(3)、功能03H
功能描述:从辅助设备读入一个字符,该辅助设备的缺省值为COM1
入口参数:AH=03H
出口参数:AL=读入字符的ASCII码
(4)、功能04H
功能描述:向辅助设备输出一个字符,该辅助设备的缺省值为COM1
入口参数:AH=04H
DL=待输出字符的ASCII码
出口参数:无
(5)、功能05H
功能描述:向标准的输出设备输出一个字符。该缺省的输出设备为LPT1端口的打印机,除非用MODE命令来改变
入口参数:AH=05H
DL=待输出字符的ASCII码
出口参数:无
(6)、功能06H
功能描述:控制台(如:键盘、屏幕)输入/输出。如果输入/输出操作被重定向,那么,将无法判断文件是否已到文件尾,或磁盘已满
入口参数:AH=06H,DL=输入/输出功能选择
出口参数:若DL=00H-FEH,则此功能为输出,DL为待输出字符的ASCII码;
若DL=0FFH,则此功能为输入,此时:若ZF=1,则无字符可读,否则,AL=读入字符的ASCII码
(7)、功能09H
功能描述:输出一个字符串到标准输出设备上。如果输出操作被重定向,那么,将无法判断磁盘已满
入口参数:AH=09H
DS:DX=待输出字符的地址
说明:待显示的字符串以’$’作为其结束标志
出口参数:无
(8)、功能0AH
功能描述:从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾
入口参数:AH=0AH
DS:DX=存放输入字符的起始地址
接受输入字符串缓冲区的定义说明:
1、第一个字节为缓冲区的最大容量,可认为是入口参数;
2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
3、从第三个字节开始存放实际输入的字符串;
4、字符串以回车键结束,回车符是接受的最后一个字符;
5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。
例如:
BUFF 80, ?, 80 DUP(?) ;最多接受80个字符
出口参数:无
(9)、功能0BH
功能描述:检查标准输入设备上是否有字符可读。该输入操作可被重定向
入口参数:AH=0BH
出口参数:AL=00H——无字符可读;FFH——有字符可读
(10)、功能0CH
功能描述:清空当前的标准输入缓冲区,再读入字符。其输入操作可被重定向
入口参数:AH=0CH
AL=01H、06H、07H、08H或0AH
出口参数:若入口参数AL为0AH,则DS:DX=存放输入字符的起始地址,否则,出口参数AL=输入字符的ASCII码
2、目录控制功能(Directory-Control Function)
39H —创建目录
3AH —删除目录
3BH —设置当前目录
47H —读取当前目录
(1)、功能39H
功能描述:用指定的驱动器和路径创建一个新目录
入口参数:AH=39H
DS:DX=指定路径的字符串地址(以0为字符串的结束标志)
出口参数:CF=0——创建成功,否则,AX=错误号(03H或05H),其含义见错误代码表
(2)、功能3AH
功能描述:删除指定的驱动器和路径的目录
入口参数:AH=3AH
DS:DX=指定路径的字符串地址(以0为字符串的结束标志)
出口参数:CF=0——删除成功,否则,AX=错误号(03H或05H),其含义见错误代码表
(3)、功能3BH
功能描述:用指定的驱动器和路径设置为当前目录
入口参数:AH=3BH
DS:DX=指定路径的字符串地址(以0为字符串的结束标志)
出口参数:CF=0——设置成功,否则,AX=错误号(03H),其含义见错误代码表
(4)、功能47H
功能描述:取当前目录的完全路径字符串
入口参数:AH=47H
DL=驱动器号(0=缺省,1=A,…)
DS:SI=存放当前目录字符串的地址
出口参数:CF=0——读取成功,否则,AX=错误号(0FH),其含义见错误代码表
int 21H DOS功能调用
INT 21H 功能调用一览表
编号 功能 入口参数 出口参数
0 程序终止 CS=PSP段地址
1 带回显的字符输入 AL=8位数据
2 字符输出 DL=8位数据
3 辅助设备输入 AL=8位数据
4 辅助设备输出 DL=8位数据
5 打印输出 DL=8位数据
6 直接控制台I/O DL=0FFH(输入请求) DL=0-OFEH(输出请求)
AL=8位数据
7 无回显过滤的字符输入 AL=8位数据
8 无回显的字符的输入 AL=8位数据
9 显示字符串 DS:DX=字符串
OAH 缓冲输入 DS:DX=缓冲区段:位移
OBH 取输入状态 AL=0(无字符) AL=1(有字符)
OCH 重置输入缓冲区后输入 AL=功能号(1/6/7/8/OAH) DS:DX=缓冲区(功能OAH)
AL=8位数据 (功能1/6/7/8)
ODH 重启动磁盘
OEH 置缺省盘驱动器 DL=驱动器码(0=A,1=B) AL=总的驱动器数
OFH 打开文件 DS:DX=FCB AL=0:成功,-1:失败
10H 关闭文件 DS:DX=FCB AL=0:成功,-1:失败
11H 查找第一匹配目录 DS:DX=FCB AL=0:成功,-1:失败
12H 查找下一匹配目录 DS:DX=FCB AL=0:成功,-1:失败
13H 删除文件 DS:DX=FCB AL=0:成功,-1:失败
14H 顺序读 DS:DX=FCB AL=返回码
15H 顺序写 DS:DX=FCB AL=返回码
16H 创建文件 DS:DX=FCB AL=0:成功,-1:失败
17H 重命名文件 DS:DX=FCB AL=0:成功,-1:失败
18H 保留未用
19H 取缺省盘驱动器 AL=驱动器码(0=A)
1AH 设置DTA DS:DX=DTA
1BH 取缺省驱动器的分配信息 AL=每簇的扇区数 CX=每扇区的字节数
DX=文件区所占簇数
DS:BX=介质描述字节
1CH 取指定驱动器的分配信息 DL=驱动器码(0=缺省…) 同上
1DH 保留未用
1EH 保留未用
1FH 取缺省驱动器的DPB DS:BX=DPB
20F 保留未用
21F 随机读一个记录 DS:DX=FCB AL=返回码
22F 随机写一个记录 DS:DX=FCB AL=返回码
23F 取文件大小 DS:DX=未打开的FCB AL=0:成功,-1:失败
24F 设置随机记录号 DS:DX=FCB
25F
置中断向量 AL=中断号,DS:DX=入口
26F 创建程序段前缀 DX=新程序段的段地址
27H 随机读若干记录 CX=记录数 DS:DX=FCB
AL=返回码 CX=实际记录数
28H 随机写若干记录
29H 分析文件名 AL=控制分析标志 DS:SI=正文串段:位移
ES:DI=FCB段:位移
AL=分析结果 DS:SI=分析后的头一字符段的段:位移
2AH 取系统日期 CX=年,AL=星期 DH=月,DL=日
2BH 置系统日期 CX=年,DH=月,DL=日 AL=0:成功,-1:失败
2CH 取系统时间 CH=时,CL=分 DH=秒,DL=百分秒
2DH 置系统时间 CX=时和分,DX=秒,百分秒 AL=0:成功,-1:失败
2EH 置确认标志 AL=0:关闭,1:打开
2FH 取DTA AL,AH=主,次版本
30H 取DOS版本号 AL=0:成功,-1失败
31H 结束并驻留 AL=返回码,DX=内存大小
32H 取指定驱动器的DPB DL=驱动器码(0=缺省…) DS:BX=DPB
33H 取或置Ctrl-Break标志 AL=0(取标志) AL=1(置标志),DL=标志
DL=标志状态(功能0) (0:关,1:开)
34H 取DOS中断标志 ES:BX=DOS中断标志
35H 取中断向量 AL=中断号 ES:BX=中断程序入口
36H 取磁盘的自由空间 DL=驱动器码(0=缺省…) 驱动器无效:AX=-1 有效:AX=每簇扇区数
BX=自由簇数
CX=每扇区字节数
DX=文件区所占簇数
37H 取或置命令行开关符, 取或置名字检查开关
AL=0(取开关符) AL=1(置开关符)
DL=(开关符)
AL=2(取检查开关)
AL=3(置检查开关)
DL=开关值
DL=开关符(功能0)
DL=检查开关(功能2)
38H 取国家信息 AL=0,DS:DX=缓冲区
39H 创建子目录 DS:DX=路径说明串 注1
3AH 删除子目录 DS:DX=路径说明串 注1
3BH 设置当前目录 DS:DX=路径说明串 注1
3CH 创建文件 DS:DX=文件说明,CX=属性 注2
3DH 打开文件 DS:DX=文件说明,AL=模式 注2
3EH 关闭文件 BX=文件号 注1
3FH 读文件或设备 BX=文件号 CX=字符数
CX:DX=缓冲区
成功:CF=0,DX:AX=新指针位置 失败:CF=1,AX=错误码
40H 写文件或设备
41H 删除文件 DS:DX=文件说明串 注1
42H 移文件指针 AL=方式 BX=文件号
CX:DX=位移量
成功:CF=0,DX:AX=新指针位置 失败:CF=1,AX=错误码
43H
取或置文件属性 AL=0(取属性) AL=1,CX=新属性(置属性)
DS:DX=文件说明
CX=属性(功能0)
44H 设备驱动控制 AL=0(取设备信息) AL=1(置设备信息)
AL=2(读设备控制通道)
AL=3(写设备控制通道)
AL=4(同功能2)
AL=5(同功能3)
AL=6(取输入状态)
AL=7(取输出状态)
BX=文件号(功能0-3,6-7)
BL=驱动器码(功能4-5)
CX=字节数(功能2-5)
DS:DX=缓冲区(功能2-5)
失败:CF=1,AX=错误码 成功:
DX=设备信息(功能0)
AL=状态(功能6/7)
0:未准备,1:准备
AX=传送字节数(功能2-5)
45H 复制文件号 BX=文件号 成功:CF=0 AX=新文件号
失败:CF=1,AX=错误码
46H 强迫复制文件号 BX=第1文件号 CX=第2文件号
注1
47H 取当前目录 DL=驱动器码 DS:SI=缓冲区
注1
48H 分配内存 BX=所需内存的节数 成功:CF=0 AX=分配块的段
失败:CF=1,AX=错误码
BX=最大可用块大小
49H 释放内存 ES=释放块的段 注1
4AH 修改内存分配 ES=修改块的段 BX=新长度(以节计)
成功:CF=0 失败:CF=1,AX=错误码
BX=最大可用块大小
4BH 加载程序 执行程序
AL=0(加载并执行) AL=1(获得执行信息)
AL=3(加载覆盖)
DS:DX=程序说明
ES:BX=参数块
注1
4CH 带返回码结束 AL=返回码
4DH 取返回码 AH=类型码,AL=返回码
4EH 查找第一个匹配项 CX=属性,DS:DX=文件说明 注1
4FH 查找下一个匹配项 注1
50H 设置PSP段地址 BX=PSP段地址
51H 取PSP段地址 BX=PSP段地址
52H 取DOS系统数据块 ES:BX=DOS系统数据块
53H 为块设备建立DPB DS:SI=BPB,ES:BP=DPB
54H 取确认标志 AL=标志值(0:关,1:开)
55H 创建PSP DX=PSP
56H 重命名文件 DS:DX=旧名,ES:DI=新名 注1
57H 取或置文件日期和时间 AL=0,BX=文件号(取) AL=1,BX=文件号,
CX=时间,DX=日期(置)
成功:CF=0,CX=时间 DX=日期(取)
失败:CF=1,AX=错误码
58H 取/置分配策略码 AL=0取码 =1置码(BX)
BX=策略码
成功:AX=策略码 失败:AX=错误码
59H 取扩充错误码 AX=扩充错误码 BH=错误类型
BL=建议的操作
CH=错误场所
5AH 建立临时文件 CX=文件属性 DS:DX=ASCⅡZ串地址
成功:AX=文件代号 失败:AX=错误码
5BH 建立新文件 CX=文件属性 DS:DX=ASCⅡZ串地址
成功:AX=文件代号 失败:AX=错误码
5CH 控制文件存取 AL=00封锁 =01开启
BX=文件代号
CX:DX=文件位移
SI:DI=文件长度
失败:AX=错误码
62H 取程序段前缀地址 BX=PSP地址
注1:出口参数为:成功时,CF=0;失败时,CF=1,AX=错误码 注2:出口参数为:成功时,CF=0,AX=文件号;失败时,CF=1,AX=错误码
21H是一个中断号
可以说像个菜单 例如ie浏览器中的 文件 编辑。
文件里面有新建 打开等等功能。
也就是功能号 。
用 mov ah,xx 表示。
如果仅仅单击ie浏览器中的 文件。
只是让你看到里面有什么功能。
所以21h中断号要和它的功能号一起来用。
mov ah,xx
int 21h
通过给AH寄存器赋值,然后调用INT 21H指令,计算机就会根据AH寄存器中的值执行相应的操作给,AH寄存器赋值效果,请看下面连接详细介绍http://blog.csdn.net/chinazeze/archive/2007/08/10/1735621.aspx
DOS功能调用(int 21h)有近百个功能,调用方式:把功能号赋给AH,然后执行功能调用,详细资料,请参考 http://hi.baidu.com/fengdshy/blog/item/f8b1f12495591c21d4074297.html
及下方的参考资料
长孙封果纳: 是DOS的中断调用 比如 MOV AH 4CH INT 21H 是返回DOS系统的 通过给AH寄存器赋值4CH,然后调用INT 21H指令,计算机就会根据AH寄存器中的值执行相应的操作,其中4CH是返回DOS系统,还可给AH寄存器赋其他值.
宝山区15283544363: 汇编的中断指令INT 21H有什么用啊? - ?
长孙封果纳: 21H是一个中断号 可以说像个菜单 例如ie浏览器中的 文件 编辑 文件里面有新建 打开等等功能 也就是功能号 用 mov ah,xx 表示如果仅仅单击ie浏览器中的 文件 只是让你看到里面有什么功能 所以21h中断号要和它的功能号一起来用 mov ah,xx int 21h------------------------------- 当然也有功能号和中断号合为一体的(个人看法) 例如 int 20h (调用20h中断 返回)
宝山区15283544363: 汇编语言 INT 21H功能 - ?
长孙封果纳: 通过给AH寄存器赋值,然后调用INT 21H指令,计算机就会根据AH寄存器中的值执行相应的操作给,AH寄存器赋值效果,请看下面连接详细介绍http://blog.csdn.net/chinazeze/archive/2007/08/10/1735621.aspx
宝山区15283544363: 汇编中INT的用法 - ?
长孙封果纳: DATAS SEGMENT string1 db 'Jia I love you!$' ;这里是定义数据段 ,就是要显示的字符串 DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS ;关联寄存器 START: MOV ...
宝山区15283544363: 汇编语言 怎样将数字输出,为什么? 讲讲原理 - ?
长孙封果纳: 如果要用汇编显示东西,一般是调用中断来完成的(一般是int 21h),这里的int 21h其实是一个子程序,他是系统(dos)本身帮你写好了的,不用你管,你只要按要求把东西提供给他他就会完成它的功能,在汇编书上一般都有int 21h的功能说...
宝山区15283544363: 汇编语言中 LEA DX,S MOV AH,9 INT 21H具体意思是什么,请大师指教. - ?
长孙封果纳: LEA DX,S ;装载s的有效地址到dx,该语句可以用mov dx,s代换,把S单元的地址装到DX,因为下一条指令要用到S的地址 MOV AH,9 INT 21H;调用DOS功能,该功能为显示DS:DX地址处的字符
宝山区15283544363: 汇编语言 INT 20H和INT 21H有什么区别?高分在线求助 - ?
长孙封果纳: int 20h 程序终止 本中断只适用于ms-dos,建议不要使用int 20h终止程序,应当利用dos功能调用4ch来适当地终止程序. 本中断入口参数:CS=程序PSP的段地址 返回:无 int 21h dos功能调用 含有近100个功能,提供了应用程序所需要的大多数服务,包括打开文件、关闭文件、读文件、写文件、读键盘输入、写显示屏、读取或设置系统日期和时间,以及一大堆控制变量.
宝山区15283544363: 从键盘输入一个字符串在下一行逆序输出用汇编语言如何实现 - ?
长孙封果纳: 从键盘输入一个字符串在下一行逆序输出用汇编语言可用如下方法实现: ;汇编语言输入一串字符串,可以调用DOS功能中断INT 21H的06H功能. ;程序功能:输入一串字符,以回车符结束,输入字符串最大长度200字符; ; 输入结束在下一...
宝山区15283544363: 汇编语言MOV AH 0BH INT 21H什么意思 - ?
长孙封果纳: 汇编语言 MOV AH 0BH INT 21H是86单片机的DOS调用中断 完成的功能是:检验键盘状态 返回值:AL=00,有输入AL=FF,无输入
宝山区15283544363: 汇编语言中执行INT 21H后会不会继续执行下一条语句 - ?
长孙封果纳: 会,执行完21号中断的输出子功能,程序会接着往下执行,就像C语言执行完printf函数后还会接着执行后边内容 追问: 那我想输出几个 字符 串,后面是同一个字符串,我用了循环,可是为什么只能输出第一个字符串呢?其他的却不输出啊! ...