1 assume cs:code
2
3 stack segment
4 db 128 dup(0)
5 stack ends
6
7 code segment
8 start: mov ax,stack
9 mov ss,ax
10 mov sp,128
11
12 push cs
13 pop ds
14
15 mov ax,0
16 mov es,ax
17 ;设置段寄存器
18
19 mov si,offset int9 ;新中断程序的标记
20 mov di,204h ;新中断程序的位置
21 mov cx,offset int9end-offset int9 ;新中断程序的长度
22 cld
23 rep movsb
24 ;先将代码复制到 0:204 处
25
26 push es:[9*4]
27 pop es:[200h]
28 push es:[9*4+2]
29 pop es:[202h]
30 ;将原本int9的中断程序入口保存起来 0:200 处
31
32 cli
33 mov word ptr es:[9*4],204h
34 mov word ptr es:[9*4+2],0
35 sti
36 ;将int9的中断入口修改成新中断程序的入口
37
38 mov ax,4c00h
39 int 21h
40
41 int9: ;中断程序
42
43 int9ret: iret
44
45 int9end: nop
46
47 code ends
48 end start