;pdf 295 试验15 安装int9中断效果为放开a键时满屏显示A
;TMD完成的郁闷!自己独立完成的,也就1个多小时,本来代码写完就直接实现,谁知道把cld和std搞翻反了,好好的心情就这么没了!
assume cs:code
code segment
start :
mov ax,0
mov es,ax
push es:[9*4]
pop es:[200H]
push es:[9*4+2]
pop es:[202H]
;复制原int9中断程序入口地址 到 0:200H dword单元
cli
mov word ptr es:[9*4],204H
mov word ptr es:[9*4+2],0
sti
;设置新int9中断程序入口地址为0:204H
mov cx,offset int9end- offset int9start
mov ax,cs
mov ds,ax
mov si,offset int9start
mov di,204H ;(es=0)
cld
rep movsb
;进行安装
mov ax,4c00h
int 21h
int9start:
pushf
call dword ptr cs:[200h]
;调用原int9中断例程
push ax
push cx
push es
push di
in al,60H
cmp al,1EH+80H
jne return
mov cx,2000
mov ax,0b800H
mov es,ax
mov di,0
show_A:mov byte ptr es:[di],'A'
add di,2
loop show_A
return:pop di
pop es
pop cx
pop ax
iret
int9end:nop
code ends
end start |