(三十)《汇编语言(王爽)》 | 检测点 17.1


1. 预备知识

  • 一般的键盘输入,在 CPU 执行完 int 9 中断例程后,都放到了键盘缓冲区。键盘缓冲区中有 16 个字单元,可以存储 15 个按键的扫描码和对应的 ASCII 码。
  • BIOS 提供了 int 16h 中断例程供程序员调用,其中包含的一个重要功能是从键盘缓冲区读取一个键盘输入,该功能的编号为 0。从缓冲区读取一个键盘输入,并将其删除;如果键盘缓冲区为空,则循环等待,直到缓冲区中有数据。
mov ah,0
int 16h
;(ah)=扫描码,(al)=ASCII码

如,编程接收用户的键盘输入,输入 r 将屏幕上的字符设置为红色;输入 g 将屏幕上的字符设置为绿色;输入 b 将屏幕上的字符设置为蓝色。

assume cs:code
code segment
start:
	mov ah,0
	int 16h		
	;调用16h中断例程的0号功能从键盘缓冲区读取数据,如果为空则循环等待
	mov ah,1
	;最后三位依次为RGB
	cmp al,'r'
	je red
	cmp al,'g'
	je green
	cmp al,'b'
	je blue
	jmp short sret
;移动一位AH,对应于G
red:
	shl ah,1
;移动两位AH,对应于R
green:
	shl ah,1
;不移动AH,对应于B
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:

请添加图片描述

输入 g:

请添加图片描述

输入 b:

请添加图片描述


2. 检测点 17.1

在 int 16h 中断例程中,一定有设置 IF=1 的指令。这种说法对吗?

  • IF 用于确定 CPU 是否响应可屏蔽中断,IF=1 时响应中断,IF=0 时不响应中断。
  • 当键盘缓冲区为空时,16h 中断例程循环等待,直到缓冲区中有数据。此时,如果键盘输入数据,则会调用 9h 中断将键盘数据写入键盘缓冲区。此时,需设置 IF=1 响应可屏蔽中断 9h。所以,这种说法正确。

3. 总结

  • 一般的键盘输入,在 CPU 执行完 int 9 中断例程后,都放到了键盘缓冲区。
  • BIOS 提供了 int 16h 中断例程供程序员调用,其中包含的一个重要功能是从键盘缓冲区读取一个键盘输入,该功能的编号为 0。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值