DOS系统功能调用表(INT 21H)


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 文件结束,记录中无数据
  =02 DTA空间不够
  =03 文件结束,记录不完整


15


顺序写


DS:DX=FCB首地址


AL=00 写成功
  =01 盘满
  =02 DTA空间不够


16


建文件


DS:DX=FCB首地址


AL=00 建立成功
  =FF 无磁盘空间


17


文件改名


DS:DX=FCB首地址
(DS:DX+1)=旧文件名
(DS:DX+17)=新文件名


AL=00 成功
AL=FF 未成功


19


取当前缺省磁盘驱动器


 


AL=缺省的驱动器号 0=A,1=B,2=C,...


1A


置DTA地址


DS:DX=DTA地址


 


1B


取缺省驱动器FAT信息


 


AL=每簇的扇区数
DS:BX=FAT标识字节
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 缓冲区不满


28


随机分块写


DS:DX=FCB首地址
CX=记录数


AL=00 写成功
  =01 盘满
  =02 缓冲区溢出


29


分析文件名


ES:DI=FCB首地址
DS:SI=ASCIIZ串
AL=控制分析标志


AL=00 标准文件
  =01 多义文件
  =02 非法盘符


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 成功
  =FF 无效


2E


置磁盘自动读写标志


AL=00 关闭标志
AL=01 打开标志


 


2F


取磁盘缓冲区的首址


 


ES:BX=缓冲区首址


30


取DOS版本号


 


AH=发行号,AL=版本


31


结束并驻留


AL=返回码
DX=驻留区大小


 


33


Ctrl-Break检测


AL=00 取状态
  =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 写
  =3 读/写


成功: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=文件属性
失败:CX=错误码


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=分配内存首地
失败:BX=最大可用内存


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 取码
AL=1 置码(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地址

时间: 2024-08-04 14:04:02

DOS系统功能调用表(INT 21H)的相关文章

汇编相关(ASCII码字符表 DEBUG命令 BIOS功能调用表 DOS功能调用表 汇编语言错误信息表)

汇编相关 一些关于汇编的常用东西,包括: ASCII码字符表 DEBUG命令 BIOS功能调用表 DOS功能调用表 汇编语言错误信息表 ASCII码字符表 DEBUG命令 BIOS功能调用表 DOS功能调用表 汇编语言错误信息表

汇编 DOS的中断调用 INT 21H

DOS系统功能调用 这个汇编指令是用于提供DOS系统功能调用. 它是由DOS提供的一组实现特殊功能的子程序供程序猿在编写自己的程序时调用,以减轻编程的工作量. 分两种,re=view">DOS系统功能调用和BIOS中断调用. 链接里都是一些经常使用的内容,大家能够自己去百度,一定比我这里给出的全面非常多,有那种DOS系统功能调用表. 调用步骤大致 (1)系统功能号送到寄存器AH中. (2)入口參数送到指定的寄存器中: (3)用INT 21H指令运行功能调用: (4)依据出口參数分析功能调用

DOS功能调用——单个字符及字符串的输入输出

DOS系统功能调用步骤:    1. AH <- 功能号    2.指定寄存器放入该功能所要求的入口参数    3.执行int 21H    4.分析出口参数 单字符输入输出 01h键盘输入            AL=输入字符    02h显示器输出            DL=输出字符    07h直接控制台输入(无回显)    AL=输入字符    08键盘输入(无回显)        AL=输入字符======================汇编例子===================

x01.os.5: DOS 功能调用

DOS 功能调用(INT 21)-------------------------------AH = 0-2E 适用 DOS 1.0 以上版本AH = 2F-57 适用 DOS 2.0 以上版本AH = 58-62 适用 DOS 3.0 以上版本------------------------------- AH = 00功能:程序终止(同 INT 20h)调用参数: CS = 程序段前缀 AH = 01功能:键盘输入并回显返回参数: AL = 输入字符 AH = 02功能:显示输出调用参数:

int 21h 汇编

INT 21H 指令说明及使用方法 转自http://www.cnblogs.com/ynwlgh/archive/2011/12/12/2285017.html 很多初学汇编语言的同学可能会对INT 21H这条指令感到困惑,不知道是什么意思,下面就以一段简单的程序为大家讲解: 例如:需要键盘输入,并且回显. AH的值需要查表取得,表在下面 指令:MOV AH,01 INT 21H 通过这样两条指令,输入的字符就会被存储在AL中. 表:DOS系统功能调INT 21H AH 功能 调用参数 返回参

170322计算机硬件介绍&amp;&amp;时钟&amp;&amp;中断&amp;&amp;内核态、用户态与系统功能调用&amp;&amp;操作系统分类

一.冯诺依曼计算机 1.1 对第一台电脑提出: (1)二进制代替十进制: (2)程序与数据一起放入内存中运行. 1.2示例:控制(操作码)与数据信息(操作数) 1.3一个典型的PC总线(Bus)结构 1.4华硕P5VD2-MX (1)主芯片组:VIA P4M890/VIA VT8237A(2)内存规格内存类型DDRII(3)总线频率(MHz) FSB 1066MHz(4)扩展插槽 ①显卡插槽PCI-E 16X ②PCI 插槽2条PCI 插槽 ③1条PCI-E 1X(5)IDE 插槽二个IDE插槽

mybatis动态调用表名和字段名

一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这种情况下,就需要构建sql来动态传入表名.字段名了.现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助. 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先

Linux内核监控模块-2-系统调用表地址的获取(Linux内核版本3.13)

那么在Linux内核2.6之后,不能直接导出sys_call_table的地址后,我们要如何获得系统调用表的地址,从而实现系统调用的截获呢. 先贴上我实现好的代码,然后再来讲解吧. modu.c #include<linux/init.h> #include<linux/module.h> #include<linux/moduleparam.h> #include<linux/unistd.h> #include<linux/sched.h>

windows dos 修改注册表

U盘被写保护了,然后需要修改注册表,解决办法这个不一定是最好的,仅仅是为了能让dos能够做处理,记录一下: rem delete firstREG DELETE HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies /frem then add to regeditREG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDev