www.pudn.com > Pckv.zip > ATKV.ASM
PUBLIC ATKV
EXTRN WJZZS:NEAR,WJZZM:NEAR,CLOFIL:NEAR
EXTRN PMHHHC:NEAR,XS09SC:NEAR
EXTRN WJH:WORD,WJCD1:WORD,WJCD2:WORD,ESZC1:WORD,XSAXZC:WORD
EXTRN OPENCZF:BYTE,DWJCZF:BYTE,XWJCZF:BYTE,CZCZF:BYTE
EXTRN BOOTQ1:BYTE,BOOTQ2:BYTE,FHM:BYTE
;
; ATKV--1993
; CREATED: 95-10-22
SEG_B SEGMENT PARA PUBLIC 'data'
ATKVH1 DW 0
ATKVH2 DW 0
ATKVH3 DB 0
WJRE1 DB 'c:\resist1.dat',0
WJRE2 DB 'c:\resist2.dat',0
WJRE3 DB 'resist.dat',0
WJRE4 DB 'c:\AABBCC.LLL',0
WJRE5 DB 'c:\resist.exe',0
WJCO1 DB 'c:\command.com',0
AUTO1 DB 'c:\autoexec.bat',0
AUTO2 DB 'c:\autoexec.btk',0
AUTOZF DB 'C:\RESIST',13,10
DYPTZ DB 0
BTWJSJ DW 0
BTWJRQ DW 0
BOOTWZ1 DW 0
BOOTWZ2 DW 0
INT13OFFSET DW 0
INT13SEG DW 0
;
INSZF1 DB ' 已经按装过 resist '
DB '您想再按装一次 (Y/N) ? $'
CREATCZF DB ' 建立文件错 ! $'
BTERR1 DB ' 读分区扇错 !$'
BTERR3 DB ' 读引导扇错 !$'
BTERR5 DB ' 硬盘中的分区表是坏的 !$'
AZOKZF DB ' 按装 resist 成功 !$'
SEG_B ENDS
;
SEG_C SEGMENT PARA PUBLIC 'code'
ASSUME CS:SEG_C , DS:SEG_B
ATKV PROC NEAR
ATKVSTART:
PUSH ES
PUSH BX
;
PUSH DS
MOV AX,70H
MOV DS,AX
LES BX,DS:[00B4H]
POP DS
MOV INT13OFFSET,BX
MOV BX,ES
MOV INT13SEG,BX
POP BX
POP ES
;
MOV DX,OFFSET WJRE1
MOV AX,3D00H
INT 21H
JNB AZA04
MOV DX,OFFSET WJRE2
MOV AX,3D00H
INT 21H
JNB AZA04
MOV DX,OFFSET WJRE5
MOV AX,3D00H
INT 21H
JB AZA1
AZA04: MOV WJH,AX
CALL CLOFIL
MOV DX,OFFSET INSZF1
CALL XS09SC
AZA05: MOV AH,1
INT 21H
AND AL,0DFH
CMP AL,'N'
JZ AZA06
CMP AL,'Y'
JZ AZA07
JMP AZA05
AZA06: MOV FHM,2
JMP BTEND3
AZA07: MOV DX,OFFSET WJRE1
MOV AX,4301H
MOV CX,0
INT 21H
MOV DX,OFFSET WJRE2
MOV AX,4301H
MOV CX,0
INT 21H
MOV DX,OFFSET WJRE5
MOV AX,4301H
MOV CX,0
INT 21H
MOV DX,OFFSET WJRE1
MOV AX,4100H
INT 21H
MOV DX,OFFSET WJRE2
MOV AX,4100H
INT 21H
MOV DX,OFFSET WJRE5
MOV AX,4100H
INT 21H
AZA1: MOV DX,OFFSET WJCO1
MOV AX,4301H
MOV CX,20H
INT 21H
MOV DX,OFFSET WJRE1
MOV CX,20H
MOV AH,3CH
INT 21H
JNB AZA2
JMP BTJWJC
AZA2: MOV WJH,AX
CALL READDISK
CMP DYPTZ,0
JZ AZA3
MOV FHM,2
JMP BTEND3
AZA3: MOV DX,OFFSET BOOTQ1
MOV SI,DX
MOV CX,400H
MOV AH,40H
MOV BX,WJH
INT 21H
JNB AZA4
JMP BTXWJC
AZA4: CALL CLOFIL
MOV AX,0
MOV CX,200H
AZA5: ADD AX,[SI]
ADD SI,2
LOOP AZA5
MOV ATKVH1,AX
AZA6: MOV DX,OFFSET WJRE1
MOV CX,27H
MOV AX,4301H
INT 21H
JNB AZB1
JMP BTCZC
;
AZB1: MOV DX,OFFSET WJCO1
MOV AX,3D00H
INT 21H
JNB AZB2
JMP BTOPENC
AZB2: MOV WJH,AX
CALL WJZZM
JNB AZB20
JMP BTCZC
AZB20: MOV WJCD2,AX
CALL WJZZS
JNB AZB21
JMP BTCZC
AZB21: MOV BX,WJH
MOV DX,0
MOV CX,WJCD2
MOV AX,ESZC1
PUSH DS
MOV DS,AX
MOV AH,3FH
INT 21H
POP DS
JNB AZB3
JMP BTDWJC
AZB3: PUSH ES
MOV AX,ESZC1
MOV ES,AX
MOV SI,WJCD2
MOV AL,ES:[SI-1]
MOV ATKVH3,AL
SHR SI,1
MOV CX,SI
MOV SI,0
MOV AX,0
AZB5: ADD AX,ES:[SI]
ADD SI,2
LOOP AZB5
POP ES
MOV ATKVH2,AX
MOV AX,5700H
MOV BX,WJH
INT 21H
MOV BTWJSJ,CX
MOV BTWJRQ,DX
CALL CLOFIL
;
AZC1: MOV DX,OFFSET WJRE2
MOV CX,20H
MOV AH,3CH
INT 21H
JNB AZC2
JMP BTJWJC
AZC2: MOV WJH,AX
MOV DX,0
MOV CX,WJCD2
MOV BX,WJH
MOV AX,ESZC1
PUSH DS
MOV DS,AX
MOV AH,40H
INT 21H
POP DS
JNB AZC3
JMP BTXWJC
AZC3: CALL CLOFIL
JNB AZC4
JMP BTCZC
AZC4: MOV DX,OFFSET WJRE2
MOV CX,27H
MOV AX,4301H
INT 21H
JNB AZD1
JMP BTCZC
AZD1: MOV DX,OFFSET WJRE3
MOV AX,3D00H
INT 21H
JNB AZD2
JMP BTOPENC
AZD2: MOV WJH,AX
CALL WJZZM
MOV WJCD2,AX
CALL WJZZS
JNB AZD20
JMP BTCZC
AZD20: MOV BX,WJH
MOV DX,0
MOV CX,WJCD2
MOV AX,ESZC1
PUSH DS
MOV DS,AX
MOV AH,3FH
INT 21H
POP DS
JNB AZD3
JMP BTDWJC
AZD3: CALL CLOFIL
PUSH ES
MOV AX,ESZC1
MOV ES,AX
MOV BX,8
MOV BX,ES:[BX]
MOV CL,4
SHL BX,CL
MOV SI,80H
MOV AL,ATKVH3
MOV ES:[BX+SI+03],AL
MOV AX,ATKVH2
MOV ES:[BX+SI+04],AX
MOV AX,ATKVH1
MOV ES:[BX+SI+06],AX
MOV AX,BTWJSJ
MOV ES:[BX+SI+08],AX
MOV AX,BTWJRQ
MOV ES:[BX+SI+0AH],AX
MOV AX,BOOTWZ1
MOV ES:[BX+SI+0CH],AX
MOV AX,BOOTWZ2
MOV ES:[BX+SI+0EH],AX
MOV AX,INT13OFFSET
MOV ES:[BX+SI+10H],AX
MOV AX,INT13SEG
MOV ES:[BX+SI+12H],AX
POP ES
AZE1: MOV DX,OFFSET WJRE4
MOV CX,20H
MOV AH,3CH
INT 21H
JNB AZE2
JMP BTJWJC
AZE2: MOV WJH,AX
MOV DX,0
MOV CX,WJCD2
MOV BX,WJH
MOV AX,ESZC1
PUSH DS
MOV DS,AX
MOV AH,40H
INT 21H
POP DS
JNB AZE3
JMP BTXWJC
AZE3: CALL CLOFIL
JNB AZE4
JMP BTCZC
AZE4: MOV DX,OFFSET WJRE4
MOV CX,21H
MOV AX,4301H
INT 21H
JNB AZF1
JMP BTCZC
AZF1: MOV DX,OFFSET WJRE4
MOV DI,OFFSET WJRE5
MOV AH,56H
INT 21H
JNB AZF2
JMP BTCZC
AZF2: MOV DX,OFFSET AUTO1
MOV AX,3D00H
INT 21H
JNB AZF3
JMP AZG1
AZF3: MOV WJH,AX
CALL WJZZM
MOV WJCD2,AX
CALL WJZZS
MOV DX,OFFSET BOOTQ1
MOV BX,WJH
MOV CX,WJCD2
MOV AH,3FH
INT 21H
JNB AZF4
JMP BTDWJC
AZF4: CALL CLOFIL
PUSH DS
POP ES
MOV SI,OFFSET BOOTQ1
MOV DI,OFFSET AUTOZF
MOV CX,0AH
REPZ CMPSB
JNZ AZF4A
JMP BTEND1
AZF4A: MOV DX,OFFSET AUTO2
MOV AX,4100H
INT 21H
MOV DX,OFFSET AUTO1
MOV DI,OFFSET AUTO2
MOV AH,56H
INT 21H
JNB AZF5
JMP BTCZC
AZF5: MOV DX,OFFSET AUTO1
MOV CX,20H
MOV AH,3CH
INT 21H
JNB AZF6
JMP BTJWJC
AZF6: MOV WJH,AX
MOV BX,AX
MOV DX,OFFSET AUTOZF
MOV CX,0BH
MOV AH,40H
INT 21H
JNB AZF7
JMP BTXWJC
AZF7: MOV DX,OFFSET BOOTQ1
MOV CX,WJCD2
MOV AH,40H
INT 21H
JNB AZF8
JMP BTXWJC
AZF8: CALL CLOFIL
JMP BTEND1
;
AZG1: MOV DX,OFFSET AUTO1
MOV CX,20H
MOV AH,3CH
INT 21H
JNB AZG2
JMP BTJWJC
AZG2: MOV WJH,AX
MOV BX,AX
MOV DX,OFFSET AUTOZF
MOV CX,0BH
MOV AH,40H
INT 21H
JNB AZG3
JMP BTXWJC
AZG3: CALL CLOFIL
JMP BTEND1
;
BTOPENC: MOV DX,OFFSET OPENCZF
JMP BTEND2
BTJWJC: MOV DX,OFFSET CREATCZF
JMP BTEND2
BTDWJC: MOV DX,OFFSET DWJCZF
JMP BTEND2
BTXWJC: MOV DX,OFFSET XWJCZF
JMP BTEND2
BTCZC: MOV DX,OFFSET CZCZF
BTEND2: MOV XSAXZC,DX
MOV FHM,1
JMP BTEND3
BTEND1: MOV DX,OFFSET AZOKZF
MOV XSAXZC,DX
MOV FHM,0
BTEND3: MOV AX,XSAXZC
MOV DX,DS
RET
ATKV ENDP
;
READDISK PROC NEAR
PUSH ES
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DS
POP ES
MOV BX,OFFSET BOOTQ1
MOV SI,BX
MOV DYPTZ,0
MOV DL,80H
MOV DH,00H
MOV CH,00H
MOV CL,01H
MOV AH,02H
MOV AL,01H
INT 13H
JNB RD3
RD2: MOV DX,OFFSET BTERR1
CALL XS09SC
OR DYPTZ,1
JMP RD8
RD3: MOV CX,10H
ADD SI,1EEH
RD4: CMP BYTE PTR ES:[SI],80H
JZ RD5
SUB SI,+10H
LOOP RD4
MOV DX,OFFSET BTERR5
CALL XS09SC
OR DYPTZ,4
MOV BOOTWZ1,0
MOV BOOTWZ2,0
JMP RD8
RD5: ADD BX,200H
MOV DX,ES:[SI]
MOV CX,ES:[SI+02]
MOV AX,0201H
MOV BOOTWZ1,DX
MOV BOOTWZ2,CX
INT 13H
JNB RD8
MOV DX,OFFSET BTERR3
CALL XS09SC
OR DYPTZ,2
RD8: POP SI
POP DX
POP CX
POP BX
POP AX
POP ES
RET
READDISK ENDP
;
SEG_C ENDS
END ATKVSTART