• DOS功能的调用


    DOS功能的调用:主要包含三方面的子程序:设备驱动(基本I/O),文件管理和其他(包括内存管理,自取时间,自取终端向量,总之程序等)随着DOS版本的升级,这种DOS功能调用的子程序数量也在不断的增加,功能恶搞更加完备,使用也更加方便

    调用的方法

    可以按照下面方法调用DOS功能

    【1】根据需调用的功能调用准备入口参数,有部分调用是不需要入口参数的,但是大部分的功能调用需要入口参数,在调用前应该准备好入口参数

    【2】把功能调用号送到AH

    【3】发软中断指令INT 21H

    基本的I/O的调用

    1:带回响键盘输入(1号功能调用)

    功能:从标准输入设备上读一字符,并将该字符回显在标准输出设备上,通常情况下,输入设备就是键盘,输出设备就是屏幕,如果键盘无字符可读,则一直等待,

    直到有字符可读

    入口参数:无

    出口参数:AL = 督导字符的代码(ASCII码)

    说明:如果独到的字符是ctrl+c或者CTRL+Break,则结束工作

    2:不带回响键盘输入的输入(8号功能的调用)

    除读到的输入字符不在屏幕上显示意外,同1好功能调用相似

    3:直接键盘输入(7号调用功能)

    功能:从标准输入上读取一个字符,通常情况下,标准输入就是键盘,如果键盘无字符可读,则一直等待到有字符可读

    入口参数:无

    出口参数:AL= 读到字符的代码

    说明:不检查读到的字符是否是CTRL +C或者是CTRL+break

       不回显读到的字符

    4:显示输出(2号功能嗲用)

    功能:向标准输入设备写一字符,通常情况下,标准输出设备就是屏幕

    入口参数:DL = 要输出的字符(ASCII码)

    出口参数:无

    说明:在显示输出时检查是否按照CTRL+C或者CTRL+Break

    5:直接控制台输入输出

    功能:字节控制台输入输出,通常情况下,控制台输入就是键盘输入,控制台输出就是屏幕输出

    入口参数:若DL = 0FFH,表示输入,否则表示输出

    出口参数:输入时:ZF =1 ,表示无字符可读,ZF= 0表示读到字符,AL= 输入字符代码;输出时:无

    说明:

    【1】:在输入时,如果无字符可读,并不等待

    【2】:不检查CTRL+C或者CTRL+Break

    【3】在读到字符时也不回显

    【4】再输入时,如果AL = 0,表示用户曾按下过一个扩展键,在下一次调用该功能是,返回该扩展按键的扫描码

    【5】在输出时,不解释表符等特殊控制符

    6:显示字符串(9号功能调用)

    功能:在标准输出上显示一个祝福穿,通常标准输出就是屏幕

    入口参数:DS:DS= 需要输出字符串的首地址,字符串字符‘$’为结束标志

    出口参数:无

    说明:在现实输出时检查是否按下:CTRL +C或者是CTRL+BREAK,如果是则结束程序

    输入字符串(0AH功能的调用)

    功能:从输入上读一个字符串,通常情况下,标准输入就是键盘

    入口参数:DS:DX = 缓冲区首地址

    出口参数:接收到的输入字符串在缓冲区中

    说明:(1)缓冲区第一字节置为缓冲区的最大容量,可以认为是入口参数,缓冲区第二字节存放实际读入的字符数,可认为是出口参数的一部分,第三字节开始存放接受的字符串

    (2)字符串以回车符结束,回车符是字符串接收到的最后一个字符

    (3)如果输入的字符串超过缓冲区所能容纳的最大字符数,则随后的输入字符被丢弃并且响铃,直到遇到回车符为止

    (4)如果在输入时按下CTRL+C或者CTRL+break,则程序结束

    (8)去键盘输入状态(0BH号功能的调用)

    功能:判别在标准输入设备上是否有字符可读

    入口参数:无

    出口参数:AL= 0 表示无字符可读

         AL = 0FFH表示有字符可读

    (9)清楚缓冲区后再输入(0CH功能调用)

    功能:清除输入缓冲区要执行的功能号

    出口参数:决定于清除输入缓冲区后执行的功能

    说明:清除缓冲区后执行的功能室01h,06h,07h或者0Ah,如果不是这样,则不输入

    打印输出:(5号功能调用)

    功能:向链接在第一个并行口上的打印机输出一字符

    入口参数DL = 要打印字符的ASCII码

    出口参数:无

    说明:打印机可能不立即打印指定的字符

     示例代码:

      1 ;程序功能,写一个程序,他接受一个字符串,然后显示其中数字符的个数,英文字母的个数和字符串的个数
      2 
      3 MLENGTH  = 128
      4 DSEG         SEGMENT
      5 BUFF            DB        MLENGTH
      6                     DB     ?
      7                     DB         MLENGTH DUP(0)
      8 MESS0        DB        'Please input :$'
      9 MESS1        DB       'Length = $'
     10 MESS2        DB        'X = $'
     11 MESS3     DB    'Y = $'
     12 DSEG        ENDS
     13 ;
     14 CSEG         SEGMENT
     15                     ASSUME        CS:CSEG,DS:DSEG
     16 START:        MOV    AX,DSEG
     17                     MOV    DS,AX
     18                     MOV DX,OFFSET    MESS0
     19                     CALL        DISPMESS
     20                     MOV DX,OFFSET    BUFF
     21                     MOV     AH,10
     22                     INT 21H
     23                     CALL        NEWLINE
     24                     MOV     BH,0
     25                     MOV BL,0
     26                     MOV CL,BUFF+1
     27                     MOV CH,0
     28                     JCXZ    COK
     29                     MOV SI,OFFSET    BUFF+2
     30                     
     31 AGAIN:MOV AL,[SI]
     32                 INC SI
     33                 CMP AL,'0'
     34                 JB   NEXT
     35                 CMP AL,'9'
     36                 JA    NODEC
     37                 INC     BH
     38                 JMP     SHORT NEXT
     39 NODEC: OR AL,20H
     40                 CMP AL,'a'
     41                 JB     NEXT
     42                 CMP  AL,'z'
     43                 JA    NEXT
     44                 INC  BL
     45 NEXT:    LOOP  AGAIN
     46 ;
     47 COK:        MOV DX,OFFSET MESS1
     48                 CALL DISPMESS
     49                 MOV    AL,BUFF+1
     50                 XOR    AH,AH
     51                 CALL DISPAL
     52                 CALL    NEWLINE
     53                 ;
     54                 MOV DX,OFFSET MESS2
     55                 CALL    DISPMESS
     56                 MOV AL,BH
     57                 XOR AH,AH
     58                 CALL DISPAL
     59                 CALL NEWLINE
     60                 ;
     61                 MOV DX,OFFSET MESS3
     62                 CALL DISPMESS
     63                 MOV AL,BL
     64                 XOR AH,AH
     65                 CALL DISPAL
     66                 CALL NEWLINE
     67                 ;
     68                     ;暂停,任意键关闭
     69                     mov ah,1
     70                     int 21h
     71                     mov ah,4ch     ;结束,可以修改al设置返回码
     72                     int 21h
     73                 ;
     74 ;子程序名称:DISPAL
     75 ;功能:用十进制数的形式显示8位二进制数
     76 ;入口参数:AL =8位二进制数
     77 ;出口参数:无
     78 DISPAL        PROC
     79                 MOV CX,3
     80                 MOV DL,10
     81 DISP1:DIV    DL
     82               XCHG AH,AL
     83               ADD AL,'0'
     84               PUSH    AX
     85               XCHG AH,AL
     86               MOV AH,0
     87               LOOP DISP1
     88               MOV CX,3
     89 DISP2:    POP DX    
     90                 CALL ECHOCH
     91                 LOOP DISP2
     92                 RET
     93 DISPAL    ENDP
     94 ;
     95 ;显示dx所指的提示内容,其他子程序说明略
     96 ;
     97 DISPMESS         PROC
     98                     MOV    AH,9
     99                     INT 21H
    100                     RET
    101 DISPMESS     ENDP
    102 ;
    103 ;
    104 ;显示dx所指的字符,其他子程序说明略
    105 ECHOCH         PROC
    106                     MOV    AH,2
    107                     INT 21H
    108                     RET
    109 ECHOCH     ENDP
    110 ;
    111 ;略去子程序NEWLINW,该子程序列于源程序ASM中
    112 NEWLINE    PROC
    113                         PUSH AX
    114                         PUSH DX
    115                         MOV DL,0DH
    116                         MOV AH,2
    117                         INT 21H
    118                         MOV DL,0AH
    119                         MOV AH,2
    120                         INT 21H
    121                         POP     DX
    122                         POP    AX
    123                         RET
    124 NEWLINE    ENDP
    125 
    126 CSEG        ENDS
    127                     END         START
    View Code

    代码解析:DSEG中定义了缓冲区以及要提示的信息的字符常量

    DISPMESS    PROC
                MOV    AH,9
                INT 21H
                RET
    DISPMESS    ENDP

    在主函数中调用DOS功能9显示提示字符变量;显示变量信息

    之后调用DOS功能10,获取字符变量,字符的参数入口地址是DX,

    之后调用NEWLINE在显示功能中调用的是DOS功能2,其中回车符的ASCII是0DH,换行符的ASCII的是0AH

    最后的DOS调用时是使用1这个使得DOS暂停一下,看输出结果

    之后用BH数字符计数器和BL字母符计数器

    之后用变址寄存器SI指向字符串的首地址

    版权所有,转载请注明链接地址:http://i.cnblogs.com/?postid=3705527&update=1

  • 相关阅读:
    第一阶段SCRUM冲刺10
    第一阶段SCRUM冲刺09
    第一阶段SCRUM冲刺08
    单词统计续
    第十一周学习报告
    第一阶段SCRUM冲刺07
    第一阶段SCRUM冲刺06
    第一阶段SCRUM冲刺05
    十天冲刺08
    十天冲刺07
  • 原文地址:https://www.cnblogs.com/fengdashen/p/3705527.html
Copyright © 2020-2023  润新知