我是靠谱客的博主 健忘荷花,最近开发中收集的这篇文章主要介绍汇编:键盘中断(int 9),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 键盘中断, 一般按下键盘上的某个按钮就会触发键盘中断.

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)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部