上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
DOS功能调用与输入输出
作者:未知 申领版权
2010年12月12日 共有 2928 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    DOS功能调用与输入输出
    4.5.1 利用DOS功能调用进行输入输出
    MS-DOS(PC-DOS)内包含了许多涉及设备驱动和文件管理方面的子程序,DOS的各种命令就是通过调用这些子程序实现的。为了方便程序员的使用,把这些子程序编写成相对独立的程序模块并且编上号。程序员利用汇编语言可方便地调用这些子程序。程序员调用这些子程序可减少对系统硬件环境的考虑和依赖,从而一方面可大大精简应用程序的编写,另一方面可使程序有良好的通用性。这些编了号的可由程序员调用的子程序就称为DOS功能调用或系统调用。一般认为DOS的各种命令是操作员与DOS的接口,而功能调用则是程序员与DOS的接口。在这里我们可以简单的认为它是一种类似于C语言中的库函数。
    DOS功能的调用主要包括三个方面的子程序:基本I/O、文件管理和其他(包括内存管理、置取时间、置取中断向量、终止程序等)。随着DOS版本的升级,这种称为DOS功能调用的子程序数量也在不断增加,功能更完备,使用也更方便。
    DOS功能调用的使用形式为:
    MOV  (***),***       ;准备所需要的入口参数
    MOV  AH,N           ;将功能号送到寄存器AH中
    INT   21H              ;DOS功能调用为21H号中断
    
    表4.1  DOS提供的常用基本输入/输出功能
    

    
功能号
    
功能说明
    
入口参数
    
出口参数
    
01H
    
从键盘上读入一个字符,并在监视器(显示器)上回显
    

    
(AL)=输入字符的ASCII码
    
02H
    
显示出一个字符
    
(DL)=要显示字符的ASCII码
    

    
09H
    
显示一个字符串
    
(DS:DX)=字符串的首地址,字符串以字符$为结束标志。
    

    
0AH
    
输入一个字符串
    
(DS:DX)=缓冲区首地址
    
接收到的输入字符串在缓冲区中。
    
05H
    
向第一个并行口上的打印机输出一字符
    
DL=要打印的字符(ASCII码)
    

    

 
    0AH号功能(标准输入设备即键盘上输入一个字符串)的说明:
    1) 缓冲区第一字节置为缓冲区最大容量,可以认为是入口参数:缓冲区第二字节存放实际读入的字符数(不包括回车符),可认为是出口参数的一部分;第三字节开始存放接收的字符串。
    2) 字符串以回车键结束,回车符是接收到的字符串的最后一个字符。
    3) 如果输入的字符数超过缓冲区所能容纳的最大字符数,则随后的输入字符被丢失并响铃,直到遇到回车键为止。
    4) 如果在输入时按Ctrl+C或Ctrl+Break键,则结束程序。
    例4.20:
    写一个程序,用二进制数形式显示所按键的ASCII码。
    分析:首先利用1号DOS功能调用接受一个字符,然后通过移位的方法从高到低依次把其ASCII码值的各位移出,再转换成ASCII码,利用2号功能调用显示输出。
    程序如下,它还含有一个形成回车换行(光标移到下一行首)的子程序。
    ;…………主程序…………
    CODE   SEGMENT
    ASSUME  CS:CODE,DS:CODE 
    START:MOV  AH,1              ;读一个键 
    INT  21H 
    CALL  NEWLINE           ;回车换行 
    MOV  BL,AL 
    MOV  CX,8               ;8位,所以循环次数为8
    NEXT:SHL  BL,1                ;依次析出高位,送到标志寄存器的CF
    MOV  DL,30H 
    ADC  DL,0               ;转换得ASCII码 
    MOV  AH,2 
    INT  21H                  ;显示
    LOOP  NEXT                ;循环8次
    MOV  DL,‘B’ 
    MOV  AH,2              ;显示二进制数表示符
    INT  21H
    MOV  AH,4CH            ;正常结束
    INT  21H
    ;…………子程序…………
    NEWLINE   PROC 
    PUSH  AX 
    PUSH  DX 
    MOV  DL,0DH         ;回车符的ASCII码是0DH 
    MOV  AH,2            ;显示回车符 
    INT  21H 
    MOV  DL,0AH         ;换行符的ASCII码是0AH 
    MOV  AH,2            ;显示换行符 
    INT  21H 
    POP  DX 
    POP  AX 
    RET 
    NEWLINE   ENDP 
    CODE   ENDS
    END   START
    
    表4.2  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 文件结束,记录中无数据
    =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地址
    

 

    

 

相关新闻

testtest
上善制度的炼成
新时代呼唤管理理论创新——大卫�梯斯与动态能力理论
创业的不变逻辑
创新管理需要回答的5个问题
十一、弥离
十、转院
九、生机
八、传染
七、求血

您可能对这些感兴趣  

干货分享|10本最受国外孩子喜爱的英文词典——上
从孩子的表现看父母的缺点!请家长对号入座,看看你是哪一类?
20条制作PPT的视觉原则
培训简史:培训者必知的历史轨迹
广田丰管理培训生人才培养调查报告
第4讲 作为上司的职业经理
第3讲 作为同事的职业经理
第2讲 作为下属的职业经理
第1讲 培养经理人的管理素养
酒店前台新员工上岗培训计划

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》