文档章节

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

Cobbage
 Cobbage
发布于 2013/12/30 14:59
字数 343
阅读 62
收藏 0
点赞 0
评论 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

粉丝 46
博文 118
码字总数 64123
作品 0
闵行
QA/测试工程师
Linux insides笔记(三)

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

yyliu ⋅ 2015/08/30 ⋅ 0

进入保护模式(八)简单OS内存使用分布

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

Cobbage ⋅ 2013/12/29 ⋅ 0

进入保护模式(六)保护模式下中断的安装

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

Cobbage ⋅ 2013/12/24 ⋅ 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

启动电脑时报警声全攻略

当打开电脑时,听到的不是平时清脆的启动声,而是一次又一次重复的奇怪的报警声时,或面对着不 同BIOS的报警声,你能不能马上判断出故障的所在呢?虽然现在多家厂商都设计出一些智能化的功能...

LiShixi ⋅ 2011/11/03 ⋅ 0

进入保护模式(十一)异常的处理

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

Cobbage ⋅ 2014/01/02 ⋅ 0

不是说在进入保护模式后不会用Bois中断 为什么linux0.11中在刚要进入模式时却重设BIOS中断

linux0.11中setup.S 都要进入保护模式了 也就是BIOS中断马上不要用了 为什么还要重设中断 mov al,#0x11 ! initialization sequence 表示中断请求边沿触发,多片级联并且租后需要发送ICW4 out ...

郎里个郎里个郎 ⋅ 2014/04/13 ⋅ 1

Linux 系统启动过程分析

美丽的开端是成功的一半,慢慢开始我的享受之路->kernel。 Linux启动流程: 1.BIOS(基本输入输出系统)启动 它的主要任务是提供CPU所需的启动指令,是预先编译好了供系统启动使用的启动程序...

8yi少女的夢 ⋅ 2017/09/06 ⋅ 0

系统引导过程总体介绍

系统引导过程主要由以下几个步骤组成(以硬盘启动为例) 1、开机; 2、 BIOS加电自检(POST——Power On Self Test),包括检查RAM,keyboard,显示器,软硬磁盘等等。Intel系列的CPU首先进入...

AlphaJay ⋅ 2010/06/03 ⋅ 0

一起学mini2440裸机开发(九)--ARM中断控制系统

ARM处理器程序的执行流程种类 ●正常执行:每执行一条ARM指令,程序计数器PC的值自动加4。这一过程描述了应用程序顺序执行的状态。 ●跳转执行:通过B、BL跳转执行,实现程序在一定范围内的跳...

长平狐 ⋅ 2013/06/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用SQL命令查看Mysql数据库大小

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2、查询所有数据的大小: select concat(round(sum(da...

源哥L ⋅ 18分钟前 ⋅ 0

两个小实验简单介绍@Scope("prototype")

实验一 首先有如下代码(其中@RestController的作用相当于@Controller+@Responsebody,可忽略) @RestController//@Scope("prototype")public class TestController { @RequestMap...

kalnkaya ⋅ 23分钟前 ⋅ 0

php-fpm的pool&php-fpm慢执行日志&open_basedir&php-fpm进程管理

12.21 php-fpm的pool pool是PHP-fpm的资源池,如果多个站点共用一个pool,则可能造成资源池中的资源耗尽,最终访问网站时出现502。 为了解决上述问题,我们可以配置多个pool,不同的站点使用...

影夜Linux ⋅ 32分钟前 ⋅ 0

微服务 WildFly Swarm 管理

Expose Application Metrics and Information 要公开关于我们的微服务的有用信息,我们需要做的就是将监视器模块添加到我们的pom.xml中: 这将使在管理和监视功能得到实现。从监控角度来看,...

woshixin ⋅ 32分钟前 ⋅ 0

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 33分钟前 ⋅ 0

React Native & Weex 区别

JS引擎 Weex使用V8, React native使用JSCore JS开发框架 ( Js Framework ) Weex基于vue.js(2W+ star)。小巧轻量的前端开发框架,组件化,数据绑定,2.0引入virtual dom。 ReactNative使用...

东东笔记 ⋅ 42分钟前 ⋅ 1

UIkit 分页组件动态加载简单实现

1. 问题描述 使用过UIkit分页组件的都清楚,UIkit的分页不能动态刷新数据,也就是不能在点击下一页的时候,动态从后台加载数据,并且刷新页数以及该页数上的数据,下面是一个简单实现,没有做...

影狼 ⋅ 42分钟前 ⋅ 0

Mobx入门之三:Provider && inject

上一节中<App/>组件传递状态temperatures给children -- <TemperatureInput />,如果组建是一个tree, 那么属性的传递则会非常繁琐。redux使用Provider给子组件提供store, connect将子组件和s...

pengqinmm ⋅ 44分钟前 ⋅ 0

魔兽世界 7.0版本 S23/S24/S25全职业普通+精锐套

  死亡骑士   (联盟)   (部落)   (精锐)   恶魔猎手   (联盟)   (部落)   (精锐)   德鲁伊   (联盟)   (部落)   (精锐)   猎人   (联盟) ...

wangchen1999 ⋅ 52分钟前 ⋅ 0

maven顶级pom和子pom的版本号批量修改

当一个版本发布,新起一个版本时,我们只需要手动修改一下项目中pom.xml的版本号就可以了。但是如果这个maven项目有很多的子模块项目,那么一个个手动的去改就显得费时费力又繁琐了。还好,m...

ArlenXu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部