0
点赞
收藏
分享

微信扫一扫

汇编语言 外部中断

纽二 2022-06-01 阅读 87

外部中断,也称为硬件中断,它们从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
汇编语言 外部中断_可屏蔽中断_02
当按下Insert 键 数值会变为 10100000
汇编语言 外部中断_可屏蔽中断_03
按下 Capslock键 数值会变为 01100000
汇编语言 外部中断_引脚_04
还可以按下左右两边的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

举报

相关推荐

0 条评论