|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov ax,0
mov es,ax
mov si,int9
mov di,200h
mov cx,offset int9end - offset int9
cld
rep movsb
mov bx,9*4
push es:[bx]
pop es:[200h]
push es:[bx+2]
pop es:[202h]
cli //就是这一块为什么要屏蔽中断呢?
mov es:[bx],word ptr 204h
mov es:[bx+2],word ptr 0h
sti
mov ax,4c00h
int 21h
int9:
push ax
push bx
push cx
push es
in al,60h
pushf
call dword ptr cs:[200h]
cmp al,1eh
jne int9ret
mov cx,2000
mov ax,0b800h
mov es,ax
mov bx,0
s: mov es:[bx],byte ptr 41h
add bx,2
loop s
int9ret:
pop es
pop cx
pop bx
pop ax
iret
int9end:
nop
code ends
end start
本帖最后由 jackz007 于 2019-7-9 19:11 编辑
为了防止在中断向量还没有完全改好的时候发生键盘中断,也就是下面 2 条指令: - mov es:[bx],word ptr 204h
- mov es:[bx+2],word ptr 0h
复制代码
如果这两条指令一条都未执行或两条都执行完毕的时候发生键盘中断 int 09 都不会产生问题,但是,如果万一在只执行了前一条的时候恰好发生 int 09,那后果就可想而知了。
以上就是要屏蔽中断的理由和原因,就是为了万无一失。
所以,修改系统中断向量的时候,最好都先屏蔽中断。
|
|