键盘中断, 一般按下键盘上的某个按钮就会触发键盘中断.
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155assume 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 cpy_new_int9 call set_old_int9 call set_new_int9 testA: mov ax, 1000H jmp testA call set_init_int9 mov ax, 4C00H int 21H ;======================================= set_init_int9: mov bx, 0 mov es, bx cli push es:[200H] pop es:[9*4] push es:[202H] pop es:[9*4+2] sti ret ;======================================= set_new_int9: push bx push es mov bx, 0 mov es, bx cli mov word ptr es:[9*4], 7E00H mov word ptr es:[9*4+2], 0 sti pop es pop bx ret ;======================================== set_old_int9: push bx push es mov bx, 0 mov es, bx cli push es:[9*4] pop es:[200H] ; int9 ip push es:[9*4+2] pop es:[202H] ; int9 cs sti pop es pop bx ret ;========================================= new_int9: push ax in al, 60H pushf call dword ptr cs:[200H] cmp al, 48H ; 方向键-- 上 扫描码 je isUp cmp al, 50H ; 方向键-- 下 扫描码 je isDown cmp al, 3BH ; F1 扫描码 jne int9Ret call change_screen_color int9Ret: pop ax iret ;============================================================ isUp: mov di, 160*10+40*2 mov bx, 0B800H mov es, bx mov byte ptr es:[di], 'U' jmp int9Ret ;============================================================ isDown: mov di, 160*10+40*2 mov bx, 0B800H mov es, bx mov byte ptr es:[di], 'D' jmp int9Ret ;============================================================ change_screen_color: push bx push cx push es mov bx, 0B800H mov es, bx mov bx, 1 mov cx, 2000 ; 整个屏幕是 25行 80列, 1列是2个字节, 所以一行一共160个字节 changeColor: inc byte ptr es:[bx] ;mov byte ptr es:[bx], 01000001B add bx, 2 loop changeColor pop es pop cx pop bx ret new_int9_end: nop ;======================================== cpy_new_int9: mov bx, cs mov ds, bx mov si, OFFSET new_int9 mov bx, 0 mov es, bx mov di, 7E00H mov cx, OFFSET new_int9_end - OFFSET new_int9 cld rep movsb ret code ends end start
当按下"F1"键,会改变屏幕颜色, 当按 "上方向键",会在屏幕上打印"U", 按“下方向键”,会在屏幕上打印"D"
最后
以上就是健忘荷花最近收集整理的关于汇编:键盘中断(int 9)的全部内容,更多相关汇编:键盘中断(int内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复