www.pudn.com > Pckv.zip > V83ASM.ASM


PUBLIC	V83 
EXTRN	WJDOPEN:NEAR,WJXOPEN:NEAR,WJZZS:NEAR,WJZZM:NEAR,CLOFIL:NEAR 
EXTRN	BCSX:NEAR,GBSX:NEAR,HFSX:NEAR,BCSJRQ:NEAR,HFSJRQ:NEAR 
EXTRN	PMHHHC:NEAR,XS09SC:NEAR 
EXTRN	WJCXZC:WORD,BDDIZC:WORD,XSAXZC:WORD 
EXTRN	GZW01:WORD,GZW02:WORD,GZW03:WORD 
EXTRN	JSW01:WORD,JSW02:WORD,JSW03:WORD 
EXTRN	WJSEGGZA:WORD,WJSEGGZB:WORD,ESGZA:WORD,ESGZB:WORD 
EXTRN	ENDJS:WORD,WJH:WORD,WJCD1:WORD,WJCD2:WORD,FHM:BYTE 
EXTRN	WJSXZC1:WORD,WJSXZC2:WORD,WJSXZC3:WORD,ESZC1:WORD 
EXTRN	GZB01:BYTE,GZB02:BYTE,GZB03:BYTE,WJGZQ:BYTE,WJGZZZ:WORD 
EXTRN	JSB01:BYTE,JSB02:BYTE,JSB03:BYTE,DLZC:BYTE 
EXTRN	OPENCZF:BYTE,DWJCZF:BYTE,XWJCZF:BYTE,CZCZF:BYTE,WJTYPE:BYTE 
EXTRN	BDTZHCQ:BYTE,WJGZQ:BYTE,WJTQ:BYTE,CORPSETZ:BYTE 
; 
;		V83--959 
;        CREATED:   96-7-7  
SEG_B	SEGMENT	PARA PUBLIC 'data' 
INT25CB	DB	0AH	DUP	(0);INT25控制块 
WJMZC	DB	0CH	DUP	(0);文件名暂存 
KYFPDY	DW	0	;可用分配单元 
FPDYMAX	DW	0	;最大分配单元号 
FOUNDTZ	DB	0	;找到特征 
WJJS	DW	0	;文件计数 
GMLTZ	DB	0	;根目录特征 
MSZJ	DW	0	;每扇字节 
FPDYSS	DW	0	;每分配单元伞数 
FPDYZJS	DW	0	;分配单元字节数 
FAT1S	DW	0	;FAT1表始 
FAT2S	DW	0	;FAT2表始 
MLSKS	DW	0	;目录扇开始 
MLSS	DW	0	;目录伞数 
GMLSS	DW	0	;根目录伞数 
FILESS	DW	0	;文件区始扇 
FATSS	DW	0	;FAT表伞数 
FATTZ	DW	0	;FAT表类型特征 
QOTZ	DB	0	;分配单元奇偶特征 
FPDYH	DW	0	;分配单元号 
MLENDTZ	DB	0	;目录已完特征 
V83BXZC	DW	0 
V83MLZZ	DW	0	;目录指针工作 
V83CWZF	DB '找到 952 病毒',13,10 
	DB '它是从硬盘中拷贝出来的,既不能使用也不能消毒;',13,10 
	DB '请用户删除该文件$'  
SEG_B	ENDS 
; 
SEG_C	SEGMENT	PARA PUBLIC 'code' 
      ASSUME CS:SEG_C , DS:SEG_B 
V83		PROC	NEAR 
V83START: 
	PUSH	DS 
	POP	ES 
	CLD 
V83JMB:	CALL	BCSX 
	JNB	V83KS1 
	MOV	FHM,1 
	JMP	V83ZE4 
V83KS1:	CALL	GBSX 
	JNB	V83KS2 
	MOV	FHM,1 
	JMP	V83ZE4 
V83KS2:	CALL	WJXOPEN 
	JNB	V83KS3 
	JMP	V83OPENC 
V83KS3:	CALL	BCSJRQ 
	JNB	V83KS4 
	JMP	V83ZE2 
V83KS4:	MOV	DX,OFFSET WJTQ 
	MOV	CX,20H 
	MOV	AH,3FH 
	MOV	BX,WJH 
	INT	21H 
	JNB	V83TZ0 
	JMP	V83DWJC 
; 
V83TZ0:	CMP	DLZC,2 
	JNB	V83TZ1 
	JMP	V83CW1 
V83TZ1:	MOV	BX,OFFSET WJTQ 
	MOV	AX,[BX] 
	CMP	AX,0FF33H 
	JZ	V83TZ2 
	JMP	V83END2 
V83TZ2:	MOV	AX,[BX+8] 
	CMP	AX,26B4H 
	JZ	V83TZ3 
	JMP	V83END2 
V83TZ3:	MOV	AX,[BX+12H] 
	CMP	AX,008AH 
	JZ	V83WA1 
	JMP	V83END2 
V83WA1:	 
	CALL	BPBZB 
	CALL	CPCS 
	MOV	AX,ESZC1 
	MOV	ES,AX 
	MOV	MLENDTZ,0 
	MOV	BX,OFFSET WJGZQ 
	ADD	BX,2 
	MOV	AL,[BX] 
	CMP	AL,'\' 
	JNZ	V83WA2 
	ADD	BX,1 
V83WA2:	MOV	V83MLZZ,BX 
; 
BJKA1:	CALL	SMLM 
	MOV	GMLTZ,0FH 
	CALL	GMLDSQ 
	MOV	AX,GMLSS 
	MOV	CL,4 
	SHL	AX,CL 
	MOV	WJJS,AX 
	JMP	BJKB1 
; 
BJKA2:	MOV	GMLTZ,0 
	CALL	SMLM 
	CALL	FPDYDSQ 
	MOV	AX,FPDYSS 
	MOV	CL,4 
	SHL	AX,CL 
	MOV	WJJS,AX 
; 
BJKB1:	CALL	V83BJNAME 
	CMP	FOUNDTZ,0FH 
	JNZ	BJKB3 
	CMP	MLENDTZ,0FH 
	JNZ	BJKB2 
	JMP	BJKD1 
BJKB2:	MOV	BX,V83BXZC 
	MOV	AX,ES:[BX+1AH] 
	MOV	FPDYH,AX 
	JMP	BJKA2 
BJKB3:	CMP	GMLTZ,0FH 
	JZ	BJKC1 
	MOV	AX,FPDYH 
	CMP	AX,FPDYMAX 
	JNB	BJKC1 
	CALL	NEXTFPDY 
	MOV	FPDYH,AX 
	JMP	BJKA2 
; 
BJKC1:	MOV	DX,OFFSET CZCZF 
	MOV	XSAXZC,DX 
	JMP	V83END2 
; 
BJKD1:	MOV	BX,V83BXZC 
	MOV	AX,ES:[BX+1AH] 
BJKD2:	CMP	AX,FPDYMAX 
	JNB	BJKD3 
	MOV	FPDYH,AX 
	CALL	NEXTFPDY 
	JMP	BJKD2 
BJKD3:	CALL	FPDYDSQ 
	CALL	FPDYZJ 
	CALL	WJZZM 
BJKD4:	CMP	DX,0 
	JNZ	BJKD5 
	CMP	AX,FPDYZJS 
	JNB	BJKD5 
	JMP	BJKD6 
BJKD5:	SUB	AX,FPDYZJS 
	SBB	DX,0 
	JMP	BJKD4 
BJKD6:	MOV	BX,FPDYZJS 
	SUB	BX,AX 
	CMP	BX,03E0H 
	JNB	BJKE1 
	JMP	V83END2 
; 
BJKE1:	MOV	SI,AX 
	MOV	AX,ES:[SI] 
	CMP	AX,'SD' 
	JZ	BJKE2 
	JMP	V83END2 
BJKE2:	ADD	SI,2 
	CALL	WJZZS 
	MOV	DX,SI 
	MOV	CX,03BFH 
	MOV	BX,WJH 
	MOV	AH,40H 
	PUSH	DS 
	PUSH	ES 
	POP	DS 
	INT	21H 
	POP	DS 
	JMP	V83END0 
 
; 
V83END2:	MOV	FHM,2 
		MOV	XSAXZC,0 
		JMP	V83ZE1 
V83END0:	MOV	FHM,0 
		MOV	XSAXZC,0 
		JMP	V83ZE1 
; 
V83OPENC:	MOV	FHM,1 
		MOV	DX,OFFSET OPENCZF 
		MOV	XSAXZC,DX 
		JMP	V83ZE3 
; 
V83CW1:		MOV	DX,OFFSET V83CWZF 
		JMP	V83XSL 
V83CZC:		MOV	DX,OFFSET CZCZF 
		JMP	V83XSL 
V83DWJC:	MOV	DX,OFFSET DWJCZF 
		JMP	V83XSL 
V83XWJC:	MOV	DX,OFFSET XWJCZF 
V83XSL:		MOV	XSAXZC,DX 
V83END1:	MOV	FHM,1 
V83ZE1:		CALL	HFSJRQ 
V83ZE2:		CALL	CLOFIL 
V83ZE3:		CALL	HFSX 
V83ZE4:		MOV	AX,XSAXZC 
		MOV	DX,DS 
		RET 
; 
FPDYZJ	PROC	NEAR 
	MOV	AX,200H 
	MOV	CX,FPDYSS 
	MUL	CX 
	MOV	FPDYZJS,AX 
	RET 
FPDYZJ	ENDP 
; 
SMLM	PROC	NEAR	;送目录名 
	MOV	DI,OFFSET WJMZC 
	MOV	SI,V83MLZZ 
; 
	MOV	CX,8 
MLMA1:	LODSB 
	CMP	AL,'\' 
	JZ	MLMA4 
	CMP	AL,0 
	JZ	MLMA4 
	CMP	AL,'.' 
	JNZ	MLMA3 
	MOV	AL,' ' 
	JMP	MLMA5 
MLMA3:	MOV	[DI],AL 
	INC	DI 
	DEC	CX 
	JZ	MLMB0 
	JMP	MLMA1 
MLMA4:	ADD	CX,3 
	JMP	MLMB4 
MLMA5:	MOV	[DI],AL 
	INC	DI 
	LOOP	MLMA5 
; 
MLMB0:	MOV	CX,3 
	LODSB 
	CMP	AL,'.' 
	JNZ	MLMB6 
MLMB1:	LODSB 
MLMB6:	CMP	AL,'\' 
	JZ	MLMB4 
	CMP	AL,0 
	JZ	MLMB4 
MLMB3:	MOV	[DI],AL 
	INC	DI 
	DEC	CX 
	JZ	MLMC1 
	JMP	MLMB1 
MLMB4:	MOV	AL,' ' 
MLMB5:	MOV	[DI],AL 
	INC	DI 
	LOOP	MLMB5 
; 
MLMC1:	MOV	V83MLZZ,SI 
	CMP	SI,WJGZZZ 
	JB	MLMC2 
	MOV	MLENDTZ,0FH 
MLMC2:	RET 
SMLM	ENDP 
; 
GMLDSQ	PROC	NEAR 
	MOV	AX,MLSKS 
	MOV	DX,0 
	MOV	CX,GMLSS 
	MOV	DI,0 
	MOV	BX,ESZC1 
	MOV	ES,BX 
	MOV	BX,OFFSET INT25CB 
	CALL	DSQ 
	RET 
GMLDSQ	ENDP 
; 
FPDYDSQ	PROC	NEAR 
	MOV	AX,FPDYH 
	CALL	FPDY_SQ 
	MOV	CX,FPDYSS 
	MOV	DI,0 
	MOV	BX,ESZC1 
	MOV	ES,BX 
	MOV	BX,OFFSET INT25CB 
	CALL	DSQ 
	RET 
FPDYDSQ	ENDP 
; 
DSQ	PROC	NEAR	;读伞区 
	MOV	SI,BX 
	MOV	[SI],AX 
	MOV	[SI+2],DX 
	MOV	[SI+4],CX 
	MOV	[SI+6],DI 
	MOV	[SI+8],ES 
	MOV	CX,0FFFFH 
	MOV	AL,DLZC 
	INT	25H 
	POP	AX 
	RET 
DSQ	ENDP 
; 
FPDY_SQ	PROC	NEAR	;分配单元求伞区 
	PUSH	BX 
	SUB	AX,2 
	MOV	BX,FPDYSS 
	MOV	DX,0 
	MUL	BX 
	ADD	AX,GMLSS 
	ADC	DX,0 
	ADD	AX,MLSKS 
	ADC	DX,0 
	POP	BX 
	RET 
FPDY_SQ	ENDP 
; 
SQ_FPDY	PROC	NEAR	;伞区求分配单元 
	PUSH	BX 
	SUB	AX,MLSS 
	SBB	DX,0 
	SUB	AX,MLSKS 
	SBB	DX,0 
	MOV	BX,FPDYSS 
	DIV	BX 
	POP	BX 
	RET 
SQ_FPDY	ENDP 
; 
NEXTFPDY	PROC	NEAR	;下一个分配单元 
	PUSH	BX 
	PUSH	CX 
	PUSH	DX 
	PUSH	SI 
	MOV	BX,FPDYMAX 
	CMP	BX,0FF7H 
	JB	W12A 
W16A:	MOV	BX,100H 
	MOV	DX,0 
	DIV	BX 
	PUSH	DX 
	MOV	SI,OFFSET INT25CB 
	ADD	AX,1 
	MOV	[SI],AX 
	MOV	AX,0 
	MOV	[SI+2],AX 
	MOV	AX,1 
	MOV	[SI+4],AX 
	MOV	AX,0 
	MOV	[SI+6],AX 
	MOV	AX,ESZC1 
	MOV	[SI+8],AX 
	MOV	ES,AX 
	MOV	BX,SI 
	MOV	CX,0FFFFH 
	MOV	AL,DLZC 
	INT	25H 
	POP	AX 
	POP	BX 
	SHL	BX,1 
	MOV	AX,ES:[BX] 
	JMP	NT 
; 
W12A:	MOV	QOTZ,0 
	TEST	AX,1 
	JZ	W12B 
	MOV	QOTZ,1 
W12B:	MOV	SI,3 
	MOV	DX,0 
	MUL	SI 
	SHR	AX,1 
	MOV	SI,200H 
	MOV	DX,0 
	DIV	SI 
	INC	AX 
	PUSH	DX 
	MOV	SI,OFFSET INT25CB 
	MOV	[SI],AX 
	MOV	AX,0 
	MOV	[SI+2],AX 
	MOV	AX,1 
	MOV	[SI+4],AX 
	MOV	AX,0 
	MOV	[SI+6],AX 
	MOV	AX,ESZC1 
	MOV	[SI+8],AX 
	MOV	ES,AX 
	MOV	BX,SI 
	MOV	CX,0FFFFH 
	MOV	AL,DLZC 
	INT	25H 
	POP	AX 
	POP	BX 
	MOV	AX,ES:[BX] 
	CMP	QOTZ,1 
	JZ	W12C 
	AND	AX,0FFFH 
	JMP	NT 
W12C:	AND	AX,0FFF0H 
	MOV	CL,4 
	SHR	AX,CL 
NT:	POP	SI 
	POP	DX 
	POP	CX 
	POP	BX 
	RET 
NEXTFPDY	ENDP 
; 
V83BJNAME	PROC	NEAR	;比较名字 
	PUSH	ES 
	PUSH	BX 
	MOV	V83BXZC,0 
V83NM1:	MOV	CX,11 
	MOV	DI,0 
	MOV	BX,V83BXZC 
	MOV	SI,OFFSET WJMZC 
V83NM2:	MOV	AL,[SI] 
	MOV	AH,ES:[DI+BX] 
	CMP	AL,AH 
	JNZ	V83NM3 
	INC	SI 
	INC	DI 
	DEC	CX 
	JZ	V83NMD 
	JMP	V83NM2 
V83NM3:	ADD	V83BXZC,20H 
	DEC	WJJS 
	JNZ	V83NM1 
	MOV	FOUNDTZ,0 
	JMP	V83NME 
V83NMD:	MOV	FOUNDTZ,0FH 
V83NME:	POP	BX 
	POP	ES 
	RET 
V83BJNAME	ENDP 
; 
BPBZB	PROC	NEAR		;BPB准备 
	PUSH	BX 
	MOV	SI,OFFSET INT25CB 
	MOV	WORD PTR [SI],0 
	MOV	WORD PTR [SI+2],0 
	MOV	WORD PTR [SI+4],1 
	MOV	WORD PTR [SI+6],0 
	MOV	AX,ESZC1 
	MOV	[SI+8],AX 
	MOV	ES,AX 
	MOV	BX,SI 
	MOV	CX,0FFFFH 
	MOV	AL,DLZC 
	INT	25H 
	POP	AX 
	MOV	SI,0 
	MOV	AX,ES:[SI+0BH]	;每伞字节 
	MOV	MSZJ,AX 
	MOV	AL,ES:[SI+0DH]	;分配单元伞数 
	MOV	AH,0 
	MOV	FPDYSS,AX 
	MOV	BX,ES:[SI+16H]	;FAT表伞数 
	MOV	FATSS,BX 
	MOV	AX,1 
	MOV	FAT1S,AX	;第一个FAT表始伞 
	ADD	AX,BX 
	MOV	FAT2S,AX	;第二个FAT表始伞 
	ADD	AX,BX 
	MOV	MLSKS,AX	;目录伞开始 
	MOV	DX,ES:[SI+11H] 
	SHR	DX,1 
	SHR	DX,1 
	SHR	DX,1 
	SHR	DX,1 
	MOV	GMLSS,DX	;根目录伞数 
	ADD	AX,DX 
	MOV	FILESS,AX	;文件区始伞 
	POP	BX 
	RET 
BPBZB	ENDP 
; 
CPCS	PROC	NEAR	;磁盘参数 
	PUSH	AX 
	PUSH	BX 
	PUSH	CX 
	PUSH	DX 
	MOV	DL,DLZC 
	ADD	DL,1 
	MOV	AH,36H 
	INT	21H 
	MOV	KYFPDY,BX	;可用分配单元 
	MOV	FPDYMAX,DX	;最大分配单元号 
	MOV	FATTZ,16 
	CMP	DX,00FF7H 
	JA	CPCSA 
	MOV	FATTZ,12 
CPCSA:	POP	DX 
	POP	CX 
	POP	BX 
	POP	AX 
	RET 
CPCS	ENDP 
 
V83		ENDP 
; 
SEG_C	ENDS 
	END	V83START 
;