文档章节

进入保护模式(九)键盘中断的实现

Cobbage
 Cobbage
发布于 2013/12/30 14:59
字数 343
阅读 64
收藏 0

一、每次都写个题记

       我的电脑键盘映射对应第一个:http://www.brokenthorn.com/Resources/OSDevScanCodes.html

            说了好多,其实看不太懂:http://www.brokenthorn.com/Resources/OSDev19.html

       端口操作两个:0x60(数据端口)  0x64(命令端口)

       注意点:1.中段结束EOI发送

                  2.键盘如果不读取内容,是自动添置的,下一次数据填充不进来的

                  3.键盘每次有两次数据的 mark break(过滤掉)

                  4.很蛋疼一点 每次端口读写的时候注意 xor eax,eax

       键盘中断实现步骤1.前面说过的实例化中断对应的中断向量,开启键盘中断

                            2.通过60读取内容,查找对应的数据

                            3.上面的注意点,

                            好了一个简单的键盘中断可以工作了

二、代码

;键盘中断的处理
key_interrupt:
                            pushad
			xor eax,eax
			  
                             mov al,0x20                        ;中断结束命令EOI
                            out 0xa0,al                        ;向8259A从片发送
                                 out 0x20,al
			  
                             mov al,0xAD                        ;关闭键盘
			  out 0x64,al
			  
			  ;获取状态
			  in al,0x64
			  test al,0x01
			  jz .end                            ;结束 输出缓冲区没有内容
			  
			  
			  in al,0x60                         ;读取数据
			  test al,0x80
			  jnz .end
			  
			  mov ecx,eax
                             ;得到数据段的地址
                                  mov eax,core_data_seg_sel
                             mov ds,eax
                             mov ebx,key_map
                             mov byte cl,[ebx+ecx]			  

			  call put_char
			  
        .end:	
                             mov al,0xAE                        ;开启键盘
			  out 0x64,al
			  
			  popad
                             iret

下面是个效果图:

 

© 著作权归作者所有

共有 人打赏支持
Cobbage

Cobbage

粉丝 49
博文 137
码字总数 70528
作品 1
闵行
QA/测试工程师
Linux insides笔记(三)

头不疼鼻子哗哗的 感冒了竟然,宿舍里众人皆感冒一周有余我自岿然不动的神话破灭 伤心 以下正文 程序终于运行到main.c。接着继续配置内核启动环境和参数。 首先把启动参数,就是之前bootloa...

yyliu
2015/08/30
116
0
XV6 - bootsect.S

#include "asm.h" #include "memlayout.h" #include "mmu.h" .code16 .globl start start: cli # 关中断, 防止干扰开启A20, 和保证设置GDT的完整性 # 初始化寄存器 xorw %ax,%ax # 将ax清零,......

Pagination
2014/06/12
0
0
进入保护模式(八)简单OS内存使用分布

1.上次说要实现键盘中断还没实现的 2.接着又有问题了就是对于异常的处理,例如一个也异常的处理 一直在512字节里面写很憋屈,这下把书上的代码用上暂且内存分布如下 慢慢修改了,在更新修改 ...

Cobbage
2013/12/29
0
0
进入保护模式(六)保护模式下中断的安装

一、中断 上篇本来打算先实现个在任务状态运行的例子,但是代码有问题(编译错代码了),任务那部分确实还不是很熟悉; 本篇的目的:1.实现实例化中断的描述符 2.实现时钟中断 对于中断分类暂...

Cobbage
2013/12/24
0
0
进入保护模式(十一)异常的处理

一、中断与异常 看到的最多的是一个是异步一个是同步的,中断被外部打断的,异常是处理过程出错。这里主要说异常有错误码的。 下图是保护模式下的向量表。 纠结一个问题就是进入保护模式下需...

Cobbage
2014/01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

awk命令用法介绍

10月18日任务 9.6/9.7 awk 1.awk(上)(下) 1.awk 分段操作功能 指定分隔符,并把第一段打印出来,不会改动文件内容 将所有内容打印出来 awk 没有指定分隔符号,则会默认用空格或者空白字符...

hhpuppy
31分钟前
0
0
Spring Cloud Eureka Server高可用之:在线扩容

本文共 1591字,阅读大约需要 6分钟 ! 概述 业务微服务化以后,我们要求服务高可用,于是我们可以部署多个相同的服务实例,并引入负载均衡机制。而微服务注册中心作为微服务化系统的重要单元...

CodeSheep
43分钟前
1
0
内网esxi主机上安装CoreOS虚拟机

CoreOS是一个为专门运行容器而设计的轻量级linux发行版,旨在通过轻量的系统架构和灵活的应用程序部署能力简化数据中心的维护成本和复杂度。它没有包管理工具,运行容器化应用以提供服务;默...

hiwill
今天
1
0
20181018 上课截图

![](https://oscimg.oschina.net/oscnet/49f66c08ab8c59a21a3b98889d961672f30.jpg) ![](https://oscimg.oschina.net/oscnet/a61bc2d618b403650dbd4bf68a671fabecb.jpg)......

小丑鱼00
今天
3
0
WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部