概述
键盘中断, 一般按下键盘上的某个按钮就会触发键盘中断.
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 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 9)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复