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