说明:下文为转载的,下文中的“扩展码”其实就是“扫描码(scan code)”的意思
键盘扫描码:是每个键盘生产厂家为自己所生产的键盘设置的扫面方式,目的检测是那个键被按下。扫描码 是键盘对应按键的编码 (有关扫描码,具体可参考它)

键盘I/O中断调用有三个功能,功能号为0, 1, 2,且必须把功能号放在AH中。
(1)0号功能调用 格式:MOV AH, 0
INT 16H
功能:从键盘读入字符送AL寄存器。执行时,等待键盘输入,一旦输入,字符的ASCII码放入AL中。若AL=0,则AH为输入的扩展码。
(esc键的ascii码十进制表示为27,二进制表示为0001 1011,十六进制表示为1B) cmp al,1bh ;可以判断刚才输入的字符是否是escape

(2)1号功能调用

格式:MOV AH, 01H

INT 16H

功能:用来查询键盘缓冲区,对键盘扫描但不等待,并设置ZF标志。若有按键操作(即键盘缓冲区不空),则ZF=0,AL中存放的是输入的ASCII码,AH中存放输入字符的扩展码。若无键按下,则标志位ZF=1。

(3)2号功能调用

格式: MOV AH, 02H

INT 16H

功能:检查键盘上各特殊功能键的状态。执行后,各种特殊功能键的状态放入AL寄存器中,

这个状态字记录在内存0040H:0017H单元中,若对应位为“1”,表示该键状态为“ON”,处于按下状态;若对应位为“0”,表示该键状态为“OFF”,处于断开状态。

【例4.46】

MOV AH, 02H

INT 16H ; 取键盘状态到AL中

AND AL, 0000 0100B ; 检查Ctrl键是否按下

JNZ CTRL-ON

CTRL-ON: …

检查Ctrl键是否按下,若按下,则控制转移到某个程序段执行

下面这个可能更加清楚一点儿(来源:https://bbs.csdn.net/topics/320108074?lis):

键盘服务(Keyboard Service——INT 16H)

00H、10H —从键盘读入字符03H —设置重复率
01H、11H —读取键盘状态04H —设置键盘点击
02H, 12H —读取键盘标志05H —字符及其扫描码进栈
(1)、功能00H和10H
功能描述:从键盘读入字符
入口参数:
AH=00H——读键盘
=10H——读扩展键盘,可根据0000:0496H单元的内容判断:扩展键盘是否有效
出口参数:AH=键盘的扫描码
AL=字符的ASCII码
(2)、功能01H和11H
功能描述:读取键盘状态
入口参数:AH=01H——检查普通键盘
=11H——检查扩展键盘
出口参数:ZF=1——无字符输入,否则,AH=键盘的扫描码,AL=ASCII码。
(3)、功能02H和12H
功能描述:读取键盘标志
入口参数:AH=02H——普通键盘的移位标志
=12H——扩展键盘的移位标志
出口参数:AL=键盘标志(02H和12H都有效),其各位之值为1时的含义如下: 位7—INS开状态位3—ALT键按下
位6—CAPS LOCK开状态位2—CTRL键按下
位5—NUM LOCK开状态位1—左SHIFT键按下
位4—SCROLL LOCK开状态位0—右SHIFT键按下
AH=扩展键盘的标志(12H有效),其各位之值为1时的含义如下:
位7—SysReq键按下位3—右ALT键按下
位6—CAPS LOCK键按下位2—右CTRL键按下
位5—NUM LOCK键按下位1—左ALT键按下
位4—SCROLL键按下位0—左CTRL键按下
(4)、功能03H
功能描述:设置重复率
入口参数:AH=03H 对于PC/AT和PS/2:AL=05H
BH=重复延迟
BL=重复率
对于PCjr:AL=00H——装入缺省的速率和延迟
=01H——增加初始延迟
=02H——重复频率降低一半
=03H——增加延迟和降低一半重复频率
=04H——关闭键盘重复功能
出口参数:无
(5)、功能04H
功能描述:设置键盘点击
入口参数:AH=04H AL=00H——关闭键盘点击功能
=01H——打开键盘点击功能
出口参数:无

(下面来源:http://blog.sina.com.cn/s/blog_658c0c230100mxl0.html)

BIOS中断 INT 17H, INT 16H ,INT 1AH

1、INT 17H(打印机I/O调用)
  INT 17H中断处理程序有三个功能:
  当AH=0时,把AL中的字符在打印机上打印出来。
  当AH=1时,把AL中的初始化控制命令送给打印机。
  当AH=2时,把打印机的状态读至AL寄存器。

D7
D6
D5
D4
D3
D2
D1
D0
确认
有纸
联机
错误
\
\
超时
寄存器AH中的值决定一个中断处理程序的功能,称其为"功能号"。当AH=0时调用INT 17H中断,称为"INT 17H的0号功能",可以简记为"INT 17H/0"
2、INT 16H(键盘I/O中断)
  AH=0:从键盘读入ASCII字符,放在AL中。
  AH=1:测试有无键被按下。ZF=0,表示按过任意键,并在AL中获得该键的ASCII码。ZF=1,未按过键。
  AH=2:读取特殊功能键的状态至AL中。
D7
D6
D5
D4
D3
D2
D1
D0
Ins
CapsLock
NumLock
ScrollLock
Alt
Ctrl
左Shift
右Shift

3、 INT 1AH (BIOS日期、时间中断)
  AH=0:读当前时钟值到CX、DX中。CX为高位,DX为低位。时钟单位是54.9ms(1/18.2秒)(65536000/1193180)。

AH=1:设置当前时钟值。

键盘I/O中断调用(INT 16H)和常见的int 17H、int 1A H相关推荐

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

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

  2. 保护模式下C语言编程,关于windows ring3保护模式与中断调用

    关于windows ring3保护模式与中断调用 最近发现了一个问题,就是进行某些中断调用时,并不如想象中的那样执行. 比如一个简单的ROM BASIC调用,我的机器(XP系统)弹出一个对话框:NTV ...

  3. FreeRTOS | STM32H7串口中断调用FreeRTOS API,导致程序卡死

    文章目录 一.前言 二.串口中断调用xQueueSendFromISR 2.1.串口中断回调函数(usart.c) 2.2.stm32h7xx_it.c 三.调试 3.1.串口中断后,程序卡死 3.2 ...

  4. 键盘录入一个长方形的长和宽(长和宽为int类型),计算长方形的面积和周长

    package zuoye;import java.util.Scanner;public class Test4 {public static void main(String[] args) {/ ...

  5. Android 自定义软键盘实现 数字九宫格,2021年Android常见面试题目

    实现效果GIF 实现代码 自定义View 一个NineNumericKeyboardView /** Author by Lyu Date on 2021/5/26-19:55 Description ...

  6. java程序a-z b-y_以下程序的运行结果是( ) main( ) { int a=-5,b=1,c=1; int x=0,y=2,z=0; if(c0) x=x+y; if(a=0) {...

    [填空题]有以下程序段: s=1.0; for(k=1; k<=n; k++) s=s+1.0/(k*(k+1)); printf("%f\\n",s); 请填空,使下面的程 ...

  7. php中int()强制转换,php下intval()和int强制转换使用的区别是什么

    php下intval()和int强制转换使用的区别是:1.[intval()]如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值:2.转换为int的PHP字符串,在使用之前 ...

  8. python中int是什么的缩写_python中int是什么类型

    python中的基本数据类型 1:虽然python中的变量不需要声明,但使用时必须赋值 整形变量 浮点型变量 字符型 2:可以一个给多个变量赋值,也可以多个给多个变量赋值 3:python3中有6个标 ...

  9. mysql的int多少溢出_mysql 整型(int)数字溢出在程序和数据库设计中的考虑

    以下试以整型(int)抛砖引玉: 一:MySQL5 以MySQL5版本为例,大多数管理员可能把自增数字.或者其它应用数字字段的列属性设置为int类型,int占用4个字节,而int又分为无符号型和有符号 ...

最新文章

  1. 2018年这些UI设计趋势正在流行,跟上必拿高薪!
  2. 【数据库系统概论】考研第三部分重点分析【3.1】
  3. Web前端技术分享:学习HTML和CSS的5大理由
  4. 架空输电线路运行规程_架空输电线路通道与环境隐患、缺陷及故障图文初识
  5. php array_key_exists() 与 isset() 的区别
  6. C语言之内存管理初探:栈和堆、malloc、calloc、realloc、free
  7. LintCode 寻找旋转排序数组中的最小值 II
  8. 银保监会:防范以“元宇宙”名义进行的非法集资 | 产业区块链发展周报
  9. 如何更改iPhone备份和iTunes MobileSync备份文件夹的位置
  10. 创建视图,修改视图,修改视图数据
  11. 【system】关掉\禁用win7自动配置ipv4地址的方法 默认网关自动消失的解决办法
  12. 一文读懂PRBS定义、生成办法、作用
  13. 23_ElsaticSearch 搜索推荐ngram分词机制实现index-time
  14. Layui数据表格分页通过两种方法实现
  15. Win7 扩充C盘容量
  16. 网络游戏外挂制作(3)-1
  17. sfc /scannow扫描修复系统文件命令怎么用_马立杰_新浪博客
  18. excel打印宏_使用Excel宏打印发票
  19. 4.5年常见面试题5(法本-麦当劳1/2)
  20. matlab 自定义的snr,Matlab信号添加噪声及信噪比SNR的计算

热门文章

  1. 2009 年 3月 二级 java
  2. 帝国cms栏目忘记设置为终极栏目怎么办?
  3. python学习笔记(四)、条件、循环及其他语句
  4. [School Life - Study] 有哪些每天坚持效果显著的高中学习习惯?
  5. JS浮点数运算Bug的解决办法
  6. windows下java环境搭建
  7. 8.腾讯微博Android客户端开发——自动获取验证码(2)
  8. 5年後、10年後の自分のイメージ
  9. haproxy keepalived_详解mycat+haproxy+keepalived搭建高可用负载均衡mysql集群
  10. 【Android Gradle 插件】Extension 扩展类型 ( Module 引入插件类型 | application 插件 | library 插件 | Variants 变体列表 )