首页 理论教育 调用中断实现数据输入输出功能

调用中断实现数据输入输出功能

时间:2022-02-28 理论教育 版权反馈
【摘要】:操作系统的存在也为用户能够方便地建立和运行自己的程序提供了条件。这种方式称为利用操作系统的标准功能调用进行输入/输出。早期的PC-DOS提供了75个系统功能调用,编号从0~57H,主要分为设备管理、文件管理、目录管理及其他功能调用四大类。本节仅介绍设备管理系统功能调用中基本的输入/输出管理。必要时,还可在调用结束时分析出口参数,检查调用是否成功。回车符的ASCII码也被送入缓冲区,但不计入输入的字符个数之中。

3.4 调用DOS中断实现数据输入/输出功能

不带任何软件的计算机称为裸机。它只能识别本身硬件所提供的、由0和1组成的机器指令,因此机器的功能是很有限的;而且上机操作麻烦,机器本身的工作效率也很低。为了方便用户,提高计算机的使用效率,扩大计算机的功能,有效地利用系统的资源,在现代的计算机上都配置了各种软件。软件分为应用软件和系统软件,最主要的系统软件就是操作系统。操作系统相当于计算机的管家,监督和管理着计算机的所有软、硬件资源。例如,在计算机运行过程中,对CPU执行的各种文件进行调度和管理,对内存空间进行合理的分配,对外围设备进行管理和控制并使之标准化等。操作系统的存在也为用户能够方便地建立和运行自己的程序提供了条件。例如,在编制汇编源程序时,常常希望能从键盘输入字符或在显示器上显示出程序运行的结果。但由于计算机种类的不同,外设型号的差异,控制它们工作的程序也会有差异。如果每次都需要根据自己的工作环境来设计控制这些外设工作的程序,则必须要先搞清与之有关的设备、电路、接口等各方面的问题,既复杂,效率又低,也没有通用性。现在的做法是,把这些控制过程编写成程序,作为操作系统的一部分事先存放在系统盘上,用户在需要时只要按规定的格式设置好参数,直接调用即可。这种方式称为利用操作系统的标准功能调用进行输入/输出。这样一来,既便于操作系统对外部设备进行统一管理,也便于用户在编制自己的程序时,不用考虑输入/输出的控制细节,而将精力集中在自己程序的编制上,提高了工作效率,也使编制出来的程序更具有通用性。

8086/8088系统可配置PC-DOS、MS-DOS等多种操作系统,其中PC-DOS是最主要的操作系统。PC-DOS有多个版本,但它们向上兼容。本书将以PC-DOS为例,介绍它所具有的常用系统功能调用。

早期的PC-DOS提供了75个系统功能调用,编号从0~57H,主要分为设备管理、文件管理、目录管理及其他功能调用四大类。但在0~57H中,有很多编号没有使用,例如,18H,1D~20H,38H,34H,37H,50~53H和55H,DOS中没有对应的子程序,它们是PC-DOS所留的、备用的系统功能调用入口。本节仅介绍设备管理系统功能调用中基本的输入/输出管理。更多的系统调用在第5章详细介绍或参考附录3。

使用DOS系统功能调用的一般过程为:将调用号放入寄存器AH中,置好入口参数,然后执行软中断语句“INT 21H”。必要时,还可在调用结束时分析出口参数,检查调用是否成功。

1.键盘输入一个字符(1号调用)调用格式:

MOV AH,01H

INT 21H

功能:等待从键盘输入一个字符并将输入字符的ASCII码送入寄存器AL中。

系统执行该功能调用时将扫描键盘,等待有键按下。一旦按下,就将其字符的ASCII码读入,首先检查是否是<CTRL>+<Break>,若是,则从本调用的执行中退出;否则,将ASCII码→AL,同时将该字符送显示器显示。

2.显示输出一个字符(2号调用)

调用格式:

MOV DL,待显示字符的ASCII码

MOV AH,02H

INT 21H

功能:将DL中的字符送显示器显示,若DL中为<CRTL>+<Break>的ASCII码,则从本调用的执行中退出。

【例3-38】 输出一个换行符。

MOV DL,0AH

MOV AH,02H ;0AH是换行符的ASCII码

INT 21H

3.显示输出一字符串(9号调用)

调用格式:

LEA DX,字符串首偏移地址

MOV AH,09H

INT 21H

功能:将当前数据区中DS:DX所指向的以“$”结尾的字符串送显示器显示。

【例3-39】

DATA SEGMENT

BUF DB 0AH,0DH,‘I W ISH YOUSUCCESS!$’;定义要显示的字符串

DATA ENDS

STACK SEGMENT

DB 200DUP(?);定义一个200字节堆栈

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:MOV AX,DATA ;将数据段首地址送DS

MOV DS,AX

LEA DX,BUF;要显示字符串首地址送DX

MOV AH,09H

INT 21H

MOV AH,4CH;退出程序

INT 21H

CODE ENDSEND START

执行这个程序,显示器上将显示出字符串:

I W ISH YOUSUCCESS!

需要说明的是:在使用9号调用时,待输出的字符串一定要在当前数据段中,而且字符串要用“$”结尾。如果待输出的字符串本身就包含字符“$”,那就不能采用9号调用,而只能循环使用2号调用才能完成整个字符串的输出。如果定义的字符串不以“$”结尾,将会出现什么情况,请读者考虑。

4.键盘输入一字符串(10号调用)

调用格式:

LEA DX,缓冲区首偏移地址

MOV AH,0AH

INT 21H

功能:从键盘上往DS:DX所指的输入缓冲区输入字符串并送显示器显示。

说明:

(1)该调用要求输入缓冲区要按规定的格式定义。例如:

BUF DB 82

DB?

DB 82 DUP(?)

这个例子定义了可以容纳80个字符的缓冲区。其中,缓冲区中的第一个字节规定了缓冲区的大小,它不能是0。第二个字节存放实际输入的字符个数。从键盘输入的字符串实际上从第三个字节开始存放,最后以回车(0DH)作结束。回车符的ASCII码也被送入缓冲区,但不计入输入的字符个数之中。如果输入的字符个数超过了缓冲区的大小,则多余字符被删除且扬声器响,所以上述例子实际只容纳80个字符。

(2)该缓冲区一定要定义在当前数据段中。

5.程序返回DOS(4C号调用)

调用格式:

MOV AH,4CH

INT 21H

功能:执行该指令程序返回到DOS操作系统。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈