DOS系统调用
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文件结束,
中无数据
=02DTA空间不够
=03文件结束,记录不完整
15 顺序写 DS : DX=FCB首地址 AL=00写成功
=01盘满
=02DTA空间不够
16 建文件 DS : DX=FCB首地址 AL=00建立成功
=FF无磁盘空间
17 文件改名 DS : DX=FCB首地址 (DS : DX+1)=旧文件名
(DS : DX+17)=新文件名 AL=00成功
=FF未成功
19 取当前缺省磁盘驱动器 AL=缺省的驱动器号0=A,1=B,2=C,…
1A 置DTA地址 DS:DX=DTA地址 1B 取决省驱器
FAT信息 AL=每簇的扇区数
DS:SX=FTA标识字节
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缓冲区不满面CX=读取的记录数 28 随机分块写 DS:DX=FCB首地址 CX=记录数 CX=读取的记录数
AL=00写成功
AL=01盘满
=02缓冲区溢出
29 分析文件名 ES:DI=FCB首地址 DS:SI=ASCHZ串
AL=控制分析标志 AL=00
文件
=01多义文件
=FF非法盘符
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成功 AL=FF无效
2E 置磁盘自动
读写标志 AL=00关闭标志
AL=01打开标志
2F 取磁盘缓冲区的首址 ES:BX=缓冲区首址 30 取DOS版本号 AH=发行号,AL=版号 31 结束并驻留 AL=返回码
DX=驻留区大小
33 Dtrl-Break检测 AL=00取状态
LA=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写
=2读/写 成功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=文件属性 失败:AX=错误码
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=分配内存首址
失败:AX=最大可用空间
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取码
=1置码(BX)
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地址 *AH=0-2E适用DOS1.0以上版本;
AH=2F-57适用DOS2.0以上版本;
AH=58-62适用DOS3.0以上版本;
----------------------------------------------------------------------------------------------------
---------------------------------
BIOS中断
INT AH 功 能 调 用 参 数 返 回 参 数 10 0 设置显示方式 AL=00 40×25黑白方式
=01 40×25彩色方式
=02 80×25黑白方式
=03 80×25彩色方式
=04 320×200彩色图形方式
=05 320×200黑白图形方式
=06 640×200黑白图形方式
=07 80×25单色文本方式
=08 160×200 16色图形(PCjr)
=09 320×200 16色图形(PCjr)
=0A 640×200 16色图形(PCjr)
=0B保留(EGA)
=0C保留(EGA)
=0D320×200 彩色图形(EGA)
=0E 640×200 彩色图形(EGA)
=0F640×350 黑白图形(EGA)
=10 640×350 彩色图形(EGA)
=11 640×480 单色图形(EGA)
=12 640×480 16色图形(EGA)
=13 320×200 256色图形(EGA)
=40 80×30彩色文本(CGE400)
=41 80×50彩色文本(CGE400)
=42 640×400彩色文本(CGE400) 10 1 置光标类型 (CH)0-3=光标起始行 (CL)0-3=光标结束行
10 2 置光标位置 BH=页号
DH,DL=行,列
10 3 读光笔位置 BH=页号 CH=光标起始行 DH,DL=行,列
10 4 读光笔位置 AH=0光笔未触发
=1光笔触发
CH=像素行
BX=像素列
DH=字符行
DL=字符列
10 5 置显示页 AL=页号
10 6 屏幕初始化或上卷 AL=上卷行数 AL=0整个窗口空白
BH=卷入行属性
CH=左上角行号
CL=左上角列号
CH=右下角行号
DL右下角列号
10 7 屏幕初始化或下卷 AL=下卷行数 AL=0整个窗口空白
BH=卷入行属性
CH=左上角行号
CL=左上角列号
DH=右下角行号
DL=右下角列号
10 8 读光标位置的字符和属性 BH=显示页 AH=属性 AL=字符
10 9 在光标位置显示字符及其属性 BH=显示页
AL=字符
BL=属性 CX=字符重复次数
10 A 在光标位置显示字符 BH=显示页 AL=字符 CX=字符重复次数
10 B 置彩色调板 BH=彩色调板ID (320×200图形) BL=和ID配套使用的颜色 10 C 写像素 DX=行(0-199) CX=列(0-639)
AL=像素值
10 D 读像素 DX=行(0-199) AL=像素值 CX=列(0-639)
10 E 显示字符(光标前移) AL=字符 BL=前景色 10 F 取当前显示方式 AH=字符列数 AL=显示方式
10 13 显示字符串(适用AT) ES:BP=串地址 CX=串长度
DH,DL=起始行,列
BH=页号
AL=0,BL=属性
串:char,char,… 光标返回起始位置 AL=1,BL=属性 光标跟随移动
串:char,char,…
AL=2 光标返回起始位置
串:char,char,…
AL=3 光标跟随移动
串:char,char,…
------------------------------------------------------------------------------
11 设备检验 AX=返回值
bit0=1,配有磁盘
Bit1=1,80287协处理器
Bit4,5=01,40×25BW(彩色板) =10,80×25BW(彩色板)
=11,80×25BW(黑白板)
Bit6,7=软盘驱动器号
Bit9,10,11=RS-232板号
Bit12=游戏适配器
Bit13=串行打印机
Bit14,15=打印机号
------------------------------------------------------------------------------------------------
----
12 测定存储容量 AX=字节数(KB)
------------------------------------------------------------------------------------------------
----
13 0 软盘系统复位
13 1 读软盘状态 AL=状态字节
13 2 读磁盘 AL=扇区数 读成功:AH=0 CH,CL=磁道号,扇区号 AL=读取的扇区数
DH,DL=磁头号,驱动器号 读失败:
ES:BX=数据缓冲区地址 AH=出错代码
13 3 写磁盘 ES:BX=数据缓冲区地址 写成功,AH=0 AL=写入的扇区数
写失败:AH=出错代码
13 4 检验磁盘扇区 ES:BX=数据缓冲区地址(ES:BX不设置) 成功:AH=0
AL=检验的扇区数
失败:AH=出错代码
13 5
化盘磁道 ES:BX=磁道地址 成功:AH=0 失败:AH=出错代码
------------------------------------------------------------------------------------------------
----
14 0 初始化串行通讯口 AL=初始化参数 AH=通讯口状态 DX=通讯口号(0,1) AL=调制解调器状态
14 1 向串行通讯口写字符 AL=字符 写成功:(AH)7=0 DX=通讯口号(0,1) 写失败:(AH)7=1
(AH)0-6=通讯口状态
14 2 从串行通讯口读字符 DX=通讯口号(0,1) 读成功:(AH)7=0
(AL)=字符
读失败:(AH)7=1
(AH)0-6=通讯口状态
14 3 取通讯口状态 DX=通讯口号(0,1) AH=通讯口状态 AL=调制解调器状态
------------------------------------------------------------------------------------------------
----
15 0 启动盒式磁带马达
15 1 停止盒式磁带马达
15 2 磁带分块读 ES:BX=数据传输区地址 AH=状态字节 CX=字节数 AH=00读成功
=01冗余检验错
=02无数据传输
=04无引导
=80非法命令
15 3 磁带分块写 DS:BX=数据传输区地址 AH=状态字节 CX=字节数 AH=状态字节
------------------------------------------------------------------------------------------------
----
16 0 从键盘读字符 AL=字符码
AH=扫描码
16 1 读键盘缓冲区字符 ZF=0 AL=字符码
AH=扫描码
ZF=1缓冲区空
16 2 取键盘状态字节 AL=键盘状态字节
------------------------------------------------------------------------------------------------
----
17 0 打印字符,回送状态字节 AL=字符 AH=打印机状态字节 DX=打印机号
17 1 初始化打印机回送状态字节 DX=打印机号 AH=打印机状态字节 17 2 取状态字节 DX=打印机号 AH=打印机状态字节
------------------------------------------------------------------------------------------------
----
1A 0 读时钟 CH:CL=时:分
DH:DL=秒:1/100秒
1A 1 置时钟 CH:CL=时:分
DH:DL=秒:1/100秒
1A 2 读实时钟(适用AT) CH:CL=时:分(BCD) DH:DL=秒:1/100秒(BCD)
1A 6 置报警时间(适用AT) CH:CL=时:分(BCD) DH:DL=秒:1/100秒(BCD)
1A 7 清除报警(适用AT)
----------------------------------------------------------------------------------------------------
中断向量
中断号 中断名中断入口
0 除以0
1 单步执行
2 不可屏蔽中断NMI-INT(F000:E2C3) 3 断点
4 溢出
5 打印屏幕PRINT-SCREEN(F000:FF54) 6 备用
7 备用
8 时间TIMEB-INT(F000:FEA5) 9 键盘KB-INT(F000:E987)
10 备用
11 备用
12 备用
13 备用
14 磁盘DISK-INT(F000:EF57) 15 备用(打印机)
16 显示器VIDEO-IO(F000:065) 17 设备配置测试 EQUIPMENT(F000:F84D) 18 存储器 MEMORY-SIZE-DETERMINE(F000:FC41)
19 磁盘DISKETTE-IO(F000:EC59) 20 通讯端口RS232-IO(F000:E739) 21 磁带CASETTE-IO(F000:F859) 22 键盘KEYBOARD-IO(F000:E82E) 23 打印机 PRINTER-IO(F000:EF02) 24 磁带BASIC (F000:0000)
25 引导BOOT-STBAP(F000:E6F2) 26 时间TIME-OF-DAY(E000:FE6E) 27 键盘中断BUMMY-BETURN(F000:FF53) 28 时钟中断BUMMY-BETURN(F000:FF53) 29 显示器初始化VIDEO-PABMS(F000:F0A4) 30 磁盘参数 DISK-BASE(F000:EFC7) 31 显示图形符号
32 程序结束00BF:0011
33 功能调用请求00BF:0015
34 结束地址
35 中断退出
36 标准出错处理
37 绝对磁盘读0060:0406
38 绝对磁盘写0060:0401
39 结束程序预留