您的位置:首页 > 其它

【汇编】自定义9号中断(键盘输入处理中断)

2011-08-19 14:07 316 查看
在屏幕上交替显示a~z,按ESC字体变绿色

assume cs:code,ds:data

data segment
dw 0,0;存放原9号中断的偏移和段地址
data ends

code segment
;;;;;;;;;;;;;;;;;;;;;;
;主程序
;;;;;;;;;;;;;;;;;;;;;;
start:
;安装9号中断
mov bx,data
mov ds,bx
mov bx,0
mov es,bx
mov ax,es:[9*4]
mov ds:[0],ax
mov ax,es:[9*4+2]
mov ds:[2],ax
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs

mov bx,0b800h
mov es,bx
jmp restore
s:	mov es:[160*12+2*70],al
call delay
cmp al,'z'
je restore
inc al
jmp s

mov ax,4c00h
int 21h

restore:
mov al,'a'
jmp s

delay:
push ax
push bx
mov ax,2000h
mov bx,0
s1:	sub bx,1
sbb ax,0
cmp ax,0
jne s1
cmp bx,0
jne s1
pop bx
pop ax
ret

;;;;;;;;;;;;;;;;;
;9号中断
;;;;;;;;;;;;;;;;;
int9:
push ax
in al,60h
cmp al,1
jne int9_rtn
mov byte ptr es:[160*12+2*70+1],00000010b

int9_rtn:
;模拟中断发生过程
pushf;保存标志寄存器内容

;设置标志寄存器的IF,TF为0
pushf
pop ax
and ah,1100b
push ax
popf
call dword ptr ds:[0];完成push cs,push ip

pop ax
iret

code ends

end start
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐