DATAS SEGMENT
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;先将int 9地址存在200h
mov ax,0
mov es,ax
mov ds,ax
mov di, 4 * 9
mov ax,es:[di]
mov si,0
mov ds:[0200h],ax
mov ax,es:[di+2]
mov ds:[0200h+2],ax
;将changebg拷到0:204h中
;from ds:si=>es:di
mov ax,cs
mov ds,ax
mov si,offset changebg
mov cx,offset endchangebg - offset changebg
mov ax,0
mov es,ax
mov di,0204h
rep movsb
;将int 9的入口地址改变
mov ax,0
mov es,ax
mov di,4 * 9
mov word ptr es:[di],0204h
mov word ptr es:[di+2],0
MOV AH,4CH
INT 21H
;改变屏幕色彩
changebg:
push ax
push si
push ds
jne callint9
in al,60h
cmp al,3bh
jne callint9
mov ax,0b800h
mov ds,ax
mov cx,80*25
mov si,0
s:
add byte ptr ds:[si + 1],1
add si,2
loop s
callint9:
pushf ;记得先存一下标志位,call完时会pop出来
mov ax,0
mov ds,ax
call dword ptr ds:[0200h] ;记得用dword
pop ds
pop si
pop ax
iret
endchangebg:nop
CODES ENDS
END START |