注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[Assembly] DOS功能调用一览表(INT 21)

2006-09-18 03:12:50|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

[转载]


今天在研究 dwing 的 loca.com,呵呵,发现里面用了 int 21 的调用(主要是读写文件),所以将DOS的内容又翻出来了,呵呵。



DOS功能调用一览表
----------------------------------------

一、DOS软中断
DOS 2.10使用了20H - 27H, 其功能定义为:
┌───┬─────────┬──────────┬────────┐
│中断 │ 功 能 │ 入口参数 │ 出口参数 │
├───┼─────────┼──────────┼────────┤
│INT 20│程序正常退出 │CS=PSP段地址 │ │
├───┼─────────┼──────────┼────────┤
│INT 21│系统功能调用 │AH=功能号 │ │
├───┼─────────┼──────────┼────────┤
│INT 22│程序结束处理 │ │ │
├───┼─────────┼──────────┼────────┤
│INT 23│Ctrl-Break处理 │ │ │
├───┼─────────┼──────────┼────────┤
│ │ │ │AL=0(忽略) │
│INT 24│严重错误处理 │ │AL=1(重试) │
│ │ │ │AL=2(通过INT 23H│
│ │ │ │ 终止) │
├───┼─────────┼──────────┼────────┤
│ │ │AL=驱动器号 │Cy=1 出错 │
│INT 25│绝对磁盘读 │CX=读入扇区数 │Cy=0 正确 │
│ │ │DX=起始逻辑扇区数 │ │
│ │ │DS:BX=缓冲区地址 │ │
├───┼─────────┼──────────┼────────┤
│ │ │AL=驱动器号 │ │
│INT 26│绝对磁盘写 │CX=写盘扇区数 │ │
│ │ │DX=起始逻辑扇区数 │ │
│ │ │DS:BX=缓冲区地址 │ │
├───┼─────────┼──────────┼────────┤
│INT 27│驻留退出 │CS=PSP段地址 │ │
│ │ │DX=程序末地址+1 │ │
└───┴─────────┴──────────┴────────┘
二、DOS功能调用
功能号在AH中, 并设好其余的入口参数, 向DOS发出INT 21H命令, 最后获得出口参
数。
┌───┬──────────┬───────────┬───────────┐
│调用号│ 功 能 │ 入口参数 │ 出口参数 │
├───┼──────────┼───────────┼───────────┤
│ 00H │程序终止 │CS=PSP段地址 │ │
│ 01H │键盘输入字符 │ │AL=输入的字符 │
│ 02H │显示输出 │DL=显示的字符 │ │
│ 03H │串行设备输入 │ │AL=输入的字符 │
│ 04H │串行设备输出 │DL=输出的字符 │ │
│ 05H │打印输出 │DL=输出的字符 │ │
│ 06H │直接控制台I/O │DL=0FFH(输入请求) │AL=输入的字符 │
│ │ │DL=字符(输出请求) │ │
│ 07H │直接控制台I/O │ │AL=输入的字符 │
│ │(不显示输入) │ │ │
│ 08H │键盘输入字符(无回显)│ │AL=输入的字符 │
│ 09H │显示字符串 │DS:DX=缓冲区首址 │ │
│ 0AH │输入字符串 │DS:DX=缓冲区首址 │ │
│ 0BH │检查标准输入状态 │ │AL=00 无按键 │
│ │ │ │AL=0FFH 有按键 │
│ 0CH │清除输入缓冲区并执行│AL=功能号(01/06/07/08/│AL=输入的数据(功能01/ │
│ │指定的标准输入功能 │ 0AH) │ 06/07/08) │
│ │ │DS:DX=缓冲区(0AH功能) │ │
│ 0DH │初始化磁盘状态 │ │ │
│ 0EH │选择缺省的驱动器 │DL=驱动器号(0=A,1=B..)│AL=逻辑驱动器数 │
│ 0FH │打开文件 │DS:DX=未打开的FCB首址 │AL=00 成功,0FFH 失败 │
│ 10H │关闭文件 │DS:DX=打开的FCB首址 │AL=00 成功,0FFH 失败 │
│ 11H │查找第一匹配目录 │DS:DX=未打开的FCB首址 │AL=00 成功,0FFH 失败 │
│ 12H │查找下一匹配目录 │DS:DX=未打开的FCB首址 │AL=00 成功,0FFH 失败 │
│ 13H │删除文件 │DS:DX=未打开的FCB首址 │AL=00 成功,0FFH 失败 │
│ 14H │顺序读 │DS:DX=打开的FCB首址 │AL=00 成功,01 文件结束│
│ │ │ │ 02 缓冲区太小 │
│ │ │ │ 03 缓冲区不满 │
│ 15H │顺序写 │DS:DX=打开的FCB首址 │AL=00 成功,01 盘满 │
│ │ │ │ 02 缓冲区太小 │
│ 16H │创建文件 │DS:DX=未打开的FCB首址 │AL=00 成功 │
│ │ │ │ 0FFH 目录区满 │
│ 17H │文件换名 │DS:DX=被修改的FCB首址 │AL=00 成功, 0FFH 未找 │
│ │ │ │ 到目录项或文件重名 │
│ *18H │保留未用 │ │ │
│ 19H │取缺省驱动器号 │ │AL=驱动器号(0=A,1=B..)│
│ 1AH │设置磁盘缓冲区DTA │DS:DX=磁盘缓冲区首址 │ │
│ *1BH │取缺省驱动器的磁盘格│ │AL=每簇的扇区数 │
│ │式信息 │ │CX=每扇区的字节数 │
│ │ │ │DX=数据区总簇数-1 │
│ │ │ │DS:BX=介质描述字节 │
│ *1CH │取指定驱动器的磁盘格│DL=驱动器号(0=缺省, │AL=每簇的扇区数 │
│ │式信息 │ 1=A..) │CX=每扇区的字节数 │
│ │ │ │DX=数据区总簇数-1 │
│ │ │ │DS:BX=介质描述字节 │
│ *1DH │保留未用 │ │ │
│ *1EH │保留未用 │ │ │
│ *1FH │取缺省驱动器的DPB │ │DS:BX=DPB首址 │
│ *20H │保留未用 │ │ │
│ 21H │随机读一个记录 │DS:DX=打开的FCB首址 │AL=00 成功,01 文件结束│
│ │ │ │ 02 缓冲区太小 │
│ │ │ │ 03 缓冲区不满 │
│ 22H │随机写一个记录 │DS:DX=打开的FCB首址 │AL=00 成功, 01 盘满 │
│ │ │ │ 02 缓冲区太小 │
│ 23H │取文件大小 │DS:DX=未打开的FCB首址 │AL=00 成功,0FFH 失败 │
│ 24H │设置随机记录号 │DS:DX=打开的FCB首址 │ │
│ 25H │设置中断向量 │AL=中断号 │ │
│ │ │DS:DX=中断程序入口 │ │
│ *26H │创建新的PSP │DS:DX=新的PSP段地址 │ │
│ 27H │随机读若干记录 │DS:DX=打开的FCB首址 │AL=00 成功,01 文件结束│
│ │ │CX=要读入的记录数 │AL=02 缓冲区太小 │
│ │ │ │AL=03 缓冲区不满 │
│ │ │ │CX=读入的块数 │
│ 28H │随机写若干记录 │DS:DX=打开的FCB首址 │AL=00 成功,01 盘满 │
│ │ │CX=要写入的记录数 │AL=02 缓冲区太小 │
│ │ │ │AL=03 缓冲区不满 │
│ │ │ │CX=已写的块数 │
│ 29H │分析文件名 │AL=分析控制标记 │AL=00 未通配符 │
│ │ │DS:SI=要分析的字符串 │ 01 有通配符 │
│ │ │ES:DI=未打开的FCB首址 │ 0FFH 驱动器字母无效 │
│ │ │ │ES:DI=未打开的FCB │
│ 2AH │取系统日期 │ │CX=年(1980-2099) │
│ │ │ │DH=月, DL=日, AL=星期 │
│ │ │ │(0=星期日) │
│ 2BH │置系统日期 │CX=年, DH=月, DL=日 │AL=00 成功,0FFH 失败 │
│ 2CH │取系统时间 │ │CH=时(0-23),CL=分,DH= │
│ │ │ │ 秒,DL=百分之几秒 │
│ 2DH │置系统时间 │CX=时,分 DX=秒,百分秒 │AL=00 成功,0FFH 失败 │
│ 2EH │设置/复位校验开关 │AL=0 关闭, 1 打开 │ │
│ 2FH │取磁盘传输地址DTA │ │ES:BX=DTA首地址 │
│ 30H │取DOS版本 │ │AL,AH=DOS主、次版本 │
│ 31H │结束并驻留 │AL=返回码,DX=内存大小 │ │
│ *32H │取指定驱动器的DPB │ │DS:BX=DPB首址 │
│ 33H │取或置Ctrl-Break标志│AL=0:取, 1:置,DL=标志 │DL=标志(取功能) 0:关 │
│ │ │ │ 1:开 │
│ *34H │取DOS中断标志 │ │ES:BX=DOS中断标志 │
│ 35H │取中断向量地址 │AL=中断号 │ES:BX=中断程序入口 │
│ 36H │取磁盘的自由空间 │DL=驱动器号(0=缺省,1=A│AX=FF 驱动器无效 │
│ │ │ │ 其它 每簇扇区数 │
│ │ │ │BX=自由簇数 │
│ │ │ │CX=每扇区字节数 │
│ │ │ │BX=文件区所占簇数 │
│ *37H │取/置参数分隔符 │AL=0:取分隔符,1:置分隔│DL=分隔符(功能0) │
│ │ │ 符,DL=分隔符 │ │
│ │取/置设备名许可标记 │ 2:取许可标记 │DL=许可标记(功能2) │
│ │ │ 3:置许可标记,DL=许 │ │
│ │ │ 可标记 │ │
│ 38H │取国家信息 │AL=0,DS:DX=缓冲区首址 │ │
│ 39H │创建子目录 │DS:DX=路径字符串 │CF=0 成功,1 失败,AX=错│
│ │ │ │ 误码 │
│ 3AH │删除子目录 │DS:DX=路径字符串 │CF=0 成功,1 失败,AX=错│
│ │ │ │ 误码 │
│ 3BH │设置子目录 │DS:DX=路径字符串 │CF=0 成功,1 失败,AX=错│
│ │ │ │ 误码 │
│ 3CH │创建文件 │DS:DX=带路径的文件名 │CF=0 成功,AX=文件号 │
│ │ │CX=属性 1-只读 2-隐蔽 │CF=1 失败,AX=错误码 │
│ │ │ 4-系统 │ │
│ 3DH │打开文件 │DS:DX=带路径的文件名 │CF=0 成功,AX=文件号 │
│ │ │AL=方式 0-读 1-写 2-读│CF=1 失败,AX=错误码 │
│ │ │ 写 │ │
│ 3EH │关闭文件 │BX=文件号 │CF=0 成功 │
│ │ │ │CF=1 失败,AX=错误码 │
├───┼──────────┼───────────┼───────────┤
│ 3FH │读文件或设备 │BX=文件号 │CF=0 成功 │
│ │ │CX=字节数 │DX:AX=新的指针位置 │
│ 40H │写文件或设备 │DS:DX=缓冲区首址 │CF=1 失败,AX=错误码 │
├───┼──────────┼───────────┼───────────┤
│ 41H │删除文件 │DS:DX=带路径的文件名 │CF=0 成功,1 失败,AX=错│
│ │ │ │ 误码 │
│ 42H │移动文件指针 │AL=方式 0-正向 1-相对 │CF=0 成功,DX:AX=新的文│
│ │ │ 2-反向 │ 件指针 │
│ │ │BX=文件号,CX:DX=移动的│CF=1 失败,AX=错误码 │
│ │ │ 位移量 │ │
│ 43H │取/置文件属性 │AL=0:取 1:置,CX=新属性│CX=属性(功能0) 1-只读 │
│ │ │DS:DX=带路径的文件名 │2-隐蔽 4-系统 20H-归档│
│ 44H │设备输入/输出控制: │AL=0/1 取/置设备信息 │CF=0 成功 │
│ │设置/取得与打开设备 │ 2/3 读/写设备控制通道│DX=设备信息(功能0) │
│ │的句柄相关联信息, 或│ 4/5 同功能2/3 │AL=状态(功能6/7) │
│ │发送/接收控制字符串 │ 6/7 取输入/输出状态 │ 0 未准备, 1 准备 │
│ │至设备句柄 │BX=句柄(功能0-3,6-7) │AX=传送的字节数(功能2-│
│ │ │BL=驱动器号(功能4-5) │ 5) │
│ │ │CX=字节数(功能2-5) │ │
│ │ │DS:DX=缓冲区(功能2-5) │ │
│ 45H │复制文件号(对于一个 │BX=文件号 │CF=0 成功,AX=新文件号 │
│ │打开的文件返回一个新│ │CF=1 失败,AX=错误码 │
│ │的文件号) │ │ │
│ 46H │强行复制文件号 │BX=现存的文件号,CX=第2│CF=0 成功, 1 失败 │
│ │ │ 文件号 │AX=错误码 │
│ 47H │取当前目录 │DL=驱动器号 │CF=0 成功, 1 失败 │
│ │ │DS:SI=缓冲区首址 │AX=错误码 │
│ 48H │分配内存 │BX=所需的内存节数 │CF=0 成功,AX=分配的段 │
│ │ │ │数,CF=1 失败,AX=错误码│
│ │ │ │BX=最大可用块大小 │
│ 49H │释放内存 │ES=释放块的段值 │CF=1 失败,AX=错误码 │
│ 4AH │修改分配内存 │ES=修改块的段值 │CF=1 失败,AX=错误码 │
│ │ │BX=新长度(以节为单位) │BX=最大可用块大小 │
│ 4BH │装载程序 │AL=0 装载并运行 │CF=1 失败,AX=错误码 │
│ │运行程序 │ 1 获得执行信息 │ │
│ │ │ 3 装载但不运行 │ │
│ │ │DS:DX=带路径的文件名 │ │
│ │ │ES:BX=装载用的参数块 │ │
│ 4CH │带返回码的结束 │AL=进程返回码 │ │
│ 4DH │取由31H/4CH带回的返 │ │AL=进程返回码 │
│ │回码 │ │AH=类型码,0-正常结束 │
│ │ │ │1-由Ctrl-Break结束 │
│ │ │ │2-由严重设备错误而结束│
│ │ │ │3-由调用31H而结束 │
│ 4EH │查找第一个匹配项 │DS:DX=带路径的文件名 │CF=1 失败,AX=错误码 │
│ │ │CX=属性 │ │
│ 4FH │查找下一个匹配项 │ │CF=1 失败,AX=错误码 │
│*50H │建立当前的PSP段地址 │BX=PSP段地址 │ │
│ │ │ │ │
│*51H │读当前的PSP段地址 │ │BX=PSP段地址 │
│*52H │取DOS系统数据区首址 │ │ES:BX=DOS数据区首址 │
│*53H │为块设备建立DPB │DS:SI=BPB,ES:DI=DPB │ │
│ 54H │取校验开关设定值 │ │AL=标志值(0:关,1:开) │
│*55H │由当前PSP建立新PSP │DX=PSP段地址 │ │
│ 56H │文件换名 │DS:DX=带路径的旧文件名│CF=1 失败,AX=错误码 │
│ │ │ES:DI=带路径的新文件名│ │
│ 57H │取/置文件时间及日期 │AL=0/1 取/置,BX=文件号│CF=0 成功,CX=时间,DX= │
│ │ │CX=时间,DX=日期 │ 日期 │
│ │ │ │CF=1 失败,AX=错误码 │
└───┴──────────┴───────────┴───────────┘
┌───┬───────────────┬────┬─────────────┐
│错误码│ 错 误 类 型 │错误码 │ 错 误 类 型 │
├───┼───────────────┼────┼─────────────┤
│ 01H │无效的功能号 │ 0AH │不正确的环境 │
│ 02H │文件未找到 │ 0BH │不正确的格式 │
│ 03H │路径未找到 │ 0CH │无效的存取代码 │
│ 04H │打开的文件太多 │ 0DH │无效的数据 │
│ 05H │拒绝存取 │ 0EH │保留 │
│ 06H │非法的文件号 │ 0FH │指定的驱动器无效 │
│ 07H │内存控制块破坏 │ 10H │试图删除当前目录 │
│ 08H │没有足够的内存空间 │ 11H │非同一设备 │
│ 09H │无效的内存块地址 │ 12H │没有更多的文件 │
└───┴───────────────┴────┴─────────────┘
  评论这张
 
阅读(1320)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017