DOS功能调用.docx
- 文档编号:8168325
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:6
- 大小:27.68KB
DOS功能调用.docx
《DOS功能调用.docx》由会员分享,可在线阅读,更多相关《DOS功能调用.docx(6页珍藏版)》请在冰豆网上搜索。
DOS功能调用
DOS功能调用
MSDOS操作系统为程序设计者提供了可以直接调用的软中断处理程序,每一个中断处理程序完成一个特定的功能操作。
依据编程需要选择适当的处理程序,编程者不需再重新编写程序,而是使用INTn软中断指令。
每执行一种不同类型码n的软中断指令,就执行一个中断处理程序,其主要功能如下。
①磁盘的读/写控制。
②内存管理、文件操作和目录管理。
③基本输入/输出(对键盘、打印机和显示器等)控制,另外还有日期、时间管理等。
当类型码n=05H~1FH时,调用BIOS的中断处理程序;类型码n=20H~3FH时,调用DOS的中断处理程序。
DOS中断调用方法如图4.26所示。
按DOS中断规定,用指令写入口参数,然后执行INTn指令,执行完毕后,依据结果进行分析及处理。
DOS软中断功能及参数见表4.5。
其中,入口参数是使用该调用必须具备的条件,如设定寄存器参数等;出口参数是表示软中断程序执行结果放在何处或执行该操作处理的特征。
表4.5DOS软中断功能及参数
表4.5中INT22H,INT23H,INT24H不允许用户直接使用。
INT20H的作用是终止正在运行的程序,返回操作系统。
这种终止退出程序,适用于扩展名为.COM的文件,而不适用于扩展名为.EXE的可执行文件。
INT27H的作用也是终止正在运行的程序,返回操作系统,但被终止的程序仍然驻留在内存中,不会被其他程序覆盖。
INT21H软中断是一个具有几十种功能的大型中断服务程序,给这些子功能程序分别予以编号,称为功能号。
每个功能程序完成一种特定的操作和处理。
对INT21H软中断指令对应的功能子程序的调用称为DOS系统功能调用。
调用系统功能子程序时,不必了解所使用设备的物理特性、接口方式及内存分配等,也不必编写繁琐的控制程序,这样给应用者带来了很大的方便。
应用INT21H系统功能调用的方法如下。
①入口参数送指定的寄存器或内存。
②功能号送AH中。
③执行INT21H软中断指令。
有的子功能程序不需要入口参数,但大部分需要把参数送入指定位置。
程序员只要给出这三方面的信息,不必关心程序具体如何执行,在内存中的存放地址如何,DOS就会根据所给的参数信息自动转入相应的子程序去执行并产生相应结果。
下面介绍常用的功能调用。
1.键盘输入并显示(1号功能调用)
格式:
MOVAH,01H
INT21H
功能:
按下任何键,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符。
如果按下的是Ctrl+Break组合键,则终止程序执行。
1号功能调用无须入口参数,出口参数在AL中。
2.键盘输入但不显示输入字符(8号功能调用)
格式:
MOVAH,08H
INT21H
功能:
同1号功能调用,但字符不在屏幕上显示。
3.屏幕显示一个字符(2号功能调用)
格式:
MOVDL,'字符'
MOVAH,02H
INT21H
功能:
将置入DL寄存器中的字符在屏幕上显示输出。
4.打印输出(5号功能调用)
格式:
MOVDL,'字符'
MOVAH,05H
INT21H
功能:
将置入DL寄存器中的字符送打印机接口,打印输出。
5.屏幕显示字符串(9号功能调用)
格式:
MOVDX,字符串的偏移地址
MOVAH,09H
INT21H
功能:
在屏幕上显示字符串。
在使用9号功能调用时,应当注意以下问题。
①待显示的字符串必须先放在内存一数据区(DS段)中,且以‘$’符号作为结束标志。
②应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。
【例4.42】
DATA SEGMENT
BUF DB‘HOWDOYOUDO?
’,0AH,0DH,‘$’
DATA ENDS
CODE SEGMENT
MOV AX,DATA
MOV DS,AX
MOVDX,OFFSETBUF
MOVAH,09H
INT 21H
CODEENDS
执行程序,在屏幕上显示“HOWDOYOUDO?
”字符串。
6.字符串输入功能调用(0AH号功能调用)
格式:
MOVDX,已定义缓冲区的偏移地址
MOVAH,0AH
INT21H
功能:
从键盘接收字符,并存放到内存缓冲区。
在使用0AH号功能调用时,应当注意以下问题。
①执行前先定义一个输入缓冲区,缓冲区内第一个字节定义为允许最多输入的字符个数,字符个数应包括回车符0DH在内,不能为“0”值。
第二个字节保留,在执行程序完毕后存入输入的实际字符个数。
从第三个字节开始存入从键盘上接收字符的ASCII码。
若实际输入的字符个数少于定义的最大字符个数,则缓冲区其他单元自动清0。
若实际输入的字符个数大于定义的字符个数,其后输入的字符丢弃不用,且响铃示警,一直到输入回车键为止。
整个缓冲区的长度等于最大字符个数再加2。
②应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中。
【例4.43】
DATA SEGMENT
BUF DB25;缓冲区长度
ACTHAR DB?
;保留单元,存放输入的实际字符个数
CHAR DB25DUP(?
);定义25个字节存储空间
DB‘$’
DATA ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETBUF
MOVAH,0AH
INT21H
CODE ENDS
本例可从键盘接收23个有效字符并存入以BUF为首地址的缓冲区中。
7.返回DOS操作系统(4CH号功能调用)
格式:
MOVAH,4CH
INT21H
功能:
终止当前程序的运行,并把控制权交给调用的程序,即返回DOS系统,屏幕出现DOS提示符,如“C:
\>”,等待DOS命令。
8.直接输入、输出单字符(6号功能调用)
格式:
MOVDL,输入/输出标志
MOVAH,06H
INT21H
功能:
执行键盘输入操作或屏幕显示输出操作,但不检查Ctrl+Break组合键是否按下。
执行这两种操作的选择由DL寄存器中的内容决定。
①当(DL)=0FFH时,执行键盘输入操作。
若标志ZF=0,AL中放入字符的ASCII码;若标志ZF=1,表示无键按下。
这种调用用来检测键盘是否有键按下,但不等待键盘输入。
②当(DL)≠0FFH时,表示将DL中内容送屏幕显示输出。
9.检查键盘的工作状态(0BH号功能调用)
格式:
MOVAH,0BH
INT21H
功能:
检查是否有键盘输入,若有键按下,则使AL=0FFH,若无键按下,则AL=00H。
对于利用键盘操作退出循环或使程序结束之类的操作来说,这种调用是很方便实用的。
【例4.44】
LOP:
ADDAL,BL
MOVAH,0BH
INT21H;键扫描:
无输入,AL=00H,有输入,AL=FFH
ADDAL,01H
JNZLOP;有输入则退出循环
RET
10.设置系统日期(2BH号功能调用)
格式:
MOVCX,年号
MOVDH,月号
MOVDL,日期
MOVAH,2BH
INT21H
功能:
设置有效的年、月、日。
当AL=0时,设置成功;当AL=0FFH时,设置失败。
11.设置系统时间(2DH号功能调用)
格式:
MOVCH,小时
MOVCL,分
MOVDH,秒
MOVAH,2DH
INT21H
功能:
设置有效的时间。
当AL=0时,设置成功;当AL=0FFH时,设置失败。
【例4.45】DOS功能调用子程序举例:
回车/换行标准显示输出子程序。
CRLFPROCFAR
PUSHDX
PUSHAX
MOVDL,0DH;回车的ASCII码为0DH
MOVAH,02H
INT21H
MOVDL,0AH;换行的ASCII码为0AH
MOVAH,02H
INT21H
POPAX
POPDX
RET
CRLFENDP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DOS 功能 调用