汇编语言 外部中断

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码

扫描码

ESC01
1~002~0A
00B
-0C
=0D
Bakspace)E
Tab0F
Q10
W11
E12
R13
T14
Y15
U16
I17
O18
P19
[1A
]1B
Enter1C
Ctrl1D
A1E
S1F
D20
F21
G22
H23
J24
K25
L26
;27
,28
29
Shift(左)2A
\\2B
Z2C
X2D
C2E
V2F
B30
M31
N32
,33
.34
/35
Shift(右)36
Prtsc37
Alt38
Space39
CapsLock
F1~F103B~44
NumLock45
ScrollL0ck46
Home47
48
pageUp49
-4A
4B
4D
+4E
End4F
50
pageDown51
Ins52
Del53

以上是关于汇编语言 外部中断的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言中断及外部设备操作篇--06

X86汇编8.外部中断

单片机怎么清中断标志位

51单片机外部中断INT0实例(汇编程序)

CC2530的外部中断

C语言中,用于设置中断、中断信号的函数都有哪些?怎么设置一个发送中断信号(自己定义的)的函数?