第10讲DOS功能调用及中断调用
- 格式:ppt
- 大小:355.50 KB
- 文档页数:11


DOS中断:1、字符功能调用类(Cha racte r-Ori ented Func tion)01H、07H和08H —从标准输入设备输入字符02H—字符输出03H—辅助设备的输入04H —辅助设备的输出05H—打印输出06H—控制台输入/输出09H—显示字符串0AH—键盘缓冲输入0BH —检测输入状态0CH—清输入缓冲区的输入功能(1)、功能01H、07H和08H功能描述:从标准输入设备(如:键盘)读入一个字符。
该中断在处理过程中将一直处于等待状态直到有字符可读为止。
该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾入口参数:AH=01H,过滤掉控制字符,并回显=07H,不过滤掉控制字符,不回显=08H,过滤掉控制字符,不回显出口参数:AL=输入字符的ASCI I码(2)、功能02H功能描述:向标准输出设备(如:屏幕)输出一个字符。
该输出还可被重定向,如果这样做,则将无法判断磁盘是否满入口参数:AH=02HDL=待输出字符的ASC II码出口参数:无(3)、功能03H功能描述:从辅助设备读入一个字符,该辅助设备的缺省值为CO M1入口参数:AH=03H出口参数:AL=读入字符的AS CII码(4)、功能04H功能描述:向辅助设备输出一个字符,该辅助设备的缺省值为COM1入口参数:AH=04HD L=待输出字符的AS CII码出口参数:无(5)、功能05H功能描述:向标准的输出设备输出一个字符。
该缺省的输出设备为LPT1端口的打印机,除非用MODE命令来改变入口参数:AH=05HDL=待输出字符的ASCI I码出口参数:无(6)、功能06H功能描述:控制台(如:键盘、屏幕)输入/输出。
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+Break5:直接控制台输⼊输出功能:字节控制台输⼊输出,通常情况下,控制台输⼊就是键盘输⼊,控制台输出就是屏幕输出⼊⼝参数:若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 ;程序功能,写⼀个程序,他接受⼀个字符串,然后显⽰其中数字符的个数,英⽂字母的个数和字符串的个数23 MLENGTH = 1284 DSEG SEGMENT5 BUFF DB MLENGTH6 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 ENDS13 ;14 CSEG SEGMENT15 ASSUME CS:CSEG,DS:DSEG16 START: MOV AX,DSEG17 MOV DS,AX18 MOV DX,OFFSET MESS019 CALL DISPMESS20 MOV DX,OFFSET BUFF21 MOV AH,1022 INT 21H23 CALL NEWLINE24 MOV BH,025 MOV BL,026 MOV CL,BUFF+127 MOV CH,028 JCXZ COK29 MOV SI,OFFSET BUFF+23031 AGAIN:MOV AL,[SI]32 INC SI33 CMP AL,'0'34 JB NEXT35 CMP AL,'9'36 JA NODEC37 INC BH38 JMP SHORT NEXT39 NODEC: OR AL,20H40 CMP AL,'a'41 JB NEXT42 CMP AL,'z'43 JA NEXT44 INC BL45 NEXT: LOOP AGAIN46 ;47 COK: MOV DX,OFFSET MESS148 CALL DISPMESS49 MOV AL,BUFF+150 XOR AH,AH51 CALL DISPAL52 CALL NEWLINE53 ;54 MOV DX,OFFSET MESS255 CALL DISPMESS56 MOV AL,BH57 XOR AH,AH58 CALL DISPAL59 CALL NEWLINE60 ;61 MOV DX,OFFSET MESS362 CALL DISPMESS63 MOV AL,BL64 XOR AH,AH65 CALL DISPAL66 CALL NEWLINE67 ;68 ;暂停,任意键关闭69 mov ah,170int 21h71 mov ah,4ch ;结束,可以修改al设置返回码 72int 21h73 ;74 ;⼦程序名称:DISPAL75 ;功能:⽤⼗进制数的形式显⽰8位⼆进制数76 ;⼊⼝参数:AL =8位⼆进制数77 ;出⼝参数:⽆78 DISPAL PROC79 MOV CX,380 MOV DL,1081 DISP1:DIV DL82 XCHG AH,AL83 ADD AL,'0'84 PUSH AX85 XCHG AH,AL86 MOV AH,087 LOOP DISP188 MOV CX,389 DISP2: POP DX90 CALL ECHOCH91 LOOP DISP292 RET93 DISPAL ENDP94 ;95 ;显⽰dx所指的提⽰内容,其他⼦程序说明略96 ;97 DISPMESS PROC98 MOV AH,999 INT 21H100 RET101 DISPMESS ENDP102 ;103 ;104 ;显⽰dx所指的字符,其他⼦程序说明略105 ECHOCH PROC106 MOV AH,2107 INT 21H108 RET109 ECHOCH ENDP110 ;111 ;略去⼦程序NEWLINW,该⼦程序列于源程序ASM中112 NEWLINE PROC113 PUSH AX114 PUSH DX115 MOV DL,0DH116 MOV AH,2117 INT 21H118 MOV DL,0AH119 MOV AH,2120 INT 21H121 POP DX122 POP AX123 RET124 NEWLINE ENDP125126 CSEG ENDS127 END STARTView Code代码解析:DSEG中定义了缓冲区以及要提⽰的信息的字符常量DISPMESS PROCMOV AH,9INT 21HRETDISPMESS ENDP在主函数中调⽤DOS功能9显⽰提⽰字符变量;显⽰变量信息之后调⽤DOS功能10,获取字符变量,字符的参数⼊⼝地址是DX,之后调⽤NEWLINE在显⽰功能中调⽤的是DOS功能2,其中回车符的ASCII是0DH,换⾏符的ASCII的是0AH 最后的DOS调⽤时是使⽤1这个使得DOS暂停⼀下,看输出结果之后⽤BH数字符计数器和BL字母符计数器之后⽤变址寄存器SI指向字符串的⾸地址。