贺利坚老师汇编课程73笔记:键盘输入的处理过程
- 指路老师的博客
- 键盘的每一个键相当于一个开关,键盘中有一个芯片对键盘的每一个键的开关状态进行扫描
- 按下一个键的操作
- 开关接通,该芯片就产生了一个扫描码,扫描码说明按下的键在键盘的位置
- 扫描码被送入主板的相关接口芯片的寄存器中,该寄存器的端口地址为60H
- 松开按下的键时的操作
- 产生一个扫描码,扫描码说明了松开的键在键盘的位置
- 松开按键时产生的扫描码也被送入60H端口号中
- 扫描码——长度为一个字节的编码
- 按下一个单间产生的扫描码——通码,通码第七位为0
- 松开一个按键时产生的扫描码——断码,断码第七位为1
- g键的通码为22H断码为A2H
- 通码 + 80H = 断码
- 字符键,控制键,切换键
- 引发9号中断
- 键盘输入到达60H端口时,相关的芯片就会向CPU发出中断类型码为9的可屏蔽中断信息
- CPU检测到该中断信息后如果IF = 1则响应中断引发中断过程转去执行int 9中断例程
- 执行int 9中断例程
- 输入的字符键值如何保存
- 有 BIOS键盘缓冲区
- BIOS键盘缓冲区:是系统启动后,BIOS用于存放int 9中断例程所接收的键盘输入内存区
- 可以存储15个键盘输入,一个键盘输入用一个字单元存放,高位字节放扫描码,低位字节放字符码ASC
- 输入控制键和切换键
- BIOS提供中提供的处理键盘码输入的int 9中断例程处理工作
- 读出60H端口中的扫描码
- 根据扫描码分情况对待
- 如果是字符键的扫描码,将扫描码和它对应的字符码送如内存BIOS键盘缓冲区
- 如果是控制键(ctrl)和切换键(capslock)的扫描码则将其转变为状态字节(用二进制位记录控制键和切换键状态的字节)写入内存单元存储状态字节的单元
- 键盘输入的处理过程
- 检测中断码
- 1E送入到数据缓冲区
- 检测中断码
- 通过查表得到61放入数据缓冲区
- 送到键盘缓冲区
- 送到键盘缓冲区
贺利坚老师汇编课程73笔记:键盘输入的处理过程相关推荐
- 贺利坚老师汇编课程40笔记:指令里的数据在哪里有多长
指路老师的博客 汇编中数据位置的表达 立即数 寄存器 内存:段地址SA+偏移地址EA 指令处理数据长度 字操作WORD16位 字节操作BYTE8位 用word ptr或byte ptr指明 示例 操作 ...
- 贺利坚老师汇编课程28笔记:使用附加段寄存器ES进行拷贝
指路老师的博客链接 将内存FFFF:0 ~ FFFF:B中的数据拷贝到0:200~0:20b单元中 段地址每循环一次变一次的初始方案 ;初始方案 ASSUME CS:CODE CODE SEGMENT ...
- 贺利坚老师汇编课程70笔记:端口的读写
指路老师的博客 端口对应外部设备 发声程序 assume cs:codecode segment start:mov al,08h;设置声音频率out 42h,alout 42h,alin al,61 ...
- 贺利坚老师汇编课程66笔记:自定义除法中断学习如何编制中断程序
指路老师的博客 CPU随时可能检测中断信息,所以中断程序常驻内存(一直存储在内存的某段空间中) 中断处理程序的入口地址,即中断向量,必须存储在中断向量表的表项中 (0000:0000 - 0000:0 ...
- 贺利坚老师汇编课程61笔记:操作显存数据即在屏幕上显示
指路老师的博客 屏幕上内容 = 显存数据 B8000H~BFFFFH共32K空间时80 * 25(25行80列)彩色字符模式,第0页的显示缓冲区 编程序在屏幕的中间,白底蓝字,显示"Welc ...
- 贺利坚老师汇编课程60笔记:逻辑移位指令shl和shr
指路老师的博客 逻辑左移 SHL OPR,CNT 将OPR逻辑左移CNT位 将寄存器或内存单元中的数据向左移位 将最后移出的一位写入CF 最低位用0补充 移动位数大于1时必须用CL MOV AL,01 ...
- 贺利坚老师汇编课程57笔记:CMP和JXXX配合实现条件转移指令if
指路老师的博客 实现分支程序设计 套路 CMP OPER1,OPER2;或者其他影响标志寄存器的指令 JXXX 标号 恐惧 JXXX系列指令和CMP指令配合,构造条件转移指令 不必考虑CMP指令对相关 ...
- 贺利坚老师汇编课程56笔记:CMP指令
指路老师的博客 CMP 操作对象1,操作对象2;计算操作对象1-操作对象2 CMP是比较指令,功能相当于减法指令,只是不保存结果 CMP指令执行后,将对标志寄存器产生影响 其他指令通过识别这些被影响的 ...
- 贺利坚老师汇编课程55笔记:带借位减法指令SBB
指路老师的博客 SBB是带借位的减法格式,利用CF位上记录的借位值 SBB AX,BX;(AX) = (AX)-(BX)-CF 对任意大的数进行减法运算 003E 1000H - 0020 2000H ...
最新文章
- 【读书笔记】iOS-属性列表
- .NET Core 下使用 RabbitMQ
- 第67课 选择排序 例67.1 《小学生C++编程入门》
- ArcSDE工作机制
- python实战1.0——爬取知乎某问题下的回复
- 文献管理与信息分析_全球酒店PMS行业市场现状分析,酒店信息管理全链条的灵魂...
- web服务器、Apache 和 tomcat 的关系
- 简易的Python小游戏
- [硬件技术] 教你如何挑选主板:电脑主板质量好坏的鉴别方法
- 博士申请 | 西湖大学智能无人系统实验室招收空中机器人方向全奖博士生
- 屏幕显示密度dpi_手机屏幕尺寸,分辨率,密度,dpi,dip,px,sp等详解
- 商业模式和盈利模式的区别是什么?
- Ionic3.x 创建项目中的问题-IonIC start myApp tabs
- Oauth 第三方授权登陆 facebook google twitter instagram
- 七夕节 看到很多停止更新的blog 莫名有点淡淡的忧桑
- 设计模式之美读书笔记
- DataX系列8-HdfsWriter介绍
- Camera知识问答
- Windows 网络管理命令
- ACPI相关(10)- Platform Communications Channel
热门文章
- linux ssh客户端乱码,Win10专业版下Open ssh客户端乱码咋办?
- createbitmap 旋转90度_如何旋转的位图90度
- 网页特效offset、client、scroll系列属性的作用
- FFmpeg源代码简单分析:libavdevice的gdigrab
- 最简单的视音频播放示例8:DirectSound播放PCM
- 我的开源项目:FLV封装格式分析器
- linux md5接口,md5-linux_shell(示例代码)
- dbf文件mysql,dbf文件怎么打开?dbf是什么文件?
- python的整除运算_Python3基础 ** 幂运算 // 整除运算
- PowerDesigner导出SQL脚本运行注释出现乱码问题