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

📄 mutdiv.asm.svn-base

📁 keilC底层软件,能够结合硬件产生加解密密文,具有安全保护功能.
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
	LCALL	CalClear		;CLEAR +27 ~ +34
	MOV		A,R4
	ADD		A,#7
	MOV		R7,A				;SOURCE R7=+7~+10 (4 BYTES)
	MOV		R3,#4
	LCALL	_MBIN_MOV			;+7~+10 COPY TO +27 ~ +34
	
	MOV		A,R5				;DEST R5=+27~+34 (8 BYTES)
	CLR		C
	SUBB	A,#8
	MOV		R7,A				;SOURCE R7=+19~+26 (8 BYTES)
	MOV		R3,#6
	LCALL	_NDIV				;(卖出价-发行价)*10000/发行价   商存于+11~+18 (ONLY USE +13 ~ +18)
	
	MOV		A,R4
	ADD		A,#7
	MOV		R0,A
	MOV		A,#6
	LCALL	CalClear		;CLEAR +7~+12 (6 BYTES) 存放 商数
	MOV		A,R4
	ADD		A,#19
	MOV		R0,A
	MOV		R1,A
	MOV		A,#6
	LCALL	CalClear		;CLEAR +19~+24 (6 BYTES)存放 除数
	MOV		A,R4
	ADD		A,#2
	MOV		R0,A
	MOV		A,@R0
	MOV		@R1,A				;已持有年数

	MOV		A,R1
	MOV		R5,A				;R5= +19 ~ +24
	CLR		C
	SUBB	A,#6
	MOV		R7,A				;R7= +13 ~ +18
	MOV		R3,#6
	LCALL	_NDIV				;(卖出价-发行价)*10000/发行价/YEARS  商存于+7~+12
	
	MOV		A,R4
	MOV		R0,A
	MOV		R1,A
	MOV		A,#6
	LCALL	CalClear		;CLEAR +0 ~ +5 存放被减数(利率值)
	MOVX	A,@DPTR
	MOV		@R1,A
	INC		R1
	INC		DPTR
	MOVX	A,@DPTR
	MOV		@R1,A				;SET 利率值 2 bytes

	MOV		A,R4
	MOV		R7,A
	ADD		A,#7
	MOV		R5,A				;(+0 ~ +5) +/- (+7 ~ +12)
	MOV		R3,#6
	MOV		A,R6
	CJNE	A,#0xFE,SaleCalc30
	MOV		R6,#0
	LCALL	_MBIN_SUB
	JNC		SaleCalc40
	MOV		A,R4
	MOV		R0,A
	MOV		R1,#6
	LCALL	BuCode
	MOV		A,R4
	MOV		R0,A
	MOV		R1,#6
	LCALL	_MBIN_AONE
	MOV		A,R4
	ADD		A,#4
	MOV		R0,A
	MOV		A,#0xFE
	MOV		@R0,A
	SJMP	SaleCalc50
SaleCalc30:
	LCALL	_MBIN_ADD
SaleCalc40:
	MOV		A,R4
	ADD		A,#4
	MOV		R0,A
	CLR		A
	MOV		@R0,A
SaleCalc50:
	RET
	

DebtCalc20:
	LJMP		DebtCalc20B

DebtCalc10A:
	CJNE	A,#1,DebtCalc20
BuyCalc:
	LCALL	_SETLILVDPTR		;FIND FLASH POINTER
	MOV		A,R4
	ADD		A,#11
	MOV		R0,A
	MOV		R1,A
	MOV		A,#4
	LCALL	CalClear		;CLEAR +11 ~ +14
	MOVX	A,@DPTR
	MOV		@R1,A
	INC		R1
	INC		DPTR
	MOVX	A,@DPTR				
	MOV		@R1,A				;SET 利率值 2 bytes

	MOV		A,R4
	ADD		A,#7
	MOV		R7,A				;R7= +7 ~ +10
	ADD		A,#4
	MOV		R5,A				;R5= +11 ~ +14
	MOV		R3,#4
	LCALL	_NMUL				;(发行价*利率)RESULT +15 ~ +22 (ONLY USE +15~+20)

	MOV		A,R4
	ADD		A,#11
	MOV		R5,A
	ADD		A,#4
	MOV		R7,A
	MOV		R3,#6
	LCALL	_MBIN_MOV			;COPY (+15 ~ +20) TO (+11 ~ +16) 存放 被乘数(发行价*利率)
	MOV		A,R4
	ADD		A,#17
	MOV		R0,A
	MOV		R1,A
	MOV		A,#6
	LCALL	CalClear		;CLEAR +17 ~ +22 存放 乘数(年数)
	MOV		A,R4
	ADD		A,#2
	MOV		R0,A
	MOV		A,@R0
	MOV		@R1,A				;存放 乘数(年数)
	
	MOV		A,R4
	ADD		A,#11
	MOV		R7,A
	ADD		A,#6
	MOV		R5,A
	MOV		R3,#6
	LCALL	_NMUL				;(发行价*利率*年数)RESULT +23 ~ +34 (ONLY USE +23~+29  7 BYTES)
								; 注意:此处会破坏 RAM 中 (+40 ~ +47)单元
	MOV		A,R4
	ADD		A,#23
	MOV		R7,A				;R7=+23 ~ +29
	ADD		A,#8
	MOV		R5,A				;R5=+31 ~ +37
	MOV		R3,#7
	LCALL	_MBIN_MOV			;COPY (+23 ~ +29) TO (+31 ~ +37) PROTECT
	
	MOV		A,R4
	ADD		A,#3
	MOV		R5,A				;R5=+3 ~ +6  买入价
	ADD		A,#4
	MOV		R7,A				;R7=+7 ~ +10 发行价
	MOV		R3,#4
	LCALL	_MBIN_SUB			;(发行价-买入价) RESULT IN +7 ~ +10
	JNC		BuyCalc08	
	MOV		R6,#0xFE
	MOV		A,R7
	MOV		R0,A
	MOV		R1,#4
	LCALL	BuCode
	MOV		A,R7
	MOV		R0,A
	MOV		R1,#4
	LCALL	_MBIN_AONE			;不够减,则取补码
BuyCalc08:
	MOV		A,R4
	ADD		A,#11
	MOV		R0,A
	MOV		R1,A
	MOV		A,#4
	LCALL	CalClear		;CLEAR +11 ~ +14
	MOV		A,#0x10	
	MOV		@R1,A
	INC		R1
	MOV		A,#0x27	
	MOV		@R1,A
	DEC		R1
	MOV		A,R1
	MOV		R5,A				;被乘数10000
	CLR		C
	SUBB	A,#4				
	MOV		R7,A				;乘数=(发行价-买入价)
	MOV		R3,#4
	LCALL	_NMUL				;(发行价-买入价)*10000  RESULT IN +15 ~ +22 (ONLY USE +15 ~ +20)
	
	MOV		A,R4
	ADD		A,#15
	MOV		R5,A				;减数	R5=+15~+21 (发行价-买入价)
	ADD		A,#16	
	MOV		R7,A				;被减数  R7=+31~+37 (发行价*利率*年数)
	MOV		R3,#7
	MOV		A,R6
	CJNE	A,#0xFE,BuyCalc09	;(发行价-买入价)为正
	MOV		R6,#0				;(发行价-买入价)为负 
	LCALL	_MBIN_SUB			;(发行价*利率*年数)-[-(发行价-买入价)*10000]  RESULT IN (+31~ +37)
	JNC		BuyCalc11
	MOV		R6,#0xFE
	MOV		A,R7
	MOV		R0,A
	MOV		R1,#7
	LCALL	BuCode
	MOV		A,R7
	MOV		R0,A
	MOV		R1,#7
	LCALL	_MBIN_AONE			;不够减,则取补码 (+31~ +37)
	SJMP	BuyCalc12	
BuyCalc11:
	MOV		R6,#0
	SJMP	BuyCalc12	
BuyCalc09:
	LCALL	_MBIN_ADD			;(发行价*利率*年数)+[+(发行价-买入价)*10000]RESULT IN (+31~ +37)
BuyCalc12:
	MOV		A,R4
	ADD		A,#7
	MOV		R0,A
	MOV		A,#24
	LCALL	CalClear		;CLEAR +7 ~ +30
	MOV		A,R4
	ADD		A,#14
	MOV		R5,A
	MOV		A,R4
	ADD		A,#31
	MOV		R7,A
	MOV		R3,#7
	LCALL	_MBIN_MOV			;COPY (+31~+37) TO (+14~+20) 被除数
	MOV		A,R4
	ADD		A,#3
	MOV		R7,A
	MOV		A,R4
	ADD		A,#21
	MOV		R5,A
	MOV		R3,#4
	LCALL	_MBIN_MOV			;COPY (+3~+6) TO (+21~+27) 除数

	MOV		A,R5				;R5= +21 ~ +27
	CLR		C
	SUBB	A,#7
	MOV		R7,A				;R7= +14 ~ +20
	MOV		R3,#7
	LCALL	_NDIV				;R7/R5 RESULT IN (+7 ~ +13) 作为新的被除数

	MOV		A,R4
	ADD		A,#14
	MOV		R0,A
	MOV		R1,A
	MOV		A,#7
	LCALL	CalClear		;CLEAR +14 ~ +20
	MOV		A,R4
	ADD		A,#2
	MOV		R0,A
	MOV		A,@R0
	MOV		@R1,A				;取年数送入 (+14 ~ +20) 除数
	
	MOV		A,R4
	MOV		R0,A
	MOV		A,#7
	LCALL	CalClear		;CLEAR (+0 ~ +6)  存放商数
	
	MOV		A,R4
	ADD		A,#7
	MOV		R7,A				;R7 被除数
	ADD		A,#7
	MOV		R5,A				;R5 除数
	MOV		R3,#7
	LCALL	_NDIV				;RESULT (+0 ~ +7)
	
	MOV		A,R4
	ADD		A,#4
	MOV		R0,A				;+4
	MOV		A,R6
	CJNE	A,#0xFE,BuyCalc30
	MOV		@R0,A
	RET
BuyCalc30:
	CLR		A
	MOV		@R0,A
	RET


DebtCalc20B:
	CJNE	A,#2,DebtCalc30			;IF no=0,1,2 MUST ERROR !
HoldCalc:
DebtCalc30:
	RET

;-------------------------------------;
;Description:   取得利率表首地址
;  IN:  NO
; OUT:  DPTR
;-------------------------------------;
_SETLILVDPTR:
	MOV		A,R4
	MOV		R0,A
	INC		R0
	MOV		A,@R0
	JZ		SETLILV20			;IF TIME=0(3 YEAR),THEN
	MOV		DPTR,#(TEMPSTART+DEBTBEGIN+2)	;跳到第二个表表头 TIME=1(5 YEAR)
	SJMP	SETLILV30
SETLILV20:
	MOV		DPTR,#(DEBTBEGIN+TEMPSTART)
SETLILV30:
	RET

;----------------------------------
; 模块名:HouseCalc	MAKE:yujinhe
; 功能:个人住房贷款月还款的计算
;----------------------------------

_HouseCalc:
	MOV		A,R1

;;	mov		a,#30h			;?????????

	MOV		R4,A
Check_Hdata:
	ADD		A,#1
	MOV		R0,A			;+1
	MOV		A,@R0
	JZ		HdataErr		;YEAR=0 ERROR
	INC		R0
	MOV		R1,#4
Check_Hda10:
	MOV		A,@R0			;+2
	JNZ		Check_Hend
	INC		R0
	DJNZ	R1,Check_Hda10
HdataErr:					;MONEY=0 ERROR
	MOV		A,R4
	MOV		R0,A
	MOV		A,#8
	LCALL	CalClear	;OUTPUT ALL CLEAR "0"
	RET
Check_Hend:
	MOV		A,R4


	INC		A
	MOV		R0,A
	ADD		A,#5
	MOV		R1,A			;+6,+7 SAVE 12*N

	MOV		A,@R0			;取出年数
	MOV		B,#12
	MUL		AB
	MOV		@R1,A			;12N LOW
	INC		R1
	MOV		A,B
	MOV		@R1,A			;12N HIGH
	DEC		R1
	MOV		A,R1
	MOV		R7,A
	ADD		A,#2
	MOV		R5,A
	MOV		R3,#2
	LCALL	_MBIN_MOV		;COPY 12N TO +8,+9

	MOV		A,R5
	MOV		R0,A
	MOV		A,@R0
	ADD		A,#1
	MOV		@R0,A
	INC		R0
	MOV		A,@R0
	ADDC	A,#0
	MOV		@R0,A			;12N+1
;;	CLR		C
;;	RRC		A
;;	MOV		@R0,A
;;	DEC		R0
;;	MOV		A,@R0
;;	RRC		A				;此处若除以 2 误差会较大,故应放后面乘完利率后再除 2 较好。
;;	MOV		@R0,A			;(12N+1)/2
	
	MOV		A,R4
	MOV		R0,A
	MOV		A,@R0
	JNZ		HouseCalc20
	MOV		DPTR,#HOUSEBEGIN+TEMPSTART
	SJMP	HouseCalc25
HouseCalc20:
	MOV		DPTR,#HOUSEBEGIN+2+TEMPSTART
HouseCalc25:
	MOV		A,R5
	ADD		A,#2
	MOV		R0,A
	MOVX	A,@DPTR
	MOV		@R0,A
	INC		R0
	INC		DPTR
	MOVX	A,@DPTR
	MOV		@R0,A			;传入利率 2 BYTES  +10,+11
	
	MOV		A,R5
	MOV		R7,A			;SOURCE R7 +8,+9
	ADD		A,#2
	MOV		R5,A			;DEST R5 +10,+11
	MOV		R3,#2
	LCALL	_NMUL			;(12N+1)*4425  (4425 is 利率) RESULT +12 ~ +15
	
;;	MOV		A,R4
;;	ADD		A,#16
;;	MOV		R0,A
;;	MOV		R1,#4
;;	CLR		C
;;HouseCalc07:
;;	DEC		R0
;;	MOV		A,@R0
;;	RRC		A
;;	MOV		@R0,A
;;	DJNZ	R1,HouseCalc07	;(12N+1)/2*4425  (4425 is 利率) RESULT +12 ~ +15
		
	MOV		A,R7
	MOV		R0,A
	MOV		A,#4
	LCALL	CalClear		;CLEAR +8 ~ +11
	MOV		A,R7
	MOV		R0,A
	MOV		A,#0x80
	MOV		@R0,A
	INC		R0
	MOV		A,#0x84
	MOV		@R0,A
	INC		R0
	MOV		A,#0x1E
	MOV		@R0,A				;被加数 2000000 存于 +8 ~ +11
	INC		R0
	INC		R0					;+12
	MOV		A,R0
	MOV		R5,A				;R5=  +12 ~ +15
	MOV		R3,#4				;R7 NO CHANGE= +8 ~ +11
	LCALL	_MBIN_ADD			;(12N+1)*4425+2000000  RESULT +8 ~ +11  
	
	MOV		A,R4
	ADD		A,#2
	MOV		R7,A				;SOURCE R7=+2 ~ +5		R5=+12 ~ +15 NO CHANGE
	MOV		R3,#4
	LCALL	_MBIN_MOV			;COPY +2 ~ +5 TO +12 ~ +15
	
	MOV		A,R5
	SUBB	A,#4
	MOV		R7,A				;SOURCE R7=+8 ~ +11		R5=+12 ~ +15 NO CHANGE
	MOV		R3,#4
	LCALL	_NMUL				;((12N+1)*4425+2000000)*70000  RESULT +16 ~ +23
	
	MOV		A,R4
	ADD		A,#8
	MOV		R0,A
	MOV		A,#8
	LCALL	CalClear		;CLEAR +8 ~ +15 用于存放商数
	
	MOV		A,R4
	ADD		A,#24
	MOV		R0,A
	MOV		R1,A
	MOV		A,#8
	LCALL	CalClear		;CLEAR +8 ~ +15 用于存放除数
	
	MOV		A,R1
	PUSH	ACC
	MOV		A,#0x80
	MOV		@R1,A
	INC		R1
	MOV		A,#0x84
	MOV		@R1,A
	INC		R1
	MOV		A,#0x1E
	MOV		@R1,A				;除数 2000000 存于 +8 ~ +15
	POP		ACC
	MOV		R5,A				;SOURCE R5=+24 ~ +31
	SUBB	A,#8
	MOV		R7,A				;SOURCE R7=+16 ~ +23
	MOV		R3,#8
	LCALL	_NDIV				;((12N+1)*4425+2000000)*70000/2000000  RESULT +8 ~ +15
	
	MOV		A,R4
	ADD		A,#16
	MOV		R0,A
	MOV		R5,A				;R5=+16,+17
	MOV		A,#8
	LCALL	CalClear		;CLEAR +16 ~ +23 用于存放除数
	
	MOV		A,R4
	ADD		A,#6
	MOV		R7,A				;R7=+6,+7
	MOV		R3,#2
	LCALL	_MBIN_MOV			;COPY +6,+7 TO +16,+17
	
	MOV		A,R4
	MOV		R0,A
	MOV		A,#8
	LCALL	CalClear		;CLEAR +0 ~ +7 用于存放商数

	MOV		A,R5				;DEST   R5= +16~ +23
	SUBB	A,#8
	MOV		R7,A				;SOURCE R7= +8 ~ +15
	MOV		R3,#8
	LCALL	_NDIV				;((12N+1)*4425+2000000)*70000/2000000/12N  RESULT +0 ~ +7
	
	RET

;--------------------------------------
; 模块名:SavingCalc	 MAKE:yujinhe
; 功能:个人存款利息的计算
;--------------------------------------

_SavingCalc:
	MOV		A,R1

;;;;	mov		a,#0x30			;???????????

	MOV		R4,A
Check_Sdata:
	ADD		A,#1
	MOV		R0,A			;+1
	MOV		A,@R0
	JNZ		Check_Sda05
	INC		R0
	MOV		A,@R0			;+2
	JNZ		Check_Sda05		
SdataErr:					;YEAR=0 ERROR
	MOV		A,R4
	MOV		R0,A
	MOV		A,#8
	LCALL	CalClear	;OUTPUT ALL CLEAR "0"
	RET

Check_Sda05:
	MOV		A,R4
	ADD		A,#3
	MOV		R0,A
	MOV		R1,#4
Check_Sda10:
	MOV		A,@R0			;+3
	JNZ		Check_Send
	INC		R0
	DJNZ	R1,Check_Sda10
	SJMP	SdataErr		;MONEY=0 ERROR
Check_Send:
	MOV		A,R4

	LCALL	DATAJUDGE		;判断输入数据的合法性
	MOV		A,R4
	ADD		A,#7
	MOV		R0,A
	MOV		R1,A
	MOV		R3,#20
	LCALL	CalClear	;CLEAR WORKING RAM +7 ~ +26 (TOTAL 20 BYTES)
	MOV		DPTR,#SAVEBEGIN+TEMPSTART
	MOV		A,R4
	MOV		R0,A
	MOV		A,@R0
	MOV		R6,A			;取出 (储种) 作为搜索 利率表DPTR 的指针
	MOV		B,#2
	LCALL	DPTRADD05		;SEARCH DPTR POINTER
	MOVX	A,@DPTR
	MOV		@R1,A
	INC		R1
	INC		DPTR
	MOVX	A,@DPTR
	MOV		@R1,A			;从 FLASH 取出 2 BYTES 利率值传入。
	
	MOV		A,R4
	ADD		A,#3
	MOV		R7,A			;金额 SOURCE R7=+3 ~ +6
	ADD		A,#4
	MOV		R5,A			;利率 DEST R5=+7 ~ +10
	MOV		R3,#4
	LCALL	_NMUL			;2000000*171 RESULT +11 ~ +18 (实际最大只用+11~+16)
	
;	MOV		A,R7
;	MOV		R0,A
;	MOV		A,#8
;	LCALL	CalClear	;CLEAR +3 ~ +10	将用于存储商数.
;	
;	MOV		A,R4
;	ADD		A,#11
;	MOV		R0,A
;	MOV		R2,#2			;MOVE 2 TIMES = 相当于乘 4 .
;SavingCalc05:
;	MOV		R3,#8			;MOVE 8 BYTES
;	CLR		C
;	MOV		A,R0

⌨️ 快捷键说明

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