说明:下文为转载的,下文中的“扩展码”其实就是“扫描码(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. iOS 一些基础的方法
  2. 自编码AutoEncoder 及PyTorch 实现
  3. Jenkins集成java非maven/ant项目的打包思路
  4. SpringCloud学习(八)消息总线(Spring Cloud Bus)(Finchley版本)
  5. Lotus中关于字符串处理的函数汇总
  6. 年底双薪一般是什么时候发_评职称发表文章一般发什么刊物
  7. Java16-java语法基础——异常
  8. WIN10 如何修改 文件后缀名 设置后缀名可修改
  9. KaTeX parse error: No such environment: align
  10. Android音量设置流程干货版
  11. 创建表时参数PCTFREE和PCTUSED是什么意思?
  12. 【图像隐写】基于matlab GUI DWT+DCT+PBFO改进图像水印隐藏提取【含Matlab源码 081期】
  13. cad插入块_「AutoCAD之属性块」别怕难,从零做起,制作属性块只需6步走
  14. 方舟生存计划怎么删除服务器信息,方舟进化生存怎么删服务器存档
  15. UWB人员定位解决方案
  16. 腾讯云:开发者实验室
  17. hdu1166 敌兵布阵(模板题 单点修改 + 区间查询)
  18. 巨好用的数学公式编辑器安装教程
  19. 前端js是什么意思?
  20. 小程序云开发学习笔记(二)

热门文章

  1. 从人的角度分析进销存管理的需求
  2. 【bzoj 4059】Non-boring sequences
  3. 01 Python基础学习
  4. 第二次团队作业-需求分析
  5. 4923: [Lydsy1706月赛]K小值查询 平衡树 非旋转Treap
  6. JavsScript--on与addEventListener的使用与两者的不同
  7. js 加alert后才能执行方法
  8. oracle用户创建及权限设置
  9. Modern C++ Design 学习笔记-第3章
  10. mysql迁移导致数据库效率低_MySQL数据库慢–排查问题总结(整理自《抽丝剥茧之MySQL疑难杂症排查》叶金荣)...