汇编语言_使用int16h中断读取键盘缓冲区

利用int 16h读取键盘缓冲区,int16的使用方法如下:

mov ah,0
int 16h

结果:ah=扫描码,al=ASCII码
调用int16h中断检测到键盘缓冲区后,发现缓冲区空,则循环等待,知道缓冲区中有数据;如果缓冲区满,则覆盖掉之前的数据。
本实验就是利用了16中断检测缓冲区空不断读取的特性,完成了从缓冲区读取一个字符,并作出判断,根据是否符合条件来改变屏幕的颜色值。代码如下:

assume cs:code,ss:stack,ds:data
data segment
		db 128 dup(0)
data ends	

stack segment stack
		db 128 dup(0)
stack ends

code segment
start:
		mov ax,stack
		mov ss,ax
		mov sp,128
		
		call get_color
		
		
		mov ax,4c00h
		int 21h
get_color:
		mov ah,0
		int 16h
		
		mov ah,1
		cmp al,'r'	
		je red
		
		cmp al,'g'
		je green	
		
		cmp al,'b'
		je blue
		
		jmp get_color
		
		ret
		
red:
		shl ah,1
green:	shl ah,1

blue:
		mov bx,0b800h
		mov es,bx
		mov bx,1
		
		mov cx,2000
setColor:
		and byte ptr es:[bx],11111000b
		or es:[bx],ah
		add bx,2
		loop setColor
		
		jmp get_color
getColorRet:		
		mov ax,4c00h
		int 21h
;;===================================
code ends
end start

按下r键,效果如下:
在这里插入图片描述
按下g键,效果如下
在这里插入图片描述

按下b键,效果如下
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值