實驗十五
安裝一個新的int 9中斷例程 功能:按下A鍵後,除非不鬆開,如果松開,就顯示滿屏幕的A,其他鍵照常處理
assume cs:code
stack segment
db 128 dup(0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,128
push cs
pop ds
mov si,offset ni9
mov ax,0
mov es,ax
mov di,204H
mov cx,offset ni9e - offset ni9
cld
rep movsb
push es:[9*4]
pop es:[200H]
push es:[9*4+2]
pop es:[202H]
cli
mov word ptr es:[9*4],204H
mov word ptr es:[9*4+2],0
sti
mov ax,4c00H
int 21H
ni9: push ax
push es
push bx
push cx
mov bx,0
mov es,bx
pushf ; call BIOS origin int9
call dword ptr es:[200H]
in al,60H
cmp al,9EH ; 如果不是斷碼就不顯示
jne ni9r
mov bx,0b800H
mov es,bx
mov bx,0
mov cx,2000 ; 一頁2000個字符
lp: mov byte ptr es:[bx],41H
add bx,2
loop lp
ni9r: pop cx
pop bx
pop es
pop ax
iret
ni9e: nop
code ends
end start