汇编语言系统功能调用

所谓系统功能,是指包含在操作系统软件中的一组功能子程序,这些子程序的功能包括:输入输出管理、内存管理、磁盘读写控制、文件操作、目录操作以及设置或读取系统日期、时间等多方面。它们不但为系统软件所使用,还可由程序设计人员直接调用,极大地方便了应用程序的编制。

一、系统功能调用方法

操作系统提供的一组功能子程序有上百个,每一个子程序都有一个8位编号,叫功能号,每一个子程序的功能,入口参数、出口参数,都可在系统功能调用表中查到。

为调用这些子程序,操作系统提供了一个调用接口,可以通过中断语句“INT 21H”使用它。

系统功能调用的一般过程如下。

(1)将所要调用功能的功能号放入 AH 寄存器中。

(2)根据所调用功能的规定设置入口参数。

(3)执行中断语句“INT 21H”完成调用。

(4)取得出口参数。

二、常用系统功能调用

下面介绍几个常用的功能调用。

  1. 带显示的键盘输入(1 号功能)

    该功能子程序等待键盘输入,直到按下一个键(即输入一个字符),把字符的 ASCII 码送入 AL,并在屏幕上显示该字符。如果按的键是 Ctrl+C 组合键,则停止程序运行。如果按 Tab 制表键,屏幕上光标自动扩展到紧接着的 8 个字符位置后面。1 号功能调用,无须入口参数,出口参数在 AL 中。例如:

    带显示的键盘输入

  2. 不带回显的键盘输入(8 号功能)

    该功能调用与 1 号功能基本类同,差异仅在 8 号功能调用时,键盘输入的字符不在屏幕上显示,调用方法如下:

    不带回显的键盘输入

  3. 不带回显的键盘字符输入(7 号功能)

    与 8 号功能类似,但按 Ctrl+C 组合键和 Tab 制表键无反应。调用方法如下:

    不带回显的键盘字符输入

  4. 字符串输入(0AH 号功能)

    前面 1、8、7 号功能调用都是调用一次,从键盘输入一个字符,有时需要一次调用能接受一串字符,0AH 号功能子程序就能做到这一点。

    在使用本功能调用前,应在内存中建立一个输入缓冲区。缓冲区第 0 个字节存放它能保存的最大字符数(1~255,不能为 0),该值由用户程序自己事先设置。第 1 个字节存放用户本次调用时实际输入的字符数(回车键除外),这个数由该功能调用返回时自动填入。用户从键盘输入的字符从第 2 个字节开始存放,直到用户输入回车键为止,并将回车键码(0DH)加在刚才输入字符串的末尾上。所以设置缓冲区最大长度时,要比所希望输入的最多字符数多一个字节。若输入的字符数超过缓冲区最大容量,则后面输入的字符被略去,且响铃,直到输入一个回车键才结束。在字符串输入过程中,可用 Ctrl+C 组合键打断,中止字符输入。

    调用时,用 DS:DX 寄存器指向输入缓冲区的段基值:偏移量。例如:

    字符串输入

  5. 字符显示(2 号功能)

    本功能子程序仅在屏幕上显示单个字符,要显示字符的 ASCII 码(入口参量)存放在 DL 中。如果 DL 中存放退格键编码(08H),在屏幕上便向左移一个字符位置,并使该位置成为空格。移动后光标停留在那里。如要显示字符 A,可用下列几条指令调用:

    字符显示

    由于2号功能可显示任一字符,例如美元符号“$”(24H),而9号功能却不能显示$符号,所以它可作为9号功能的补充。

  6. 字符打印(5 号功能)

    5 号功能子程序把 DL 中的字符(ASCII 码)送入打印机输出。功能调用为:

    字符打印

  7. 字符串显示(9 号功能)

    9 号功能子程序能在屏幕上显示多于一个的字符串。要显示的字符串必须先放在内存一数据区中,且字符串以美元符号“$”作为结束标志。非显示字符(如回车,换行),可以用它的 ASCII 码插入字符串中间。进行 9 号功能调用时,先把待显示的字符串首地址的段基值和偏移量分别存入 DS 和 DX 中。9 号功能调用示例如下:

    字符串显示

  8. 直接输入和输出(6 号功能)

    本功能子程序可以执行键盘输入操作,也可执行屏幕显示操作。执行这两种操作的选择由寄存器 DL 中的内容确定。

    (1)DL=00~0FEH,显示输出。

    这时显示输出字符的 ASCII 码在 DL 中,如同 2 号功能。例如,在屏幕上显示符号“$”:

    直接输入和输出

    (2)DL=0FFH,从键盘输入字符。

    该功能的字符输入与 1、7、8 号功能不同,它不等待键盘的字符输入。在执行本功能子程序时,若键盘已输入字符,则字符的 ASCII 码存在 AL 中,且标志位 ZF=0。若键盘没有键按下,则标志位 ZF=1。为了用 6 号功能从键盘输入字符,通常编制如下程序段:

    直接输入和输出

  9. 读出系统日期(2AH 号功能)

    本功能子程序的执行,将系统的年、月、日、星期的数据读出,存入指定的寄存器中。

    CX: 年(1980~2099)。 DH: 月(1~12)。 DL: 日(1~31)。 AL: 星期(0—星期日,1—星期一,…)。

    例如,取出系统日期并存放在有关存储单元中:

    读出系统日期

  10. 设置系统日期(2BH 功能)

    调用本功能子程序时,必须在 CX 和 DX 中设置有效日期,其中,CX 中存放年号(1980~2099),DH 中存放月号(1~12),DL 中存放日(1~31)。如果日期设置有效,待功能子程序返回时,AL=0,否则 AL=0FFH。所以为了检查设置是否成功,通常在调用 2BH 号功能后检查 AL 中内容。例如:

    设置系统日期

  11. 读出系统时间(2CH 功能)

    本功能子程序从系统中可得到当时的时间:时、分、秒和百分秒,它们分别存放在 CX 和 DX 寄存器中。

    CH:小时(0~23)。 CL:分(0~59)。 DH:秒(0~59)。 DL:百分秒(0~99)。

    例如,读出系统时间并存放在有关存储单元中:

    读出系统时间

  12. 设置系统时间(2DH 号功能)

    调用本功能子程序时,必须在 CX 和 DX 中设置有效时间(指定有关寄存器和数据范围与 2C 号功能相同)。如果设置时间有效,从功能子程序返回时,AL=0,否则 AL=0FFH。例如,设置 14 时 30 分 0 秒:

    设置系统时间

请参阅

(完)

comments powered by Disqus