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

📄 hdp.asm

📁 实现一个硬盘保护程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;-----------------------------
DAP_STRUC			STRUC
PacketSize			DB	16
Reserved			DB	0
BlockCount			DW	?
BufferAddroff		DW	?
BufferAddrseg		DW	?
Blocknum			DQ	?
DAP_STRUC			ENDS

DPP_STRUC			STRUC
InfoSize			DW	26
Flags				DW	?
Cylinders			DD	?
Heads				DD	?
SectorsPTrack		DD	?
Sectors				DQ	?
SectorSize			DW	?
DPP_STRUC			ENDS


;----------------------------------------
DADD	MACRO	NUM1,NUM2,NUM3,COUNT
		LOCAL	_B0
		PUSHF
		PUSH	AX
		PUSH	CX
		PUSH	DX
		PUSH	SI
		PUSH	BP
		CLC
		MOV		CX,COUNT
		MOV		SI,0
		MOV		BP,0
_B0:	MOV		DX,0
		MOV		AX,WORD PTR NUM1[SI]
		ADD		AX,WORD PTR NUM2[SI]
		ADC		DX,0
		ADD		AX,BP
		MOV		WORD PTR NUM3[SI],AX
		INC		SI
		INC		SI
		MOV		WORD PTR NUM3[SI],DX
		MOV		BP,DX
		LOOP	_B0
		INC		SI
		INC		SI
		MOV		WORD PTR NUM3[SI],BP
		POP		BP
		POP		SI
		POP		DX
		POP		CX
		POP		AX
		POPF
		ENDM
;----------------------------------
DSUB	MACRO	NUM1,NUM2,NUM3,COUNT
		LOCAL	_B1
		PUSHF
		PUSH	AX
		PUSH	CX
		PUSH	SI
		CLC
		MOV	CX,COUNT
		MOV	SI,0
_B1:	MOV	AX,WORD	PTR	NUM1[SI]
		SBB	AX,WORD	PTR	NUM2[SI]
		MOV	WORD PTR NUM3[SI],AX
		INC	SI
		INC	SI
		LOOP	_B1
		POP	SI
		POP	CX
		POP	AX
		POPF
		
		ENDM
		
;-----------------------------
READDISK	MACRO	BufferAddress,LPA,BlockCount
			PUSHF
			PUSH	AX
			PUSH	BX
			PUSH	CX
			PUSH	DX
			PUSH	SI
			
			LEA		BX,BufferAddress
			MOV		DAP.BufferaddrOFF,BX
			MVAR	DAP.BlockNum,LPA,4
			MVAR	DAP.blockCount,BlockCount,1
			
			MSG		MSG64
			
			MOV		AH,42H
			MOV		DL,80H
			LEA		SI,DAP
			INT		13H
			
			MSGSF		MSG40,MSG41
			
			POP		SI
			POP		DX
			POP		CX
			POP		BX
			POP		AX
			POPF
			
			ENDM
			

WRITEDISK	MACRO	BufferAddress,LPA,BlockCount
			PUSHF
			PUSH	AX
			PUSH	BX
			PUSH	CX
			PUSH	DX
			PUSH	SI
			
			LEA		BX,BufferAddress
			MOV		DAP.BufferaddrOFF,BX
			MVAR	DAP.BlockNum,LPA,4
			MVAR	DAP.blockCount,BlockCount,1
			
			MSG		MSG65
			
			MOV		AL,0
			MOV		AH,43H
			MOV		DL,80H
			LEA		SI,DAP
			INT		13H
			
			MSGSF		MSG42,MSG43
			
			POP		SI
			POP		DX
			POP		CX
			POP		BX
			POP		AX
			POPF
			
			ENDM
;----------------------
CLS	MACRO
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
		
	MOV		AH,6
	MOV		AL,0
	MOV		BH,7
	MOV		CX,0
	MOV		DH,24
	MOV		DL,79
	INT 	10H
	
	POP		DX
	POP		CX
	POP		BX
	POP		AX
	ENDM
	
	
MVAR	MACRO	VARD,VARS,COUNT
	LOCAL	NEXT,EXIT
	PUSHF
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	PUSH	SI
	PUSH	DI

	LEA	SI,VARS
	LEA	DI,VARD
	MOV	CX,COUNT
NEXT:
	MOV	AX,[SI]
	MOV	[DI],AX
	ADD	SI,2
	ADD	DI,2
	DEC	CX
	CMP	CX,0
	JZ	EXIT
	JMP	NEXT
EXIT:	
	POP	DI
	POP	SI
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	POPF
	
	ENDM

B2A_32	MACRO	BIN,ASC
	LOCAL	NEXT,EXIT,NOT0
	PUSH	DI
	
	MVAR	DIVEE_64,BIN,2
	MOV	CX,32
NEXT:	LEA	SI,DIVEE_64
	MOV	AX,[SI]
	CMP	AX,0
	JNZ	NOT0
	INC	SI
	INC	SI
	DEC	CX
	CMP	CX,0
	JA	NEXT
	MVAR	ASC,ASC0,2
	JMP	EXIT
	

NOT0:	LEA	DI,ASC
	MVAR	DIVER_32,D10,2
	CALL	DIV_32
	MVAR	DIVER_32,D9,2
	CALL	DIV_32
	MVAR	DIVER_32,D8,2
	CALL	DIV_32
	MVAR	DIVER_32,D7,2
	CALL	DIV_32
	MVAR	DIVER_32,D6,2
	CALL	DIV_32
	MVAR	DIVER_32,D5,2
	CALL	DIV_32
	MVAR	DIVER_32,D4,2
	CALL	DIV_32
	MVAR	DIVER_32,D3,2
	CALL	DIV_32
	MVAR	DIVER_32,D2,2
	CALL	DIV_32
	MVAR	DIVER_32,D1,2
	CALL	DIV_32
	
EXIT:	POP	DI
	
	ENDM
;----------------------
B2A_64	MACRO	BIN,ASC

	PUSHF
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	PUSH	SI
	PUSH	DI
	
	MVAR	DIVEE_128,BIN,4

	LEA	DI,ASC

	MVAR	DIVER_64,D20,4
	CALL	DIV_64
	MVAR	DIVER_64,D19,4
	CALL	DIV_64
	MVAR	DIVER_64,D18,4
	CALL	DIV_64
	MVAR	DIVER_64,D17,4
	CALL	DIV_64
	MVAR	DIVER_64,D16,4
	CALL	DIV_64
	MVAR	DIVER_64,D15,4
	CALL	DIV_64
	MVAR	DIVER_64,D14,4
	CALL	DIV_64
	MVAR	DIVER_64,D13,4
	CALL	DIV_64
	MVAR	DIVER_64,D12,4
	CALL	DIV_64
	MVAR	DIVER_64,D11,4
	CALL	DIV_64
	MVAR	DIVER_64,D10,4
	CALL	DIV_64
	MVAR	DIVER_64,D9,4
	CALL	DIV_64
	MVAR	DIVER_64,D8,4
	CALL	DIV_64
	MVAR	DIVER_64,D7,4
	CALL	DIV_64
	MVAR	DIVER_64,D6,4
	CALL	DIV_64
	MVAR	DIVER_64,D5,4
	CALL	DIV_64
	MVAR	DIVER_64,D4,4
	CALL	DIV_64
	MVAR	DIVER_64,D3,4
	CALL	DIV_64
	MVAR	DIVER_64,D2,4
	CALL	DIV_64
	MVAR	DIVER_64,D1,4
	CALL	DIV_64
	MOV		BX,0
	MOV		FLAG0,BX
	
	POP	DI
	POP	SI
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	POPF
	
	ENDM
GETSC	MACRO	SC,S,C
	PUSH	AX
	PUSH	BX
   	MOV	AX,SC
	MOV	BX,AX
	MOV	BH,0
	SHL	BX,1
	SHL	BX,1
	MOV	BL,AH
	MOV	C,BX
	AND	AX,003FH
	MOV	S,AL
	POP	BX
	POP	AX
	ENDM
;-----------------------------
B2A_8	MACRO		BIN,ASC
	LOCAL	SHOW0,EXIT
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	PUSH	DI

	MOV	BX,0
	MOV	BL,BIN
	CMP	BX,0
	JZ	SHOW0
	MOV	DI,OFFSET ASC
;二进制与ASCII的转换
	MOV	CX,100
	CALL	Div8
	MOV	CX,10
	CALL	Div8
	MOV	CX,1
	CALL	Div8
	JMP	EXIT
SHOW0:
	MVAR	ASC,ASC0,1
	
EXIT:	
	POP	DI
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	
	ENDM
;-----------------------------
B2A_16	MACRO		BIN,ASC
	LOCAL	SHOW0,EXIT
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	PUSH	DI
	
	MOV	BX,BIN			;二进制数存入SI	
	LEA	DI,ASC		;ASCII码地址存入DI
	CMP	BX,0
	JZ	SHOW0
;二进制与ASCII的转换
	MOV	CX,10000		
	CALL	Div16	
	MOV	CX,1000
	CALL	Div16
	MOV	CX,100
	CALL	Div16
	MOV	CX,10
	CALL	Div16
	MOV	CX,1
	CALL	Div16
	JMP	EXIT
SHOW0:
	MVAR	ASC,ASC0,2
EXIT:
	POP	DI
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	ENDM
;-------------------------------
MSG	MACRO	MSG
	
	PUSH	AX
	PUSH	DX
	
	LEA	DX,MSG
	MOV	AH,9
	INT 21H
	
	POP	DX
	POP	AX
	
	ENDM
;----------------------------
MSGSF	MACRO	MSGS,MSGF
	
	LOCAL	FAIL,EXIT

	PUSH	AX
	PUSH	BX
	PUSH	DX
	
	JC	FAIL
	MSG	MSGS
	JMP	EXIT
FAIL:	MSG	MSGF

EXIT:	POP	DX
	POP	BX
	POP	AX
	
	ENDM
;------------------------
CONTINUE	MACRO
	

			MSG	MSG63
			RDKB
	

			ENDM
;------------------------

RDKB	MACRO
;		PUSH	AX
		PUSH	BX
		PUSH	CX
		PUSH	DX
	
		MOV	AH,0CH
		MOV	AL,7
		INT	21H
		
		POP		DX
		POP		CX
		POP		BX
;		POP		AX
	
		ENDM
;--------------------------
YN		MACRO
;		PUSH	AX
		PUSH	BX
		PUSH	CX
		PUSH	DX
		
		MSG	MSG52
		RDYN
		
		POP		DX
		POP		CX
		POP		BX
;		POP		AX
		
		ENDM
;---------------------------	
RDYN	MACRO
		LOCAL	NEXT,OTHER,EXIT
		PUSH	AX

NEXT:	RDKB
		CMP	AL,'Y'
		JNZ	OTHER
		CLC
		JMP	EXIT

OTHER:	CMP	AL,'N'
		JNZ	NEXT
		STC
		JMP	EXIT

EXIT:	POP	AX
		
		ENDM
;----------------------------
CINIT	MACRO				;程序段初始化宏

	ASSUME	CS:CSEG,DS:DSEG
START:
	PUSH	DS
	SUB	AX,AX
	PUSH	AX
;
	MOV	AX,DSEG
	MOV	DS,AX
	MOV	ES,AX
	ENDM
;--------------------------------
DMUL	MACRO	MCD1,	MCD2,	MCD3,	COUNT
	LOCAL	_B01,	_B02,	_B03
	PUSHF
	PUSH	DS
	PUSH	ES
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	PUSH	SI
	PUSH	DI
	
	MOV	SI,SEG	MCD1
	MOV	DS,SI
	LEA	SI,MCD1
	MOV	CX,2*COUNT
	MOV	DI,SEG	MCD2
	MOV	ES,DI
	LEA	DI,MCD2
	LEA	BX,MCD3
	PUSH	BX
	MOV	AX,0
	CLD
_B01:
	MOV	[BX],AX
	INC	BX
	INC	BX
	LOOP	_B01
	POP	BX
	MOV	CX,COUNT
_B02:
	PUSH	CX
	MOV	DX,[SI]
	INC	SI
	INC	SI
	PUSH	BX
	PUSH	DI
	MOV	CX,COUNT
_B03:
	PUSH	CX
	PUSH	DX
	MOV	AX,[DI]
	INC	DI
	INC	DI
	MUL	DX
	ADD	[BX],AX
	INC	BX
	INC	BX
	ADC	[BX],DX
	POP	DX
	POP	CX
	LOOP	_B03
	POP	DI
	POP	BX
	INC	BX
	INC	BX
	POP	CX
	LOOP	_B02
	
	POP	DI
	POP	SI
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	POP	ES
	POP	DS
	POPF
	
	ENDM
;----------------------------------------------
DDIV	MACRO	MCD1,MCD2,MCD3,COUNT
	
	LOCAL	_B06,_B07,_B08,_B09,_B10,_B11,_B12,_B13,_B14

	PUSHF
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	PUSH	SI
	PUSH	DI
	PUSH	BP	
	PUSH	DS
	PUSH	ES

	MOV	SI,SEG MCD2
	MOV	DS,SI
	LEA	SI,MCD2
	MOV	CX,COUNT
	LEA	BX,MCD3
	MOV	DI,SEG MCD1
	MOV	ES,DI
	LEA	DI,MCD1
	PUSH	BX
	MOV	AX,0
_B14:	MOV	[BX],AX
	LOOP	_B14
	POP	BX
	MOV	CX,1
_B06:	MOV	BP,[SI+2*COUNT-2]
	TEST	BP,8000H
	JNZ	_B07
	PUSH	SI
	PUSH	CX
	MOV	CX,COUNT
	CLC
_B13:	RCL	WORD PTR [SI],1
	INC	SI
	INC	SI
	LOOP	_B13
	POP	CX
	POP	SI
	INC	CX
	JMP	_B06
_B07:	PUSH	SI
	PUSH	DI
	PUSH	CX
	STD
	ADD	SI,2*COUNT-2
	ADD	DI,2*COUNT-2
	MOV	CX,COUNT
	REPZ	CMPSW
	POP	CX
	POP	DI
	POP	SI
	JA	_B09
	PUSH	SI
	PUSH	DI
	PUSH	CX
	CLC
	MOV	CX,COUNT
_B11:	MOV	AX,[SI]
	INC	SI
	INC	SI
	SBB	[DI],AX
	INC	DI
	INC	DI
	LOOP	_B11
	POP	CX
	POP	DI
	POP	SI
	STC
	JMP	_B10
_B09:	CLC
_B10:	PUSH	BX
	PUSH	CX
	MOV	CX,COUNT
_B12:	RCL	WORD PTR [BX],1
	INC	BX
	INC	BX
	LOOP	_B12
	POP	CX
	POP	BX
	PUSH	SI
	PUSH	CX
	ADD	SI,2*COUNT-2
	MOV	CX,COUNT
	CLC
_B08:	RCR	WORD PTR [SI],1
	DEC	SI
	DEC	SI
	LOOP	_B08
	POP	CX
	POP	SI
	LOOP	_B07

	POP	ES
	POP	DS
	POP	BP
	POP	DI
	POP	SI
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	POPF

	ENDM
;-----------------------------------------------------
;*******************************************
DSEG	SEGMENT
;------------------------------------
	DIVEE_128	DQ	?,?
    DIVER_64	DQ	?

⌨️ 快捷键说明

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