汇编语言 外部中断
Posted ʚVVcatɞ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言 外部中断相关的知识,希望对你有一定的参考价值。
外部中断,也称为硬件中断,它们从8086的不可屏蔽中断引脚NMI或可屏蔽中断引脚 INTR 引入。从INTR脚上来的请求信号,CPU可以立即响应,也可以暂时不响应。如果CPU内部标志寄存器中的IF置1,则允许响应这类中断;若IF标志为0,则不予响应。
以下是从键盘输入产生中断响应,改变二进制的值的程序代码。
assume cs:code, ds:data, ss:stack
data segment
db 128 dup(0)
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
call init_reg
call show_keyword_status
mov ax, 4C00H
int 21H
init_reg:
mov bx, 0B800H
mov es, bx
mov bx, 40H
mov ds, bx
ret
;===============================================================
show_status: push cx
push dx
push ds
push es
push si
push di
mov cx, 8
showStatus: mov dx, 0 ;Shl shr
shl al, 1 ; CF = 1 '1'
adc dx, 30H
mov es:[di], dl
add di, 2
loop showStatus
pop di
pop si
pop es
pop ds
pop dx
pop cx
ret
show_keyword_status:
mov si, 17H
testA: mov al, ds:[si]
mov di, 160 * 10 + 40 * 2
call show_status
jmp testA
ret
code ends
end start
键盘什么都不按的情况下,如下所示
当按下 Ctrl 和 Alt键产生中断响应 数值会变为 00101100
当按下Insert 键 数值会变为 10100000
按下 Capslock键 数值会变为 01100000
还可以按下左右两边的Shift键会让右边的第一位和第二位发生变化。
总结:
1.读出60H端口的扫描码
2.如果是字符键的扫描,将这个扫描码和对应的 ASCII放到Bios中的键盘缓冲区
3.对键盘系统的相关控制
4.扫描码 按下去为通码,松开为断码
- 断码 = 通码 + 80H
键盘缓冲区大小为 15字型数据
- 高位字节存放扫描码
- 低位字节存放 ASCII码
扫描码
ESC | 01 |
1~0 | 02~0A |
0 | 0B |
- | 0C |
= | 0D |
Bakspace | )E |
Tab | 0F |
Q | 10 |
W | 11 |
E | 12 |
R | 13 |
T | 14 |
Y | 15 |
U | 16 |
I | 17 |
O | 18 |
P | 19 |
[ | 1A |
] | 1B |
Enter | 1C |
Ctrl | 1D |
A | 1E |
S | 1F |
D | 20 |
F | 21 |
G | 22 |
H | 23 |
J | 24 |
K | 25 |
L | 26 |
; | 27 |
, | 28 |
、 | 29 |
Shift(左) | 2A |
\\ | 2B |
Z | 2C |
X | 2D |
C | 2E |
V | 2F |
B | 30 |
M | 31 |
N | 32 |
, | 33 |
. | 34 |
/ | 35 |
Shift(右) | 36 |
Prtsc | 37 |
Alt | 38 |
Space | 39 |
Caps | Lock |
F1~F10 | 3B~44 |
NumLock | 45 |
ScrollL0ck | 46 |
Home | 47 |
上 | 48 |
pageUp | 49 |
- | 4A |
左 | 4B |
右 | 4D |
+ | 4E |
End | 4F |
下 | 50 |
pageDown | 51 |
Ins | 52 |
Del | 53 |
以上是关于汇编语言 外部中断的主要内容,如果未能解决你的问题,请参考以下文章