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

📄 float.asm

📁 单片机的开发环境单片机的开发环境单片机的开发环境单片机的开发环境
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;已知:a=-123.4;b=0.7577;c=56.34;d=1.276; 
;它们分别存放在30H、33H、36H、39H开始的连续四个浮点单元中。
;用BCD码浮点数表示时,分别为a=831234H;b=007577H;c=025634H;d=011276H。
;    计算   y = Ln √ | Sin (ab/c+d) |
;求解过程:通过调用BTOF子程序,将各变量转换成二进制浮点操作数,再进行各种运算,
;最后调用FTOB子程序,还原成十进制形式,供输出使用。程序如下:

FLAG	DATA	23H		;浮点运算标志
PFA	BIT	FLAG.7
PFB	BIT	FLAG.6
PFC	BIT	FLAG.5
PFD	BIT	FLAG.4

DTA	EQU	30H		;操作数a存放单元首址
DTB	DATA	33H		;操作数b存放单元首址
DTC	DATA	36H		;操作数c存放单元首址
DTD	DATA	39H		;操作数d存放单元首址
Y	DATA	3CH		;运算结果y存放单元首址

	ORG	0000H
	LJMP	MAIN

	ORG	000bH
	LJMP	t0serv

	ORG	002bH
	LJMP	t2serv
	
	ORG	0030H
MAIN:	

  setb tr0   
  SETB TR1
  setb 0C8H.2
  setb 0a8h.5
  MOV TMOD,#21H  
  setb ea 
  setb et0
 
  SETB P1.6
  
	   MOV SP,#07H
	  MOV	DTA,#83H	;a=-123.4
	MOV	DTA+1,#12H
	MOV	DTA+2,#34H
	MOV	DTB,#00H	;b=0.7577
	MOV	DTB+1,#75H
	MOV	DTB+2,#77H
	MOV	DTC,#02H	;c=56.34 
	MOV	DTC+1,#56H
	MOV	DTC+2,#34H
	MOV	DTD,#01H	;d=1.276 
	MOV	DTD+1,#12H
	MOV	DTD+2,#76H
	LCALL	TEST
STOP:	LJMP	STOP
;    运行结果,Y=804915H,即y=-0.4915,比较精确的结果应该是-0.491437。

TEST:	MOV  	R0,#DTA		;指向BCD码
	LCALL	BTOF		;将其转换成二进制浮点操作数
	MOV  	R0,#DTB		;指向BCD码浮点操作数b
	LCALL	BTOF		;将其转换成二进制浮点操作数
	MOV  	R0,#DTC		;指向BCD码浮点操作数c
	LCALL	BTOF		;将其转换成二进制浮点操作数
	MOV  	R0,#DTD		;指向BCD码浮点操作数d
	LCALL	BTOF		;将其转换成二进制浮点操作数
	MOV	R1,#DTA		;将a复制到结果存放单元Y中
	MOV	R0,#Y		;R0保持指向结果存放单元Y
	LCALL	FMOV		;
	MOV  	R1,#DTB		;指向二进制浮点操作数b
	LCALL	FMUL		;进行浮点乘法运算
	MOV  	R1,#DTC		;指向二进制浮点操作数c
	LCALL	FDIV		;进行浮点除法运算
	MOV  	R1,#DTD		;指向二进制浮点操作数d
	LCALL	FADD		;进行浮点加法运算
	LCALL	FSIN		;进行浮点正弦运算
	LCALL	FABS		;进行浮点绝对值运算
	LCALL	FSQR		;进行浮点开平方运算
	LCALL	FLN 		;进行浮点对数运算
	LCALL	FTOB		;将结果转换成BCD码浮点数
	RET
;以下为浮点子程序库
FSDT:	LCALL	MVR0
	LCALL	RLN
	LJMP	MOV0

FADD:	CLR	F0
	SJMP	AS
FSUB:	SETB	F0
AS:	LCALL	MVR1
	MOV	C,F0
	RRC	A
	XRL	A,@R1
	MOV	C,ACC.7
ASN:	MOV	PFB,C
	XRL	A,@R0
	RLC	A
	MOV	F0,C
	LCALL	MVR0
	LCALL	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,PFA
	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	PFA,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	PFB,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	EQ1
	MOV	A,R6
	MOV	R3,A
	MOV	A,R7
	MOV	R4,A
	MOV	A,R5
	MOV	R2,A
	MOV	C,PFB
	MOV	PFA,C
AS2:	RET
EQ1:	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	EQ1
	MOV	A,R2
	MOV	R5,A
	SJMP	AS4
EQ3:	MOV	A,R2
	JNB	ACC.7,EQ2
EQ4:	CLR	C
	LCALL	RR1
	ORL	A,R3
	JNZ	EQ1
	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
	LJMP	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
	LJMP	RLN
AS6:	CPL	PFA
	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
	LCALL	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:	LCALL	MVR0
	MOV	A,@R0
	XRL	A,@R1
	RLC	A
	MOV	PFA,C
	LCALL	MUL0
	LJMP	MOV0
MUL0:	LCALL	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
	LCALL	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:	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:	LCALL	MVR0
	MOV	A,@R0
	XRL	A,@R1
	RLC	A
	MOV	PFA,C
	LCALL	MVR1
	LCALL	DIV3
	LJMP	MOV0
DIV3:	CLR	C
	MOV	A,R4
	SUBB	A,R7
	MOV	A,R3
	SUBB	A,R6
	JC	DIV4
	LCALL	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
	LCALL	MD
	LJMP	RLN

FCLR:	INC	R0
	INC	R0
	CLR	A
	MOV	@R0,A
	DEC	R0
	MOV	@R0,A
	DEC	R0
	MOV	@R0,#41H
	RET

FZER:	INC	R0
	INC	R0
	MOV	A,@R0
	DEC	R0
	ORL	A,@R0
	DEC	R0
	JNZ	ZERO
	MOV	@R0,#41H
ZERO:	RET

FMOV:	INC	R0
	INC	R0
	INC	R1
	INC	R1
	MOV	A,@R1
	MOV	@R0,A
	DEC	R0
	DEC	R1
	MOV	A,@R1
	MOV	@R0,A
	DEC	R0
	DEC	R1
	MOV	A,@R1
	MOV	@R0,A
	RET

FPUS:	POP	ACC
	MOV	R2,A
	POP	ACC
	MOV	R3,A
	MOV	A,@R0
	PUSH	ACC
	INC	R0
	MOV	A,@R0
	PUSH	ACC
	INC	R0
	MOV	A,@R0
	PUSH	ACC
	DEC	R0
	DEC	R0
	MOV	A,R3
	PUSH	ACC
	MOV	A,R2
	PUSH	ACC
	RET

FPOP:	POP	ACC
	MOV	R2,A
	POP	ACC
	MOV	R3,A
	INC	R0
	INC	R0
	POP	ACC
	MOV	@R0,A
	DEC	R0
	POP	ACC
	MOV	@R0,A
	DEC	R0
	POP	ACC
	MOV	@R0,A
	MOV	A,R3
	PUSH	ACC
	MOV	A,R2
	PUSH	ACC
	RET

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:	MOV	A,@R0
	CLR	ACC.7
	MOV	@R0,A
	RET

FSGN:	INC	R0
	MOV	A,@R0
	INC	R0
	ORL	A,@R0
	DEC	R0
	DEC	R0
	JNZ	SGN
	RET
SGN:	MOV	A,@R0
	RLC	A
	MOV	A,#1
	JNC	SGN1
	MOV	A,#0FFH
SGN1:	RET

FINT:	LCALL	MVR0
	LCALL	INT
	LJMP	MOV0
INT:	MOV	A,R3
	ORL	A,R4
	JNZ	INTA
	CLR	PFA
	MOV	R2,#41H
	RET
INTA:	MOV	A,R2
	JZ	INTB
	JB	ACC.7,INTB
	CLR	C
	SUBB	A,#10H
	JC	INTD
	RET
INTB:	CLR	A	
	MOV	R4,A
	MOV	C,PFA
	RRC	A
	MOV	R3,A
	RL	A
	MOV	R2,A
	JNZ	INTC
	MOV	R2,#41H
INTC:	RET
INTD:	CLR	F0
INTE:	CLR	C
	LCALL	RR1
	ORL	C,F0
	MOV	F0,C
	CJNE	R2,#10H,INTE
	JNB	F0,INTF
	JNB	PFA,INTF
	INC	R4
	MOV	A,R4
	JNZ	INTF
	INC	R3
INTF:	LJMP	RLN

FRCP:	MOV	A,@R0
	MOV	C,ACC.7
	MOV	PFA,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
	MOV	A,R7
	RLC	A
	MOV	R7,A
	MOV	A,R6
	RLC	A
	MOV	R6,A
	DEC	R5
	SJMP	RCP
RCP2:	MOV	R2,#1
	MOV	R3,#80H
	MOV	R4,#0
	LCALL	DIV3
	LJMP	MOV0

FSQU:	MOV	A,R0
	XCH	A,R1
	PUSH	ACC
	LCALL	FMUL
	POP	ACC
	MOV	R1,A
	RET

FSQR:	MOV	A,@R0
	JNB	ACC.7,SQR
	SETB	OV
	RET
SQR:	INC	R0
	INC	R0
	MOV	A,@R0
	DEC	R0
	ORL	A,@R0
	DEC	R0
	JNZ	SQ
	MOV	@R0,#41H
	CLR	OV
	RET
SQ:	MOV	A,@R0
	MOV	C,ACC.6
	MOV	ACC.7,C
	INC	A
	CLR	C
	RRC	A
	MOV	@R0,A
	INC	R0
	JC	SQR0
	MOV	A,@R0
	RRC	A
	MOV	@R0,A
	INC	R0
	MOV	A,@R0
	RRC	A
	MOV	@R0,A
	DEC	R0
SQR0:	MOV	A,@R0
	JZ	SQR9
	MOV	R2,A
	INC	R0
	MOV	A,@R0
	MOV	R3,A
	MOV	A,R2
	ADD	A,#57H
	JC	SQR2
	ADD	A,#45H
	JC	SQR1
	ADD	A,#24H
	MOV	B,#0E3H
	MOV	R4,#80H
	SJMP	SQR3
SQR1:	MOV	B,#0B2H
	MOV	R4,#0A0H
	SJMP	SQR3
SQR2:	MOV	B,#8DH
	MOV	R4,#0D0H
SQR3:	MUL	AB
	MOV	A,B
	ADD	A,R4
	MOV	R4,A

⌨️ 快捷键说明

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