1、MSDOS 系统功能调用表 AH 功能 调用参数 返回参数00 终止进程 CS=程序段前缀段地址 01 带回显键盘输入的 AL=输入字符02 显示一个字符 DL=待输出字符的 ASCII 码 03 异步通讯输入 AL=输入的数据04 异步通讯输出 DL=待输出的数据 05 打印机输出 DL=待输出的字符 06 直接控制台 I/ODL=0FFH:输入DL=字符的 ASCII 码:输出AL=输入的字符07 无回显的键盘输入 AL=输入的字符08无回显的键盘输入(检测 Ctrl-C) AL=输入的字符09 字符串输出 DS:DX=字符串首 0A 键盘输入至缓冲区DS:DX=缓冲区首DS:DX=缓冲区
2、最大容量DS:DX+1=输入的字符数DS:DX+2=字符串首0B 检测键盘状态 AL=00:有输入AL=FF:无输入0C清除缓冲区并请求指定的输入功能AL=输入功能的功能号(1、6、7、8、A) 0D 磁盘复位 清除文件缓冲区0E 指定当前缺省磁盘驱动器 DL=驱动器号 0:A;1:B 0F 打开文件 DS:DX=FCB 首地址AL=00:文件打开AL=0FFH:出错10 关闭文件 DS:DX=FCB 首地址AL=00:文件关闭AL=FF:出错11 查找第一个目录项 DS:DX=FCB 首地址AL=00:找到AL=FF:出错12 查找下一个目录项DS:DX=FCB 首地址(文件名中带*或?)A
3、L=00:找到AL=FF:出错13 删除文件 DS:DX=FCB 首地址AL=00:成功删除AL=FF:出错14 顺序读 DS:DX=FCB 首地址AL=00:读成功AL=01:文件已到末尾AL=02:DTA 溢出AL=03:读入部分数据15 顺序写 DS:DX=FCB 首地址AL=00:写成功AL=01:磁盘满AL=02:DTA 溢出16 建立文件 DS:DX=FCB 首地址AL=00:文件成功建立AL=FF:出错17 文件改名 DS:DX=特殊的 FCB 首地址AL=00:改名成功AL=FF:出错19 取当前缺省驱动器名 AL=缺省驱动器号0:A;1:B;.1A 置 DTA 地址 DS:D
4、X=DTA 首地址 1B 取缺省驱动器的 FAT 信息 AL=每簇扇区数DS:BX=FAT 标识字节CX=物理扇区的大小DX=缺省驱动器的簇数1C 取任意驱动器的 FAT 信息 DL=驱动器号 同 1BH 功能21 随机读 DS:DX=FCB 首地址AL=00:读成功AL=01:文件已到末尾AL=02:DTA 溢出AL=03:读入部分数据22 随机写 DS:DX=FCB 首地址AL=00:写成功AL=01:磁盘满AL=02:DTA 溢出23 测定文件大小 DS:DX=FCB 首地址AL=00:成功,文件长度写入 FCBAL=FF:失败24 设置随机记录号 DS:DX=FCB 首地址 25 设置
5、中断向量DS:DX=中断向量AL=中断号 26 建立程序段前缀 DS:DX=新的程序段前缀 27 随机块读DS:DX=FCB 首地址CX=读入记录数AL=00:读成功AL=01:文件已到末尾AL=02:DTA 溢出AL=03:读入部分数据28 随机块写 DS:DX=FCB 首地址 AL=00:写成功CX=写出记录数 AL=01:磁盘满AL=02:DTA 溢出29 分析文件名ES:DI=FCB 首地址DS:SI=ASCIIZ 串AL=控制分析标志AL=00:标准文件AL=01 多义文件AL=FF:非法盘符2A 取日期 CX=年DH:DL=月:日(二进制)2B 设置日期 CX:DH:DL=年:月:
6、日AL=00:成功AL=FF:出错2C 取时间 CH:CL=时:分DH:DL=秒:1/100 秒2D 设置时间CH:CL=时:分DH:DL=秒:1/100 秒AL=00:成功AL=FF:出错2E 置磁盘自动读写标志AL=00:关闭标志AL=01:打开标志 2F 取磁盘缓冲区首地址 ES:BX=缓冲区首地址30 取 DOS 版本号 AH=发行号;AL=版号31 结束进程并驻留AL=返回码DX=驻留区大小(节) 33 Ctrl-Break 检测AL=00:取状态AL=01:置状态(DL)DL=00:关闭检测DL=01:打开检测DL=00:关闭 Ctrl-Break 检测DL=01:打开 Ctrl-
7、Break 检测35 取中断向量 AL=中断号 ES:BX=中断向量36 取空闲磁盘空间DL=驱动器号0:缺省;1:A;2:B;.成功:AX=每簇扇区数BX=有效簇数CX=每扇区字节数DX=总簇数失败:AX=FFFF38 置/取国家信息 DS:DX=信息区首地址 BX=国家码;AX=错误码39 建立子目录 DS:DX=ASCIIZ 串首地址 AX=错误码3A 删除子目录 DS:DX=ASCIIZ 串首地址 AX=错误码3B 改变当前目录 DS:DX=ASCIIZ 串首地址 AX=错误码3C 建立文件DS:DX=ASCIIZ 串首地址CX=文件属性成功:AX=文件句柄失败:AX=错误码3D 打开
8、文件DS:DX=ASCIIZ 串首地址AL=0:读AL=1:写AL=2:读/写成功:AX=文件句柄失败:AX=错误码3E 关闭文件 BX=文件句柄 失败:AX=错误码3F 读文件或设备BX=文件句柄DS:DX=缓冲区首CX=读取的字节数成功:AX=实际读入的字节数失败:AX=错误码40 写文件或设备BX=文件句柄DS:DX=缓冲区首CX=写出的字节数成功:AX=实际写出的字节数失败:AX=错误码41 删除文件 DS:DX=ASCIIZ 串首地址成功:AX=00失败:AX=错误码42 移动文件指针BX=文件句柄CX:DX=位移量AL=移动方式(0、1、2)成功:DX:AX=新指针的位置失败:AX
9、=错误码43 置/取文件属性DS:DX=ASCIIZ 串首地址AL=0:取文件属性AL=1:置文件属性CX=文件属性成功:CX=文件属性失败:AX=错误码44 设备文件 I/O 控制BX=文件句柄AL=0:取状态 AL=1:置状态AL=2:读数据 AL=3:写数据AL=6:取输入状态AL=7:取输出状态DX=设备信息45 复制文件句柄 BX=文件句柄 1成功:AX=文件句柄 2失败:AX=错误码46 强制复制文件句柄BX=文件句柄 1CX=文件句柄 2失败:AX=错误码47 取当前目录路径名DL=驱动器号DS:SI=ASCIIZ 串首地址成功:DS:SI=ASCIIZ 串失败:AX=错误码48
10、 分配内存空间 BX=申请的内存数量(节)成功:AX=分到的内存首址失败:BX=最大可用空间49 释放内存空间 ES=内存起始段地址 失败:AX=错误码4A 调整已分配的内存块 ES=原内存起始段地址 失败:AX=错误码BX=调整后的尺寸 BX=最大可用空间4B 装入/执行进程DS:DX=ASCIIZ 串首地址ES:BX=参数区首地址AL=0:装入执行AL=3:装入不执行失败:AX=错误码4C 带返回码结束 AL=返回码 4D 取返回代码 AX=返回代码4E 查找第一个匹配文件DS:DX=ASCIIZ 串首地址CX=文件属性AX=错误代码4F 查找下一个匹配文件DS:DX=ASCIIZ 串首地
11、址(文件名中带*或?)AX=错误代码54 取盘自动读写标志 AL=当前标志值56 文件改名DS:DX=ASCIIZ 串(旧)ES:DI=ASCIIZ 串(新)AX=错误代码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 建立临时文件DS:DX=ASCIIZ 串首地址CX=文件属性成功:AX=文件句柄失败:AX=错误码5B 建立新文件DS:DX=ASCIIZ 串首地址CX=文件属性成功:AX=文件句柄失败:AX=错误码5C 控制文件存取AL=00:封锁 AL=01:开启BX=文件句柄CX:DX=文件位移SI:DI=文件长度62 取 PSP 地址 BX=PSP 地址