代码解释如下:
;改变int9中断例程改变它的中断处理程序
assume cs:code
stack segment
db 128 dup(0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,128
call cpy_new_int9 ;复制自定义的int9程序
call save_int9 ;保存原有的int9程序的入口地址:cs:ip
call set_new_int9 ;设置中断向量表
loopInput: mov ax,100h
jmp loopInput
call set_old_int9 ;原来的int9的中断程序入口地址恢复
mov ax,4c00h
int 21h
;======================================================== ;恢复int9本来的中断向量表
set_old_int9: mov ax,0
mov es,ax
cli
mov word ptr es:[9*4],[200h]
mov word ptr es:[9*4+2],[202h]
sti
ret
;======================================================== ;设置新的中断向量表
set_new_int9: push ax
push es
mov ax,0
mov es,ax
cli ;屏蔽外中断
mov word ptr es:[9*4],7E00h
mov word ptr es:[9*4+2],0
sti
pop es
pop ax
ret
;======================================================== ;保存原来的int9中断程序的地址,ip与cs到0000:0200处
save_int9

这篇博客详细介绍了如何使用汇编语言自定义INT9中断处理程序,包括保存原有中断地址、设置新中断向量、恢复中断向量以及编写新的中断处理逻辑,特别是实现了在按下F1键时改变屏幕颜色的功能。
最低0.47元/天 解锁文章
1360





