|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 我就是传奇 于 2012-11-27 14:25 编辑
键盘的外中断,书上是这样写的:
键盘的输入到达60h端口时,相关的芯片就会向cpu发出中断类型码为9的可屏蔽中断信息。
cpu检测到该中断信息后,如果IF=1,则相应中断,引发中断过程,转去执行int 9中断例程。
BIOS提供int 9中断例程,用来进行基本的键盘输入处理,主要的工作如下:
(1) 读出60h端口中的扫描码;
(2) 如果是字符键的扫描码,将该扫描码和它所对应的字符码(即ASCII码)送入内存中的BIOS键盘缓冲区。
如果是控制键(比如ctrl)和切换键(比如 caislock)的扫描码,则将其转变为状态字节存储在内存中存储状态字节的单元;
(3) 对键盘系统进行相关的控制,比如说,向相关芯片发出应答信息。
BIOS键盘缓冲区是系统启动后,BIOS用于存放int 9中断例程所接收的键盘输入的内存区。
该内存区可以存储15个键盘输入,因为int 9 中断例程除了接收扫描码外,还要产生和扫描码对应的字符码,
所以在BIOS键盘缓冲区中,一个键盘输入用一个字单元存放,高位字节存放扫描码,低位字节存放字符码。
编写新的int9中断例程时,第一步中,我们用: in al,60h 即 al中存放着按键时的扫描码
问题1:既然al中存放有扫描码,为什么我们不直接进行 cmp al,1进行判断是否为ESC键,而要调用以前的int 9呢
当然这样做是不行的,我在屏幕上显示的是个符号,并不是扫描码01.希望知道的朋友帮忙解答一下。
我们调用完以前的int 9中断例程后,进行了cmp al,1比较。
问题2:我们调用完以前的int 9后,因为端口信息都是通过al或ax存放或传送的,所以BIOS缓冲区中存放有我们按键
的扫描码和字符码,高位字节存放扫描码,低位字节存放字符码。
如果这样,为什么不是cmp ah,1而是 cmp al,1呢?毕竟高位字节存放扫描码,低位字节存放字符码。求解释
当然我用cmp ah,1试过,结果是不行的,可是我是按照书上说的原理想的啊,为什么就错了呢?
|
|