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

📄

📁 该文件里包含了大量的常用经典的程序代码,可以为51编程者带来事半功倍的效果,
💻
📖 第 1 页 / 共 2 页
字号:

;***************************************************;

;		中型浮点库整理 1999-5-27 	    ;

;01.浮点数格式化				FSDT
;02.浮点数加法					FADD
;03.浮点数减法					FSUB
;04.浮点数乘法				  	FMUL
;05.浮点数除法					FDIV
;06.浮点数代数值比较(不影响待比较操作数)	FCMP 
;07.浮点绝对值函数				FABS
;08.浮点倒数函数				FRCP 
;09.浮点数平方					FSQU
;10.浮点数开平方(快速逼近算法)			FSQR
;11.双字节十六进制定点数转换成格式化浮点数	DTOF
;12.格式化浮点数转换成双字节定点数		FTOD
;13.浮点BCD码转换成格式化浮点数			BTOF
;14.格式化浮点数转换成浮点BCD码			FTOB

;****** [浮点数格式化] FSDT *********************;

;入口条件:	待格式化浮点操作数在[R0]中。
;出口信息:	已格式化浮点操作数仍在[R0]中。
;影响资源:	PSW、A、R2、R3、R4、位1FH    堆栈需求:  6字节
;调用子程序:    3个 MVR0 RLN MOV0

FSDT:	ACALL	MVR0    	;将待格式化操作数传送到第一工作区中
	ACALL	RLN             ;通过左规完成格式化
	ACALL	MOV0            ;通过左规完成格式化   
	RET
	
;------------------------------------------------;	
	                      
;****** [浮点数加法] FADD ***********************;

;入口条件:	被加数在[R0]中,加数在[R1]中。
;出口信息:	OV=0时,和仍在[R0]中,OV=1时,溢出。
;影响资源:	PSW、A、B、R2~R7、位1EH、1FH  堆栈需求:  6字节
;调用子程序:    4个
	                      
FADD:	CLR	F0
	ACALL	AS		;计算代数和
	RET

;------------------------------------------------;	

;****** [浮点数减法] FSUB ***********************;

;入口条件:	被减数在[R0]中,减数在[R1]中。
;出口信息:	OV=0时,差仍在[R0]中,OV=1时,溢出。
;影响资源:	PSW、A、B、R2~R7、位1EH、1FH    堆栈需求:6字节
;调用子程序:    4个
	
FSUB:	SETB	F0
AS:	ACALL	MVR1
	MOV	C,F0
	RRC	A
	XRL	A,@R1
	MOV	C,ACC.7
ASN:	MOV	1EH,C
	XRL	A,@R0
	RLC	A
	MOV	F0,C
	ACALL	MVR0
	ACALL	AS1
MOV0:	INC	R0
	INC	R0
	MOV	A,R4
	MOV	@R0,A
	DEC	R0
	MOV	A,R3
	MOV	@R0,A
	DEC	R0
	MOV	A,R2
	MOV	C,1FH
	MOV	ACC.7,C
	MOV	@R0,A
	CLR	ACC.7
	CLR	OV
	CJNE	A,#3FH,MV01
	SETB	OV
MV01:	MOV	A,@R0
	RET
MVR0:	MOV	A,@R0
	MOV	C,ACC.7
	MOV	1FH,C
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	R2,A
	INC	R0
	MOV	A,@R0
	MOV	R3,A
	INC	R0
	MOV	A,@R0
	MOV	R4,A
	DEC	R0
	DEC	R0
	RET
MVR1:	MOV	A,@R1
	MOV	C,ACC.7
	MOV	1EH,C
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	R5,A
	INC	R1
	MOV	A,@R1
	MOV	R6,A
	INC	R1
	MOV	A,@R1
	MOV	R7,A
	DEC	R1
	DEC	R1
	RET
AS1:	MOV	A,R6
	ORL	A,R7
	JZ	AS2
	MOV	A,R3
	ORL	A,R4
	JNZ	EQ
	MOV	A,R6
	MOV	R3,A
	MOV	A,R7
	MOV	R4,A
	MOV	A,R5
	MOV	R2,A
	MOV	C,1EH
	MOV	1FH,C
AS2:	RET
EQ:	MOV	A,R2
	XRL	A,R5
	JZ	AS4
	JB	ACC.7,EQ3
	MOV	A,R2
	CLR	C
	SUBB	A,R5
	JC	EQ4
EQ2:	CLR	C
	MOV	A,R6
	RRC	A
	MOV	R6,A
	MOV	A,R7
	RRC	A
	MOV	R7,A
	INC	R5
	ORL	A,R6
	JNZ	EQ
	MOV	A,R2
	MOV	R5,A
	SJMP	AS4
EQ3:	MOV	A,R2
	JNB	ACC.7,EQ2
EQ4:	CLR	C
	ACALL	RR1
	ORL	A,R3
	JNZ	EQ
	MOV	A,R5
	MOV	R2,A
AS4:	JB	F0,AS5
	MOV	A,R4
	ADD	A,R7
	MOV	R4,A
	MOV	A,R3
	ADDC	A,R6
	MOV	R3,A
	JNC	AS2
	AJMP	RR1
AS5:	CLR	C
	MOV	A,R4
	SUBB	A,R7
	MOV	B,A
	MOV	A,R3
	SUBB	A,R6
	JC	AS6
	MOV	R4,B
	MOV	R3,A
	AJMP	RLN
AS6:	CPL	1FH
	CLR	C
	MOV	A,R7
	SUBB	A,R4
	MOV	R4,A
	MOV	A,R6
	SUBB	A,R3
	MOV	R3,A
RLN:	MOV	A,R3
	ORL	A,R4
	JNZ	RLN1
	MOV	R2,#0C1H
	RET
RLN1:	MOV	A,R3
	JB	ACC.7,RLN2
	CLR	C
	ACALL	RL1
	SJMP	RLN
RLN2:	CLR	OV
	RET
RL1:	MOV	A,R4
	RLC	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	DEC	R2
	CJNE	R2,#0C0H,RL1E
	CLR	A
	MOV	R3,A
	MOV	R4,A
	MOV	R2,#0C1H
RL1E:	CLR	OV
	RET
RR1:	MOV	A,R3
	RRC	A
	MOV	R3,A
	MOV	A,R4
	RRC	A
	MOV	R4,A
	INC	R2
	CLR	OV
	CJNE	R2,#40H,RR1E
	MOV	R2,#3FH
	SETB	OV
RR1E:	RET

;------------------------------------------------;

;****** [浮点数乘法] FMUL ***********************;

;入口条件:	被乘数在[R0]中,乘数在[R1]中。
;出口信息:	OV=0时,积仍在[R0]中,OV=1时,溢出。
;影响资源:	PSW、A、B、R2~R7、位1EH、1FH    堆栈需求:6字节
;调用子程序:    3个

FMUL:	ACALL	MVR0
	MOV	A,@R0
	XRL	A,@R1
	RLC	A
	MOV	1FH,C
	ACALL	MUL0
	AJMP	MOV0
MUL0:	ACALL	MVR1
MUL1:	MOV	A,R3
	ORL	A,R4
	JZ	MUL6
	MOV	A,R6
	ORL	A,R7
	JZ	MUL5
	MOV	A,R7
	MOV	B,R4
	MUL	AB
	MOV	A,B
	XCH	A,R7
	MOV	B,R3
	MUL	AB
	ADD	A,R7
	MOV	R7,A
	CLR	A
	ADDC	A,B
	XCH	A,R4
	MOV	B,R6
	MUL	AB
	ADD	A,R7
	MOV	R7,A
	MOV	A,B
	ADDC	A,R4
	MOV	R4,A
	CLR	A
	RLC	A
	XCH	A,R3
	MOV	B,R6
	MUL	AB
	ADD	A,R4
	MOV	R4,A
	MOV	A,B
	ADDC	A,R3
	MOV	R3,A
	JB	ACC.7,MUL2
	MOV	A,R7
	RLC	A
	MOV	R7,A
	ACALL	RL1
MUL2:	MOV	A,R7
	JNB	ACC.7,MUL3
	INC	R4
	MOV	A,R4
	JNZ	MUL3
	INC	R3
	MOV	A,R3
	JNZ	MUL3
	MOV	R3,#80H
	INC	R2
MUL3:	MOV	A,R2
	ADD	A,R5
MD:	MOV	R2,A
	JB	ACC.7,MUL4
	JNB	ACC.6,MUL6
	MOV	R2,#3FH
	SETB	OV
	RET
MUL4:	JB	ACC.6,MUL6
MUL5:	CLR	A
	MOV	R3,A
	MOV	R4,A
	MOV	R2,#41H
MUL6:	CLR	OV
	RET

;------------------------------------------------;

;****** [浮点数除法] FDIV ***********************;
	
;入口条件:	被除数在[R0]中,除数在[R1]中。
;出口信息:	OV=0时,商仍在[R0]中,OV=1时,溢出。
;影响资源:	PSW、A、B、R2~R7、位1EH、1FH   堆栈需求:  5字节
;调用子程序:	2个

FDIV:	INC	R0
	MOV	A,@R0
	INC	R0
	ORL	A,@R0
	DEC	R0
	DEC	R0
	JNZ	DIV1
	MOV	@R0,#41H
	CLR	OV
	RET
DIV1:	INC	R1
	MOV	A,@R1
	INC	R1
	ORL	A,@R1
	DEC	R1
	DEC	R1
	JNZ	DIV2
	SETB	OV
	RET
DIV2:	ACALL	MVR0
	MOV	A,@R0
	XRL	A,@R1
	RLC	A
	MOV	1FH,C
	ACALL	MVR1
	ACALL	DIV3
	AJMP	MOV0
DIV3:	CLR	C
	MOV	A,R4
	SUBB	A,R7
	MOV	A,R3
	SUBB	A,R6
	JC	DIV4
	ACALL	RR1
	SJMP	DIV3
DIV4:	CLR	A
	XCH	A,R0
	PUSH	ACC
	CLR	A
	XCH	A,R1
	PUSH	ACC
	MOV	A,R2
	PUSH	ACC
	MOV	B,#10H
DIV5:	CLR	C
	MOV	A,R1
	RLC	A
	MOV	R1,A
	MOV	A,R0
	RLC	A
	MOV	R0,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	XCH	A,R3
	RLC	A
	XCH	A,R3
	MOV	F0,C
	CLR	C
	SUBB	A,R7
	MOV	R2,A
	MOV	A,R3
	SUBB	A,R6
	ANL	C,/F0
	JC	DIV6
	MOV	R3,A
	MOV	A,R2
	MOV	R4,A
	INC	R1
DIV6:	DJNZ	B,DIV5
	MOV	A,R6
	CLR	C
	RRC	A
	SUBB	A,R3
	CLR	A
	ADDC	A,R1
	MOV	R4,A
	CLR	A
	ADDC	A,R0
	MOV	R3,A
	POP	ACC
	MOV	R2,A
	POP	ACC
	MOV	R1,A
	POP	ACC
	MOV	R0,A
	MOV	A,R2
	CLR	C
	SUBB	A,R5
	ACALL	MD
	ACALL   RLN
	RET
           
           
;	以上是小型浮点库 可单独使用		 ;           
;------------------------------------------------;
;	以下是中型浮点库 可单独使用		 ;

;****** [浮点数代数值比较(不影响待比较操作数)] FCMP ;

;入口条件:	待比较操作数分别在[R0]和[R1]中。
;出口信息:	若CY=1,则[R0] < [R1],若CY=0且A=0则 [R0] = [R1],否则[R0] > [R1]。
;影响资源:	A、B、PSW    堆栈需求:  2字节
;调用子程序:	无
	
FCMP:	MOV	A,@R0
	XRL	A,@R1
	JNB	ACC.7,CMP2
	MOV	A,@R0
	RLC	A
	MOV	A,#0FFH
	RET
CMP2:	MOV	A,@R1
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	B,A
	MOV	A,@R0
	MOV	C,ACC.7
	MOV	F0,C
	MOV	C,ACC.6
	MOV	ACC.7,C
	CLR	C
	SUBB	A,B
	JZ	CMP6
	RLC	A
	JNB	F0,CMP5
	CPL	C
CMP5:	MOV	A,#0FFH
	RET
CMP6:	INC	R0
	INC	R0
	INC	R1
	INC	R1
	CLR	C
	MOV	A,@R0
	SUBB	A,@R1
	MOV	B,A	
	DEC	R0
	DEC	R1
	MOV	A,@R0
	SUBB	A,@R1
	DEC	R0
	DEC	R1
	ORL	A,B
	JZ	CMP7
	JNB	F0,CMP7
	CPL	C
CMP7:	RET                      

;------------------------------------------------;

;****** [浮点绝对值函数] FABS *******************;

;入口条件:	操作数在[R0]中。
;出口信息:	结果仍在[R0]中。
;影响资源:	A    堆栈需求:  2字节
;调用子程序:    无

FABS:	MOV	A,@R0
	CLR	ACC.7
	MOV	@R0,A
	RET     

;------------------------------------------------;

;****** [浮点倒数函数] FRCP *********************;

;入口条件:	操作数在[R0]中。
;出口信息:	OV=0时,结果仍在[R0]中,OV=1时,溢出。
;影响资源:	PSW、A、B、R2~R7、位1EH、1FH   堆栈需求: 5字节
;调用子程序:    2个
	
FRCP:	MOV	A,@R0
	MOV	C,ACC.7
	MOV	1FH,C
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	R5,A
	INC	R0
	MOV	A,@R0
	MOV	R6,A
	INC	R0
	MOV	A,@R0
	MOV	R7,A
	DEC	R0
	DEC	R0
	ORL	A,R6
	JNZ	RCP
	SETB	OV
	RET
RCP:	MOV	A,R6
	JB	ACC.7,RCP2
	CLR	C

⌨️ 快捷键说明

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