首页 > 汇编语言 > 汇编语言MS-Windows编程
阅读:150
汇编语言单字符输入简述
控制台模式下的单字符输入有些复杂。MS-Windows 为当前安装的键盘提供了驱动器。当一个键被按下时,一个 8 位的扫描码 (scan code) 就被传递到计算机的键盘端口。当这个键被释放时,就会传递第二个扫描码。
MS-Windows 利用设备驱动程序将扫描码转换为 16 位的虚拟键码 (virtual-key code),即 MS-Windows 定义的用于标识按键用途的与设备无关数值。MS-Windows 生成含有扫描码、虚拟键码和其他信息的消息。这个消息放在 MS-Windows 消息队列中,并最终进入当前执行程序线程(由控制台输入句柄标识)。
如果想要进一步了解键盘输入过程,请参阅 Platform SDK 文档中的 About Keyboard Input 主题。虚拟键常数列表位于本教程 \Examples\chll 目录下的 VirtualKeys.inc 文件中。
Irvine32 键盘过程 Irvine32 链接库由两个相关过程:
如果 ReadKey 过程中的 AL 等于 0,那么用户可能按下了特殊键(功能键、光标箭头等)。AH 寄存器为键盘扫描码。DX 为虚拟键码,EBX 为键盘控制键状态信息。
下表为控制键值列表。调用 ReadKey 之后,可以用 TEST 指令检查各种键值。
MS-Windows 利用设备驱动程序将扫描码转换为 16 位的虚拟键码 (virtual-key code),即 MS-Windows 定义的用于标识按键用途的与设备无关数值。MS-Windows 生成含有扫描码、虚拟键码和其他信息的消息。这个消息放在 MS-Windows 消息队列中,并最终进入当前执行程序线程(由控制台输入句柄标识)。
如果想要进一步了解键盘输入过程,请参阅 Platform SDK 文档中的 About Keyboard Input 主题。虚拟键常数列表位于本教程 \Examples\chll 目录下的 VirtualKeys.inc 文件中。
Irvine32 键盘过程 Irvine32 链接库由两个相关过程:
- ReadChar:等待键盘输入一个 ASCII 字符,并用 AL 返回该字符。
- ReadKey:过程执行无等待键盘检查。如果控制台输入缓冲区中没有等待的按键,则零标志位置 1。如果发现有按键,则零标志位清零且 AL 等于零或 ASCII 码。EAX 和 EDX 的高 16 位被覆盖。
如果 ReadKey 过程中的 AL 等于 0,那么用户可能按下了特殊键(功能键、光标箭头等)。AH 寄存器为键盘扫描码。DX 为虚拟键码,EBX 为键盘控制键状态信息。
下表为控制键值列表。调用 ReadKey 之后,可以用 TEST 指令检查各种键值。
值 | 含义 | 值 | 含义 |
---|---|---|---|
CAPSLOCK_ON | CAPSLOCK 指示灯亮 | RIGHT_ALT_PRESSED | 右 ALT 键被按下 |
ENHANCED_KEY | 被按下增强的 | RIGHT_CTRL_PRESSED | 右 CTRL 键被按下 |
LEFT_ALT_PRESSED | 该键是左 ALT 键 | SCROLLLOCL_ON | SCROLLLOCK 指示灯亮 |
LEFT_CTRL_PRESSED | 左 CTRL 键被按下 | SHIFT_PRESSED | SHIFT 键被按下 |
NUMLOCK_ON | NUMLOCK 指示灯亮 |
ReadKey 测试程序
下面是 ReadKey 测试程序:等待一个按键,然后报告按下的是否为 CapsLock 键。程序应考虑延迟因素,以便在调用 ReadKey 时留出时间让 MS-Windows 处理其消息循环:; 测试 ReadKey ( TestReadkey. asm) INCLUDE Irvine32.inc INCLUDE Macros.inc .code main PROC L1: mov eax,10 ; 消息处理带来的延迟 call Delay call ReadKey ; 等待按键 jz L1 test ebx,CAPSLOCK_ON jz L2 mWrite <"CapsLock is ON",0dh,0ah> jmp L3 L2: mWrite <"CapsLock is OFF",0dh,0ah> L3: exit main ENDP END main
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频