经典汇编语言教程:例10.15 处理键盘输入的各种方法

例10.15 处理键盘输入的各种方法

例10.15 在NumLock处于“开状态”时,每按小键盘(NumericKeypad)上的数字键,给出“啪啪”响声。

解:
CSEGSEGMENT 'CODE'
ORG 100H
start:
JMPinit
INT9DD ?
TSR:
PUSHAX
PUSHCX
PUSHDS;保存寄存器
MOVAH, 2
INT16H;读取键盘当前状态
TESTAL, 00100000B;检测NumLock的状态
JZTSRExit
INAL, 60H
CMPAL, 71
JLTSRExit
CMPAL, 83
JGTSRExit
MOVAL, 10110110B
OUT43H, AL;向端口43H送特定的数0B6H
MOVAX, 1000
OUT42H, AL
MOVAL, AH
OUT42H, AL;向端口42H送声音频率
INAL, 61H;读取扬声器的当前状态
MOVAH, AL;把扬声器的状态保存在AH中
ORAL, 03
OUT61H, AL;开声音
MOVCX, 9000
delay:
LOOPdelay;声音延迟
MOVAL, AH
OUT61H, AL;恢复扬声器原来的状态,即关声音
TSRExit:
POPDS
POPCX
POPAX ;恢复寄存器
JMPCS:INT9;转向中断9H原来的处理程序
init:
CLI;关中断
MOVAH, 35H
MOVAL, 09H
INT21H
MOVWORD PTR INT9, BX
MOVWORD PTR INT9+2, ES;保存中断9H原处理程序入口地址
MOV AH, 25H
MOVAL, 09H
LEADX, TSR
INT21H;设置中断9H新的处理程序入口地址
STI;开中断
LEADX, init
ADDDX, 15
MOVCL, 4;把init的偏移量转换成“节数”
SHRDX, CL;每节内有16个字节
MOVAX, 3100H
INT21H
CSEGENDS
ENDstart

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号