加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

汇编第六话 DOS功能调用

(2012-10-25 10:49:17)
标签:

杂谈

分类: 嵌入式软件

 

为了使用方便,将DOS层功能模块所提供的88个子程序统一顺序编号从00H到57H。DOS系统功能调用方式如:

1.置入口参数;
2.将子程序编号送入AH寄存器;
3.执行中断指令:INT 21H。

调用过程:有的子程序不需入口参数,但大部分需要将参数送入指定地点。程序员只须给出这三个方面的信息,不必关心具体程序如何,在内存中的存放地址如何,DOS根据所给的信息,自动转入相应的子程序去执行。调用结束后有出口参数时一般在寄存器中,有些子程序调用结束时会在屏幕上看到结果。
DOS系统功能调用所提供的子程序,按其功能分类可分为以下六组:
1.字符I/O管理

编号:01H到0CH,管理显示器、键盘、打印机及异步通讯接口的字符输入输出。
2.传统的文件管理
编号:0DH到24H,27H到29H,管理磁盘,包括打开关闭文件、查找目录、删除文件、建立文件、重新命名文件、顺序读写文件、随机读写文件等功能。
3.扩充的文件管理
编号:39H到3BH,47H,管理目录,包括建立子目录,修改当前目录,删除目录,取当前目录等功能。
编号:3CH到46H,管理文件,包括建立、打开、关闭文件,从文件或设备读写数据,在指定的目录里删除文件、修改文件属性等。
4.内存管理
编号:48H到4H,管理内存,包括分配内存,释放已分配的内存,执行程序等。
5.作业管理
编号:00H退出用户程序并返回操作系统
26H建立一个程序段
31H终止用户程序并驻留在内存
4BH装入一个程序
4CH终止当前程序并返回操作系统
4DH取子进程的返回代码
6.其他资源管理
编号:25H,35H,置中断向量和取中断向量
2AH,2BH,取日期和设置日期
2CH,2DH,取时间和设置时间
30H,38H,取DOS版本号及国别信息其它为用于处理树形目录结构的扩充的文件管理系统调用和用于DOS内部的扩充的系统调用。
常用的DOS系统功能调用使用说明
1、00H号调用 终止程序,返回使用DOS (一般常用4CH)
(1)调用方式:AH←00H(调用号)
INT 21H
(2)说明:
1)完成终止当前程序执行返回到操作系统状态。
2)同时将关闭所有文件并刷新所有文件缓冲区。
3)完成与INT 20H相同的操作。

2、01H号调用 读取键盘字符并回显
(1)调用方式:AH←01H(调用号)
INT 21H
(2)说明:
1)执行该功能调用首先扫描键盘,等待按键。
2)若有键按下,则检查所按键码。
3)当按CTRL-BREAK键瞬时,则推出命令执行。
4)当为其它键时,则将对应ACSII码送AL寄存器,同时送显示器显示。
3、02H号调用 显示字符
1)调用方式:DL←要输出显示的ACSII字符代码
AH←02H(调用号)
INT 21H
(2)说明:
1)完成从标准输出设备显示器上输出显示一个字符。
2)在显示一个字符后检查该字符是否是CTRL-BREAK。若是,则推出命令执行。

4、03H号调用异步通讯口输入
(1)调用方式:AH←03H(调用号)INT 21H

(2)说明:
1)完成从标准异步通讯接口(COM1)等待输入一个字符。
2)将输入的字符取到寄存器AL中。
3)DOS把一个异步通讯口端口COM1初始化为2400波特,无校验位,一个停止位和8个数据位。

5、04H号调用 异步通讯口输出
(1)调用方式:DL←要输出的ACSII字符
AH←04H(调用号)
INT 21H
(2)说明:
1)完成从标准异步通讯接口(COM1)等待输出一个字符。
2)关于异步通讯口的输入输出操作,建议使用ROM BIOS中断调用14H。6.05H调用 打印输出
1)调用方式: DL←要打印输出的字符
AH←05H(调用号)
INT 21H
(2)说明:
1)向标准打印设备(PRN或LPT1)打印输出一个字符。
2)该功能调用所瓦斯年成的功能同02H号调用(显示一字符),只是输出的设备不同。
7.06H号调用 直接控制台I/O
(1)调用方式:DL←字节常数
AH←06H(调用号)
INT 21H
(2)说明:
1)该功能调用可以完成从标准输入设备键盘输入字符,也可以完成向标准输出设备显示器输出字符。
2)当DL=FFH时,表示从键盘输入字符。
若标志位ZF=0,表示AL中为键入的字符值。
若标志位ZF=1,表示AL中不是键入字符值,既无键按入。
当DL FFH时,表示向显示器输出,此时DL中应存放输出字符的ASCII码值。
3)该功能调用不检查字符是否为CTRL—BREAK键。
例如:

CODE:
MOV DL,O66H
MOV AH,06H
INT 21H
表示完成从键盘输入字符,当有键按下时,AL中既为键入字符的ASCII码值

CODE:

MOV DL,41H
MOV AH,06H
INT 21H
表示完成将DL中41H所对应的字符“A”在屏幕上显示。
8.07H号调用 直接控制台输入且不回显

(1)调用方式:AH←07H(调用号)
INT←21H
(2)说明:
该功能调用完成从标准输入设备键盘输入字符送AL,与01H调用相比有两点不同:一是不回显字符;二是对键入字符不作CTRL-BREAK检查。
9.08H号调用 直接控制台输入且不回显。
(1)调用方式:AH←08H(调用号)
INT←21H
(2)说明:
该功能调用完成从标准输入设备键盘输入字符送AL,与01H调用相比只有一点不同,不回显字符。比07H号调用多一个对键入字符要作CTRL-BREAK检查和处理的功能。
10.09H号调用 字符串输出显示
(1)调用方式:DS:DX←要输出显示的字符串的首地址
AH←09H(调用号)
INT 21H
(2)说明:
1)该功能调用完成在标准输出设备显示器上输出显示一字符串,字符串必须以字符“$”(24H)为结束标志。但“$”字符不显示。

2)该功能调用完成显示字符后作CTRL-BREAK检查和处理。
11.0AH号调用 字符串输入
(1)调用方式:DS:DX←从键盘接收字符的输入缓冲区首址
AH←0AH(调用号)
INT 21H
(2)说明:
1)该功能调用完成从键盘接收字符串存到指定内存的输入缓冲区,直到输入回车符时为止。
2)缓冲区的第一个字节为指定缓冲区能接收的字符的个数,缓冲区的第二个字节保留以用作填写实际输入字符的个数,缓冲区的第三个字节开始存放从键盘上输入的字符。
3)若实际输入的字符数少于定义的字节数,则缓冲区内其余字节补零。若实际输入多于定义的字节数,则多余字符丢弃,且响铃。

以上就是DOS功能调用的常用的部分。
利用02号系统功能调用完成输出显示一串字符信息。

CODE:

CODE SEGMENT
ASSUME CS:CODE,DS:CODE
ORG 100H
START: JMP BEGIN
MSG DB 'This message was displayed with dos function 02H'
MSGLEN EQU $ - MSG
BEGIN: MOV AX,CODE
MOV DS,AX ;设置段地址
MOV CX,MSGLEN ;取显示字符串信息的长度
MOV S1,0
MOV AH,02H ;02H号调用一次显示一个字符
NEXT: MOV DL,MSG[SI] ;DL←取输出显示的字符
INT 21H
INC SI ;修改字符地址
LOOP NEXT ;重复执行02H系统功能调用
MOV AH,4CH ;字符串显示完后,执行4CH调用
INT 21H ;返回DOS
CODE ENDS
END START

采用09H号功能调用,输出显示指定的字符串。

CODE:

CODE SEGMENT
ASSUME CS:CODE,DS:CODE
START: JMP BEGIN
STRING DB 'Hello,How are you!','$'
BEGIN: MOV AX,CODE
MOV DS,AX ;DS←输出字符串段地
LEA DX,STRING ;DX←输出字符串偏移
MOV AH,09H ;9号功能调用
INT 21H ;完成输出显示:Hello, ;How are you!
MOV AH,4CH
INT 21H
CODE ENDS
END START

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有