8086PC机当中,键盘的输入将会引发9号中断,BIOS提供了int 9的中断例程。CPU在9号中断发生之后,会去执行int 9中断例程,然后从60h端口当中读取出扫描码,并且将其转换为相应的ASCII码和状态信息,存储在内存的指定的空间(键盘缓冲区或状态字节)当中

一般的键盘输入,在CPU执行完int 9 中断例程之后都放到了键盘缓冲区当中,键盘缓冲区有16个字单元,可以存储15个按键扫描码和对应的ASCII码,这里之所以只能放15个是因为键盘缓冲区是用环形队列结构管理的内存区域,虽然缓冲区的本身长度为16个字,但出于判断“对列满”的考虑,它最多只能保存15个键盘信息。

环形队列的关键是判断队列为空,还是为满。当tail追上head时,队列为满时,当head追上tail时,队列为空。要知道是满还是空,可以根据下面的方法来判断

  • 1、添加一个标志位tag
    当head赶上tail,队列空,则令tag=0
    当tail赶上head,队列满,则令tag=1

  • 2、限制tail赶上head,即队尾结点与队首结点之间至少留有一个元素的空间
    队列空: head==tail
    队列满: (tail+1)% MAXN ==head

上面提到了我们使用shift+A的时候,其实输出到屏幕的是大写字母A,我在Mac下面试验也是一样的,说明其实大致的机制都是差不多的


程序如下所示

assume cs:codecode segment
start:mov ah,0int 16hmov ah,1cmp al,'r' ;要是输入的是r,就跳到Red处je redcmp al,'g' ;如果输入的是g,那么就跳到green处je greencmp al,'b' ;如果输入的是b,那么就跳到blue处je bluejmp short sretred: shl ah,1
green: shl  ah,1
blue:mov bx,0b800h ;设置要改变的字符地址处mov es,bxmov bx,1mov cx,2000s:and byte ptr es:[bx],11111000b ;要改变的是第0、1、2位or es:[bx],ahadd bx,2loop ssret:mov ax,4c00hint 21hcode ends
end start

执行结果如下所示

int 9和int 16h中断-键盘输入、读取相关推荐

  1. 6.S081-7中断(键盘输入+屏幕输出) - Interrupts

    6.S081-7中断(输入输出) - Interrupts 文章目录 6.S081-7中断(输入输出) - Interrupts 本节课的主要内容: 仔细越读以下内容,将会对理解接下来的课程有帮助: ...

  2. 汇编语言随笔(15)- 对键盘输入进行处理(int 9 和 int 16h 中断例程)

    键盘输入 1,前面讲过, int 9 中断例程负责对键盘输入进行处理,具体为:从 60h 端口读出扫描码,并将其转化为相应的ASCII码或状态信息,一起存储到内存的指定空间(键盘缓冲区或状态字节)中. ...

  3. 贺利坚老师汇编课程73笔记:键盘输入的处理过程

    指路老师的博客 键盘的每一个键相当于一个开关,键盘中有一个芯片对键盘的每一个键的开关状态进行扫描 按下一个键的操作 开关接通,该芯片就产生了一个扫描码,扫描码说明按下的键在键盘的位置 扫描码被送入主板 ...

  4. 校招小白机考入坑之从键盘输入java的各种数据类型

    //1.从键盘输入一个整型(其他基本类型类似) Scanner sc =new Scanner(System.in); sc.hasNextInt(); int str1 = sc.nextInt() ...

  5. C语言程序设计第三版苏小红5.7键盘输入字符,字母大写改小写,小写改大写,并输出ASCII码

    #include<stdio.h> int main() { char ch; printf("从键盘输入一个字符:\n"); ch=getchar(); if(ch& ...

  6. python键盘输入数组_python 二维数组切割Python读取键盘输入的2种方法

    Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.如下: 1.raw_input 2.input raw_input函数raw_input() 函数从标准输入读取一个行,并返 ...

  7. python二维数组换行输出_python 二维数组切割Python读取键盘输入的2种方法

    Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.如下: 1.raw_input 2.input raw_input函数raw_input() 函数从标准输入读取一个行,并返 ...

  8. python获取键盘输入_python之判断数据异常Python读取键盘输入

    Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.如下: <python之判断数据异常Python读取键盘输入>总结了关于python网站教程,对于我们来www. ...

  9. 键盘I/O中断调用(INT 16H)和常见的int 17H、int 1A H

    说明:下文为转载的,下文中的"扩展码"其实就是"扫描码(scan code)"的意思 键盘扫描码:是每个键盘生产厂家为自己所生产的键盘设置的扫面方式,目的检测是 ...

最新文章

  1. cmd做个定时弹窗_揭秘200元山寨苹果耳机!一颗耳边的“定时炸弹”...
  2. esp32 micropython spiffs_二十一,ESP32 SPIFFS:读取一个文件
  3. 练习2: Python基本图形绘制 (第2周)
  4. 历届奥运会中国金牌数
  5. 技术干货|如何在企业内部实现云信私有化?
  6. Java客户端操作elasticsearch--创建索引(集群模式下)
  7. 数据采集录入填报时如何只更新当前修改行
  8. python-虚拟环境操作指令-centos环境下
  9. 模型秒变API只需一行代码,支持TensorFlow等框架
  10. 解决Gerrit的git unpack error问题
  11. 3767(按姓名排序)
  12. 2020 APP批量头像,高质量严选真实用户头像
  13. 男生的长相到底有多重要?
  14. vga焊接线顺序_VGA线的焊接方法,15线与7线分别如何焊接?
  15. 腾讯云实验室 Gitea 互动教程上线啦
  16. 微信查好友单删检测方法,无打扰,快来学
  17. 分享50个优秀的电子商务网站设计案例
  18. 手机卫星定位系统_手机一键“连接”北斗卫星导航?这一设置打开:立马连接,很简单...
  19. 关于学习的过程:痛并快乐着是一种收获
  20. Stroke:脑白质微结构完整性可预测脑卒中预后功能恢复情况

热门文章

  1. EL表达式和JSTL标签:简化JSP的Java代码
  2. 学编程为什么要学数据结构?
  3. 2020JCIM | ChemGrapher+:Optical Graph Recognition of Chemical Compoundsby Deep Learning
  4. 逻辑回归_sigmod函数
  5. 计时器(视频的计时:时间码)
  6. ffmpeg c++ vs2017 将pcm转mp3格式
  7. centos7 部署pbootcms nginx php-fpm php
  8. python-numpy库
  9. c++ 哥德巴赫猜想
  10. 2021第六届GPLT 团体程序设计天梯赛CCCC 个人题解