王爽 《汇编语言》 读书笔记 十七

本文是《汇编语言》第十七章的读书笔记,重点介绍了如何使用BIOS的中断例程进行键盘输入和磁盘读写。通过int 16h中断读取键盘缓冲区,实现字符颜色切换功能,并讨论了IF标志位在中断处理中的作用。同时,探讨了基本字符串输入程序的需求和int 13h中断例程用于磁盘读写的方法,包括磁盘结构和扇区读写的实现。最后,设计了一个新的中断例程用于通过逻辑扇区号读写软盘。
摘要由CSDN通过智能技术生成

第十七章 使用BIOS进行键盘输入和磁盘读写


17.1 int9中断例程对键盘输入的处理

一般的键盘输入,在cpu执行完int9中断例程以后,欧放到了键盘缓冲区中。 键盘缓冲区有16个字单元,可以存储15个按键的扫描码和对应的ASCII码。


参照书P300页 关于键盘缓冲区的存储利用了队列或者环形队列数据结构。



17.2 使用int16h中断例程读取键盘缓冲区

int16h 能够从键盘缓冲区读取一个键盘输入, 功能标号为0.

mov ah, 0

int 16h

结果  ah = 扫描码  bl = ascii码

然后该字符从键盘缓冲区被删除


int 16h中断例程检测键盘缓冲区,发现缓冲区为空,则循环等待,直到缓冲区中有数据。


int 16h的中断例程0号功能,进行如下工作

1)检测键盘缓冲区是否有数据

2)没有则继续第一步

3)读取缓冲区第一个字单元的键盘输入

4)将读取的扫描码送入ah, ASCII码送入al

5)将已读取的键盘输入从缓冲区中删除。


编程,接受用户的键盘输入,输入“r” ,将屏幕上的字符设置为红色,输入“g”, 将屏幕上的字符设置为绿色

输入“b“ 将屏幕上的字符设置为蓝色。

assume cs:code

code segment
start: 		mov ah, 0
			int 16h
			
			mov ah, 1 ; used to generate the color code
			cmp al, 'r'
			je red
			cmp al, 'g'
			je green
			cmp al, 'b'
			je blue
			jmp short sret
			
	red:	shl ah, 1 ; left shift once
	green:	shl ah, 1 ; left shift once .  if go through red it will generate 100B
	
	blue:	mov bx, 0b800h
			mov es, bx
			mov bx, 1
			mov cx, 2000
	s:		and byte ptr es:[bx], 11111000b ; reset color
			or es:[bx], ah ; set new color
			add bx, 2
			loop s
			
	sret:	mov ax, 4c00h
			int 21h
code ends
end start


监测点17.1

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


不对.

8086CPU的中断系统具有256个中断(0-255),其中分为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值