文档介绍:●键盘 I/O
●显示器 I/O
●打印机 I/O
●串行通信口I/O
第九章 BIOS 和 DOS 中断
子程序调用
主程序
……
CALL SUBP
……
子程序
……
……
RET
DOS/BIOS调用
源程序
……
INT n
……
DOS/BIOS
例行程序
……
……
IRET
实现机制不同
BIOS和DOS基本调用
调用方法:
1、将调用参数装入指定的寄存器中;
2、BIOS或DOS功能号装入AH;
3、如需子功能号,把它装入AL;
4、按中断号调用DOS或BIOS中断(INT);
5、检查或取得返回参数。
例:DOS调用:键盘输入,显示输出
MOV AH, 01 ;DOS功能号:键盘输入
INT 21H ;DOS调用
MOV CHAR, AL ;返回参数: (AL)
MOV DL, ’A’;调用参数: 输出字符
MOV AH, 02 ; DOS功能号: 显示输出
INT 21H ; DOS调用
1. 键盘I/O
(1) BIOS键盘中断( INT 16H)
AH 功能返回参数
0 从键盘读一字符 AL=字符码,AH=扫描码
1 读键盘缓冲区的字符如ZF=0,AL=字符码,
AH=扫描码
如ZF=1,缓冲区空
2 取键盘状态字节 AL=键盘状态字节
字符数字键字符码为ASCII 码
功能键、控制键字符码为0
对应一个扫描码
DOS键盘中断( INT 21H)
AH 功能调用参数返回参数
1 从键盘输入一个字符并回显在屏幕上 AL=字符
6 读键盘字符,不回显 DL= 0FFH 若有字符可取,AL=字符,ZF=0
  若无字符可取,AL=0,ZF=1
7 从键盘输入一个字符,不回显 AL=字符
8 从键盘输入一个字符,不回显, AL=字符
检测Ctrl-Break
A 输入字符到缓冲区 DS:DX = 缓冲区首址
B 读键盘状态 AL=0FFH有键入,AL=00无键入
C 清除键盘缓冲区, AL=键盘功能号
并调用一种键盘功能(1,6,7,8或A)
例: 输入字符串到缓冲区STRING
DATA SEGMENT
MAXLEN DB 32 MAXLEN DB 32 ,0, 32 DUP(?)
ACTLEN DB ? MAXLEN DB 32 ,33 DUP(?)
STRING DB 32 DUP(?)
DATA ENDS
CODE SEGMENT
…
LEA DX,MAXLEN
MOV AH,0AH
INT 21H
…
CODE ENDS
END
32
5
68H
61H
70H
70H
79H
0DH
MAXLEN
ACTLEN
STRING
显示器I/O
文本方式 ASCII字符
7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
前景
000 = 黑
111 = 白
亮度
0 = 正常亮度
1 = 加强亮度
闪烁
0 = 正常显示
1 = 闪烁显示
背景
000 = 黑
111 = 白
单色属性
7 6 5 4 3 2 1 0
前景
闪烁
背景
BL R G B I R G B
16色属性
BIOS显示中断 INT 10H
功能号 AH=0,1, 2, 3, 5, 6, 7, 8, 9, 0AH, 0EH 13H ()
例:清除屏幕
mov ah, 6 ; 屏幕初始化
mov al, 0 ; 全屏空白
mov bh, 7 ; 卷入行属性
mov ch, 0 ; 左上角行号
mov cl, 0 ; 左上角列号
mov dh, 24 ; 右下角行号
mov dl, 79 ; 右下角列号
int 10h ; BIOS调用
定义窗口
例: 在品红背景下,显示5个浅绿色闪烁的星号。
MOV AH,09 ;光标位置下显示
MOV AL,’*’;显示字符
MOV BH,0 ;显示页0
MOV BL,0DAH ; 1 101 1010 ()
MOV CX,05 ;显示次数
INT 10H ;BIOS调用