学习dos功能调用

上传人:kms****20 文档编号:51339952 上传时间:2018-08-13 格式:PPT 页数:31 大小:81KB
返回 下载 相关 举报
学习dos功能调用_第1页
第1页 / 共31页
学习dos功能调用_第2页
第2页 / 共31页
学习dos功能调用_第3页
第3页 / 共31页
学习dos功能调用_第4页
第4页 / 共31页
学习dos功能调用_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《学习dos功能调用》由会员分享,可在线阅读,更多相关《学习dos功能调用(31页珍藏版)》请在金锄头文库上搜索。

1、 4.3.7DOS系统功能调用在我们的程序中,总会有数据的输入和输出。 实现数据的输入与输出将涉及输入、输出设备的管理, 而对输入、 输出设备管理的具体操作是十分繁琐的,好在系统为我们提供了方便。实际上,无论是用户程序还是DOS系统本身, 都离不开输入、输出操作,PC DOS系统将输入、输出管理程序编写成一系列子程序,不仅系统可以使用,用户也可以像调子程序一样方便地使用它们。在IBM PC系统中,除了DOS系统中有一组输入、输出子程序可供用户调用外,在系统的ROM中也有一组输入、输出管理程序可供用户使用,这组程序通常称为ROM BIOS(ROM Input/Output System)。 调用

2、系统提供的子程序, 通常称为系统功能调用。 功能调用的基本方法是采用一条软中断指令INT n。所谓软中断是以指令的方式产生的中断,当CPU执行该指令时,就像响应外部中断一样的方式转入中断处理程序,中断处理程序结束后又返回到INT指令的下一条指令处。指令中的n为中断类型号,不同的n将转入不同的中断处理程序。所以,系统所提供的处理输入、输出的子程序是以中断处理程序的方式编写的。 关于中断和如何转向中断处理程序以及中断处理程序的结构, 将在第 10 章中详细介绍。本节将主要说明与基本输入、输出有关的DOS系统功能调用的调用方式及其用途,目的是为程序设计中实现输入、输出操作打下基础。 DOS系统功能调

3、用主要是由软中断指令INT 21H实现的, 这是一条功能极强的指令。当累加器AH中设置不同的值时, 指令将完成不同的功能,我们称AH中设置的内容为功能号。 该指令的功能大体可分为输入、输出设备管理、 件管理及目录管理三个方面。这里,我们主要介绍输入、 输出设备管理 的功能及调用方式,DOS功能调用的其余功能请参阅附录B。 下面给出AH中设置的值与其对应的功能关系。(1) (AH)=01H时,为键盘输入。等待并从标准输入设备(如键盘)读入一个字符,将其送到寄存器AL中和标准输出设备上。同时,检查该字符是否为CTRL BREAK,若是,则执行一条INT 23H指令,即终止正在执行的程序,返回DOS

4、系统。(2) (AH)=02H时,为字符输出。将寄存器DL中的字符输 出到标准输出设备上。如果检测到CTRL BREAK就执行INT 23H指令。(3) (AH)=03H时,为异步通讯输入。等待从串行通讯接口 输入一个字符(一个字节的数据),并将该字符送入寄存器AL 。 (4) (AH)=04H时,为异步通讯输出。把寄存器DL中的一 个字符送到串行通讯接口输出。关于串行通讯接口的有关问 题,将在后面章节介绍。(5) (AH)=05H时,为打印机输出。把寄存器DL中的字符 送入标准打印机接口。(6) (AH)=06H时,为直接控制台输入/输出。此功能可以实 现输入也可以实现输出。若要求进行输入操

5、作,则调用前应 将 0FFH送入DL寄存器, 在INT 21H指令执行结束后,有两种 可能: 如果标志位ZF=0, 则表示AL中为当前输入的字符;如果 ZF=1,则说明输入设备没有准备好,并且把 00 送入AL。若 要求进行输出操作,则寄存器DL中送除 0FFH外的其它值, 此时,执行INT 21H指令后,将把寄存器DL的内容送标准输 出设备输出。(7) (AH)=07H时,读键盘但不显示。此功能与功能 1(AH)=01)基本相同,不同的只是读入的字符不送显示器显示 , 也不检查CTRL BREAK的输入。(8) (AH)=08H时,读键盘但不显示。此功能与功能 7 基本 相同,不同的是它检查

6、CTRL BREAK,从而可以由此组合键 停止输入。(9) (AH)=09H时,为输出字符串。将缓冲区中的一组以 $结束的字符串送标准输出设备输出。在调用前必须将输出 缓冲区的首地址送DS:DX。 (10) (AH)=0AH时,为输入字符串。前面的键盘输入功能实现单个字符的输入,本功能可以实现将一串字符读入并将 它们送入指定的输入缓冲区。 输入前必须将输入缓冲区的首 地址送入DS:DX。该缓冲区中的第 1 个字节的内容不能为零 , 它应指出该缓冲区的大小(缓冲内可包含的字节数)。第2字 节用来记录实际输入的字节数,第 3 个字节开始才存放输入的字符串。字符从标准输入设备输入,并送入输入缓冲区,

7、 直到输入回车(ENTER)时为止。当输入的字符数达到缓冲区大 小减 1 时,随后读入的字符均被忽略,直到读入回车符为止 。 (11) (AH)=0BH时,为检查标准输入设备的状态。 如果 从标准设备上读入的字符是有效的,AL的内容将是 0FFH, 否则AL的内容为 00。 如果检测到CTRL BREAK,就执行INT 23H指令。本功 能并不读入字符,仅用作检查,当(AL)=0FFH时,表示有一 字符正等待输入。(12) (AH)=0CH时,清除标准输入缓冲区,然后执行AL 中所指出的功能号,AL中的功能号可以为 01、06、07、08 和 0AH。功能调用中涉及的标准设备,可以在DOS命令

8、状态下用 命令或命令组成的文件指定,若不加指定,那么,DOS系统默认的标准设备为:标准输入设备为键盘,标准输出设备为 显示器,标准辅助设备是第 1 个RS232C串行异步通讯接口, 标准打印输出设备是用于连接打印机的第 1 个并行接口。例 4.3.19 从键盘上输入一字符串, 将其送入输入缓冲 区, 并显示这组字符串。程序如下:STACK SEGMENT STACK;DW 40 DUP(?);TOPLABELKG*2 WORD;STACKENDS;DATASEGMENT;STRING1DB DO YOU WANT TO INPUT STRING? (Y/N):$; CRLFDB 0DH, 0A

9、H, $;STRING2DB PLEASE INPUT STRING., 0DH, 0AH, $;BUFINDB 20H;DB ?;BUFIN1DB 20H DUP(?);DATAENDS;CODESEGMENT;ASSUMECS:CODE, DS:DATA, SS:STACK;START:MOVAX, DATA;MOVDS, AX;MOVAX, STACK;MOVSS, AX;MOVSP, OFFSET TOP;LEADX, STRING1;MOVAH, 09H; 显示字符串STRING1INT21H;MOVAH, 01; 读入一个字符在AL中INT21H;CMPAL, Y;JEINPUT;

10、CMPAL, y;JNEDONE; 不是 Y或 y, 则结束INPUT:LEADX, CRLF;MOVAH, 09H; 光标回车换行INT21H;LEADX, STRING2;MOVAH, 09H; 显示字符串STRING2INT21H;LEADX, BUFIN;MOVAH, 0AH; 读一字符串送入BUFININT21H;MOVAL, BUFIN+1; 取实际输入的字符个数CBW;LEASI, BUFIN+2;ADD SI, AX;MOVBYTE PTR SI, $; $送到输入字符串的末尾 LEADX, CRLF;MOVAH, 09; 光标回车换行INT21H;LEADX, BUFIN+2

11、;MOVAH, 09; 显示输入字符串;INT21H;DONE:MOVAH, 4CH;INT21H;CODEENDS;ENDSTART;程序说明:(1) 程序在数据段中定义了两个字符串STRING1 和 STRING2, 一个输入缓冲区BUFIN,它们都是字节类型的变量 。 (2) 为了实现字符串的显示, 每个字符串的后面必须以字 符$作为结束符。(3) 0DH,0AH为回车、 换行符, 它使光标移到下一行的 行首。(4) BUFIN用来存放输入的字符串, 它的第一个字节中必 须有值,指出该缓冲区中可存放的字符数,例中为 20H,表明 缓冲区有 20H个字节, 最多可存放 1FH个字符,因为缓

12、冲区的最后一个字节存放的总是空格符。 实际输入的字符个数在BUFIN+1 单元中,这是由系统程序在字符串输入后填入的,它可以小于 1FH。(5) 为了实现对输入字符串的显示, 我们必须在输入字符串的末尾送入一个$字符,输入字符串的显示应从BUFIN+2 单元开始。本例程序中的输入和输出,即字符和字符串的输入及字符串的输出(显示),都是通过系统功能调用INT 21H实现的。附录B中给出了INT 21H的其它各项功能, 我们同样可以采用上述方式进行调用。此外,附录C中给出了BIOS功能调用的格式和功能说明。我们也可以用上述调用方式来使用附录C中的各项功能。 关于BIOS的有关问题在第 8 章中将作

13、详细叙述,下面我们仅从利用功能调用实现输入输出操作的角度举一个例子作为BIOS功能调用的参考。例如,要求重复滚动显示一组字符,每次滚动一行, 每行显示的字符不同,当有任一键被按动时,程序随即结束。程序如下:DATA SEGMENT;STRING1DBHitting any key, the program is finished.C1DB A;DATAENDS;STACKSEGMENTSTACK;DW 30H DUP(?);STACKENDS;CODESEGMENT;ASSUMECS:CODE, DS:DATA, ES: DATA, SS: STACK;START:MOVAX, DATA;MO

14、VDS, AX;MOVES, AX;MOVAX, 03H; 选择显示方式(文本方式, 8025, 彩色)INT10H;MOVAX, 00;MOVAX, 0600H; 清屏MOVBH, 07;MOVCX, 0; 0 行 0 列MOVDX, 184FH; 24 行 79 列INT10H;MOVAH, 02; 指定光标位置MOVBX, 07; 黑底白字MOVDX, 0A0AH; 10 行 10 列INT10H;MOVAX, DATA;MOVES, AX;PUSHBP;MOVAH, 13H; 显示字符串STRING1MOVAL, 01;MOVCX, 52;MOVBL, 074H;LEABP, STRI

15、NG1;INT10H;POPBP;MOVC1, A;AGAINF:MOVAX, 0601H; 向上滚动一行MOVBH, 3CH;MOVCX, 1400H; 20 行 0 列MOVDX, 174FH; 23 行 79 列INT10H;MOVAH, 01; 读键盘INT16H;JNEDOWN; 有键被按动则结束MOVAL, C1; 否则继续MOVAH, 02; 移动光标位置MOVBX, 0;MOVDX, 171CH; 23 行 28 列INT10H;MOVAL, C1;MOVAH, 09H; 在光标所在位置重复显示 15 次 C1 中的字符 MOVBL, 3CH;MOVCX, 015;INT10H

16、;DELAY:MOVBX, 400; 延时一秒 AGAIND:MOVCX, 28000#;DLOOP:LOOPDLOOP#;DECBX#;CMPBX, 0#;JNEAGAIND#;CMPAL, Z; 修改C1 中的内容( A Z)#;JED1#;INCC1#;JMPAGAINF#;D1:MOVC1, A#;JMPAGAINF#;DOWN:MOVAX, 03H#;INT10H#;MOVAH, 4CH#;INT21H#;CODEENDS#;ENDSTART 程序说明:(1) 阅读本例程序时, 请参看附录C。(2) 例中的INT 16H为键盘I/O功能调用, AH中的内容不 同, 将完成不同的功能。 例中为(AH)=1, 即为读键盘缓冲区 , 当键盘缓冲区空时,则ZF=1; 否则ZF=0, 且(AL)=输入字符 码,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号