1 assume cs:code
2 ;安装程序,接受按键事件,变化颜色
3 code segment
4 start:
5 mov ax,cs
6 mov ds,ax
7 mov si,offset sub1
8 mov ax,0020h
9 mov es,ax
10 mov di,0
11 mov cx,offset sub2 - offset sub1
12 cld
13 rep movsb ;复制程序
14
15 mov ax,0
16 mov es,ax
17 mov word ptr es:[7ch*4],200h
18 mov word ptr es:[7ch*4+2],0
19 mov ax,4c00h
20 int 21h ;入口地址附加
21 sub1:
22 push ax
23 push bx
24 push es
25
26 in al,60h
27
28 pushf
29 call dword ptr ds:[0]
30 cmp al,1
31 jne int9ret
32 mov ax,0b800h
33 mov es,ax
34 inc byte ptr es:[12*160+40*2+1]
35
36 int9ret:
37 pop es
38 pop bx
39 pop ax
40 iret
41 sub2:
42 nop
43 code ends
44
45 end start
1 assume cs:code
2 ;测试程序
3 stack segment
4 db 128 dup(0)
5 stack ends
6
7 data segment
8 dw 0,0
9 data ends
10
11 code segment
12 start:
13 mov ax,stack
14 mov ss,ax
15 mov sp,128
16
17 mov ax,data
18 mov ds,ax
19
20 mov ax,0
21 mov es,ax
22
23 push es:[9*4]
24 pop ds:[0]
25 push es:[9*4+2]
26 pop ds:[2]
27
2x cli ;设置IF为0,禁止可屏蔽中断执行,这里指键盘中断
28 mov word ptr es:[9*4],200h
29 mov word ptr es:[9*4+2],0
2x sti ;设置IF为1,允许可屏蔽中断执行,这里指键盘中断
30
31 mov ax,0b800h
32 mov es,ax
33 mov ah,'a'
34 s:
35 mov es:[12*160+40*2],ah
36 call delay
37 inc ah
38 cmp ah,'z'
39 jna s
40
41 mov ax,0
42 mov es,ax
43
44 push ds:[0]
45 pop es:[9*4]
46 push ds:[2]
47 pop es:[9*4+2]
48
49 mov ax,4c00h
50 int 21h
51
52 delay:
53 push ax
54 push dx
55 mov dx,10h
56 mov ax,0
57 s1:
58 sub ax,1
59 sbb dx,0
60 cmp ax,0
61 jne s1
62 cmp dx,0
63 jne s1
64 pop dx
65 pop ax
66 ret
67 int 7ch
68
69 code ends
70
71 end start