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
;