CPU如何读取键盘传过来的数据--OS

键盘

键盘是如何与操作系统交互的?

在显示器那一节,我们说过,CPU使用外设就是向外设写入一条指令,然后中断处理,中断处理就在键盘这一篇里,我们每按下一次键盘,就相当与向CPU发起一次中断

我们从键盘中断开始,看一下键盘中断的初始化

void con_init(void)
{
    set_trap_gate(0x21, &keyboard_interrupt);
}
//在kernel/chr_drv/keyboard.s中
.global _keyboard_interrupt
_keyboard_interrupt:
    inb $0x60, %al  
    //从端口0x60读扫描码,inb表示读入一个字节,扫描码(每一个按键对应一个码)
    call key_table(,%eax,4) //调用keyboard+eax*4,根据不同的按键调用不同的函数
    ...
    push $0
    call _do_tty_interrupt 

处理扫描码key_table+eax*4

key_table是一个函数数组

在kernel/chr_drv/keyboard.s中
key_table:
    .long none,do_self,so_self,do_self  //扫描码00-03
    .long do_self,...,func,scroll,cursor 等

mode: .byte 0
do_self:
    lea alt_map, %ebx
    testb $0x20, mode //alt键是否同时按下   jne 1f
    lea shift_map, %ebx testb $0x03, mode  jne 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值