这是一个DOS程序只支持在WINDOSXP系统和DOS系统下运行
FallingLettersVirus介绍
据悉,字母坠落病毒起源于南斯拉夫,出现于1988年10月1日至12月31日期间,原始版本熄几乎是无害的。如果被激活,只会导致屏幕上方字母一个的坠落下来并堆积在屏幕底部。受其影响,促使IBM编写自己的反病毒软件。
汇编代码如下
code segment
org 100h;com文件需要在开头预留100h字节的空间
assume cs:code , ds:code
main:
jmp start;要跳开数据部分,不能执行
welcome db '+---------------------------------------------------+' ,0ah ,0dh
db '+ FallingLettersVirus +' ,0ah ,0dh
db '+ ---write by caicaiwoshishui +' ,0ah ,0dh
db '+---------------------------------------------------+' ,0ah ,0dh ,'$'
old_int dd ?;保存被截获的中断
row dw ? ;行位置
rowB dw ? ;行位置
col dw ?;列位置
first dw ?;列位置
TSR proc far
;保护现场
push ax
push bx
push cx
push dx
push si
push di
push bp
push sp
push es
push ds
sti
call disp
cli
;返回现场
pop ds
pop es
pop sp
pop bp
pop di
pop si
pop dx
pop cx
pop bx
pop ax
jmp cs:old_int
TSR endp
disp proc near
push ax
push cx
push dx
push es
push bx
mov ax,first
cmp first,0
jne sta
mov first,1
mov row,23;从第24(下标23)行第一个字符开始掉落
mov col,0
mov rowB,22
sta: mov ax,0b800h
mov es,ax
mov cx,80
loo2:push cx
mov ax,160
mov bx,23
mul bx
mov bx,ax
mov ax,col
mov cx,2
mul cx
add bx,ax
mov cx,24;循环24次 按列掉落
loo:mov ax,es:[bx]
add bx,160
mov dx,es:[bx]
cmp dx,0720h
jne noCopy
mov es:[bx-160],0720h
mov es:[bx],ax
noCopy:sub bx,320
loop loo
inc col
cmp col,80
jne rowBNot2
mov col,0
rowBNot2:pop cx
loop loo2
pop bx
pop es
pop dx
pop cx
pop ax
ret
disp endp
start:
mov dx ,offset welcome
mov ah ,09h;
int 21h;显示欢迎语 DS:DX=字符串 '$'结束字符串
mov ax,0
mov first,0
mov ax ,351Ch
int 21h;读取中断向量 返回值ES:BX=中断向量
mov word ptr old_int , bx
mov word ptr old_int[2] , es
mov dx , offset TSR
push cs
pop ds
mov ax ,251Ch
int 21h;设置中断向量 DS:DX=中断向量
mov dx , offset start
int 27h;驻留程序
code ends
end main
环境要求
系统:WindowsXp 32位
编译约定
源码文件名: t.asm。后面用到的t.asm都代表源码文件。
编译命令
masm命令:masm t.asm(此时会生成t.obj文件)
link命令;link t.obj (此时会生成t.exe文件)
exe2bin命令:exe2bin t.exe t.com (此时会生成t.com文件)