INT 21H | 系统功能调用 | AH=调用号 功能调用入口参数 | 功能调用出口参数 |
DOS功能调用格式:
MOV AH, 调用号
INT 21H
缓冲区首址由:LEA DX, 缓冲区 获得
调用号(AH中) | 功能 | 入口参数 | 出口参数 |
01H | 键盘输入字符 | AL=输入的字符 | |
02H | 显示输出 | DL=显示的字符 | |
09H | 显示字符串 | DS:DX=缓冲区首址 | |
0AH | 输入字符串 | DS:DX=缓冲区首址 | |
39H | 创建子目录 | DS:DX=路径字符串 | 成功:CF=0 失败:CF=1,AX=错误码 |
3AH | 删除子目录 | DS:DX=路径字符串 | 成功:CF=0 失败:CF=1,AX=错误码 |
3BH | 设置子目录 | DS:DX=路径字符串 | 成功:CF=0 失败:CF=1,AX=错误码 |
3CH | 创建文件 | DS:DX=带路径的文件名 CX=属性:1-只读 2-隐藏 4-系统 | 成功:CF=0,AX=文件号 失败:CF=1,AX=错误码 |
3DH | 打开文件 | DS:DX=带路径的文件名 AL=方式0-读 1-写 2-读和写 | 成功:CF=0,AX=文件号 失败:CF=1,AX=错误码 |
3EH | 关闭文件 | BX=文件号 | 成功:CF=0 失败:CF=1,AX=错误码 |
3FH | 读文件或设备 | BX=文件号 CX=字节数 | 成功:CF=0,DX:AX=新的指针位置 失败:CF=1 |
40H | 写文件或设备 | BX=文件号 DS:DX=缓冲区首址 | 成功:CF=0 失败:CF=1,AX=错误码 |
4CH | 带返回码的结束 | AL=进程返回码 | |
对于当前目录的文件,是可以不带路径的文件名,需要包括扩展名后缀。
-
对于DOS的0AH号功能调用
该功能调用要求DS:DX指向一个存放用户键盘输入的缓冲区,缓冲区的第0字节必须放上希望从键盘上输入的字符的数目(缓冲区的最大长度),当从该功能调用返回时,缓冲区的第1字节存放的是实际输入的字符数,实际输入的字符从缓冲区的第2字节开始存放,输入的最后一个
字符是回车。
例如:下面的FNAME可以为键盘输入字符串的14字节长度的缓冲区(输入13个字符,最后一个为回车)
FNAME DB 14,0,14 DUP(?)
-
对于DOS的3DH号功能调用(打开文件)
该调用要求DS: DX指向一个缓冲区, 在缓冲区中以ASCII码的形式存放着要打开的文件的名字,文件名的后面要求跟一 个0 (称之为ASCIIZ串); AL中要存放打开文件后对文件的操作方式(读、写、读/写)。如果打开文件成功,该功能调用在AX中返回一个"文件号"。
0 1 2
如果打开失败,可以通过 JC 方式跳转。新建文件需要使用3CH号功能调用
-
对于DOS的3FH号功能调用(从文件读取到缓冲区)
该功能调用要求BX中存放打开文件时返回的文件号: DS:DX指向一个缓冲区,从文件中读出的内容要存放到该缓冲区中; CX中要放上一次读出文件内容的字节数。如读文件成功,则在缓冲区得到文件的内容,AX中是实际读出的字节数。
所以DX:BX是新的指针位置。
-
对于DOS的40H号功能调用(写入缓冲区到文件)
该功能调用要求BX中存放打开文件时返回的文件号: DS:DX指向一个缓冲区,写入文件的内容要存放到该缓冲区中。