1、题目
2、个人代码
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
start:
;设置栈顶ss:sp指向
mov ax,stack
mov ss,ax
mov sp,128
;将原中断向量表中的9号中断处理程序地址存到0:[200]地址
mov ax,0
mov es,ax;es:di目标地址
mov di,200h
mov ds,ax
mov si,[9*4];ds:si源地址
mov cx,4
cld
rep movsb
;将编写的新的int9中断处理程序放到0:[204]地址
mov ax,cs
mov ds,ax
mov si,offset int9
mov cx,offset int9end-offset int9
cld
rep movsb
;更改中断向量表设置9号处理程序新的地址
cli
mov word ptr es:[9*4],204h
mov word ptr es:[9*4+2],0
sti
mov ax,4c00h
int 21h
int9:
push ax
push es
push cx
push bx
in al,60h
pushf
call dword ptr cs:[200h];调用原来的int9中断处理程序
cmp al,1eh+80h;松开按键产生的断码
jne int9ret
mov ax,0b800h
mov es,ax
mov cx,2000
mov bx,0
;松开A键全屏显示A
s:
mov byte ptr es:[bx],'A'
add bx,2
loop s
int9ret:
pop bx
pop cx
pop es
pop ax
iret
int9end:
nop
code ends
end start
3、结果