| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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,那后果就可想而知了。
 
      以上就是要屏蔽中断的理由和原因,就是为了万无一失。
 
      所以,修改系统中断向量的时候,最好都先屏蔽中断。
  
 
 
 |   
 
 
 
 |