检测点17.1
- TF = 1 时,CPU可以响应中断,比如 BIOS的 int 9H中断例程(功能是向键盘缓冲区写入数据)
- BIOS的int 16H中断例程(功能是从缓冲区读取一个键盘输入)
- 缓冲区有数据的时候,就读取缓冲区的第一个字单元,这时候允许不允许响应 int 9H都可以的,也就是说无所谓TF =1 (可响应)还是TF = 0(屏蔽)
- 缓冲区为空的时候,当然要置TF = 1 (可响应),使得接受键盘输入填充缓冲区,因此这时候TF = 1
解析参考
int 16H 0号中断例程
-
编程:接收用户的键盘输入,输入'r',将屏幕上的字符设置为红色、输入'g',将屏幕上的字符设置为绿色、输入'b',将屏幕上的字符设置为蓝色
assume cs:code
code segment
start: mov ah,0
int 16h
mov ah,1
cmp al,'r'
je red
cmp al,'g'
je green
cmp al,'b'
je blue
jmp short sret
red: shl ah,1
green: shl ah,1
blue: mov bx,0B800H
mov es,bx
mov bx,1
mov cx,2000
s: and byte ptr es:[bx],11111000B
or es:[bx],ah
add bx,2
loop s
sret: mov ax,4c00H
int 21H
code ends
end start
代码说明
输入 r 时,
指令会从标号 red 开始执行
执行完 shl ah,1
之后会接着从green标号开始执行
又是一句 shl ah,1
由于 ah = 0000 0001 H
经过两次 左移 变成 ah = 0000 0100 H
颜色属性按照
颜色 闪烁 R G B 高亮 R G B
ah = 0 0 0 0 0 1 0 0
从而完成前景色设置为 红色
BIOS int 16H 0 号中断例程
- (1)检测键盘缓冲区中是否有数据;
- (2)如果则继续做第(1)步;
- (3)读取缓冲区的第一个字单元中的键盘输入;
- (4)将读取的扫描码送入ah,ASCII码送入al;
- (5)将已读取的键盘输入从缓冲区中删除。