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

📄 计算.asm

📁 用光电耦合器测量出重物下降过程中经过任何等距离且在同一垂直线上的三点时间间隔t1,t2,及距离h
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	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				;将结果存回R3R4
	MOV	R4,A
	CLR	A
	ADDC	A,R0
	MOV	R3,A
	POP	ACC				;恢复R0R1R2
	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				;规格化

;(26)  标号;  BTOF    功能;浮点BCD码转换成格式化浮点数
;入口条件;浮点BCD码操作数在[R0]中。
;出口信息;转换成的格式化浮点数仍在[R0]中。
;影响资源;PSW、A、B、R2~R7、位1DH~1FH  堆栈需求;6字节

BTOF:	INC	R0			;判断是否为零。
	INC	R0
	MOV	A,@R0
	MOV	R7,A
	DEC	R0
	MOV	A,@R0
	MOV	R6,A
	DEC	R0
	ORL	A,R7
	JNZ	BTF0
	MOV	@R0,#41H		;为零,转换结束。
	RET
BTF0:	MOV	A,@R0
	MOV	C,ACC.7
	MOV	1DH,C			;保存数符。
	CLR	1FH			;以绝对值进行转换。
	MOV	C,ACC.6			;扩充阶码为八位。
	MOV	ACC.7,C
	MOV	@R0,A
	JNC	BTF1
	ADD	A,#19			;是否小于1E-19?
	JC	BTF2
	MOV	@R0,#41H		;小于1E-19时以0计。
	INC	R0
	MOV	@R0,#0
	INC	R0
	MOV	@R0,#0
	DEC	R0
	DEC	R0
	RET
BTF1:	SUBB	A,#19
	JC	BTF2
	MOV	A,#3FH			;大于1E19时封顶。
	MOV	C,1DH
	MOV	ACC.7,C
	MOV	@R0,A
	INC	R0
	MOV	@R0,#0FFH
	INC	R0
	MOV	@R0,#0FFH
	DEC	R0
	DEC	R0
	RET
BTF2:	CLR	A			;准备将BCD码尾数转换成十六进制浮点数。
	MOV	R4,A
	MOV	R3,A
	MOV	R2,#10H			;至少两个字节。
BTF3:	MOV	A,R7
	ADD	A,R7
	DA	A
	MOV	R7,A
	MOV	A,R6
	ADDC	A,R6
	DA	A
	MOV	R6,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	DEC	R2
	JNB	ACC.7,BTF3		;直到尾数规格化。
	MOV	A,R6			;四舍五入。
	ADD	A,#0B0H
	CLR	A
	ADDC	A,R4
	MOV	R4,A
	CLR	A
	ADDC	A,R3
	MOV	R3,A
	JNC	BTF4
	MOV	R3,#80H
	INC	R2
BTF4:	MOV	DPTR,#BTFL		;准备查表得到十进制阶码对应的浮点数。
	MOV	A,@R0
	ADD	A,#19			;计算表格偏移量。
	MOV	B,#3
	MUL	AB
	ADD	A,DPL
	MOV	DPL,A
	JNC	BTF5
	INC	DPH
BTF5:	CLR	A			;查表。
	MOVC	A,@A+DPTR
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	R5,A
	MOV	A,#1
	MOVC	A,@A+DPTR
	MOV	R6,A
	MOV	A,#2
	MOVC	A,@A+DPTR
	MOV	R7,A
	LCALL	MUL1			;将阶码对应的浮点数和尾数对应的浮点数相乘。
	MOV	C,1DH			;取出数符。
	MOV	1FH,C
	LJMP	MOV0			;传送转换结果。


;(17)  标号; HB2   功能;双字节十六进制整数转换成双字节BCD码整数
;入口条件;待转换的双字节十六进制整数在R6、R7中。
;出口信息;转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源;PSW、A、R2~R7    堆栈需求;  2字节

ZHB2:	CLR	A			;BCD码初始化
	MOV	R3,A
	MOV	R4,A
	MOV	R5,A
	MOV	R2,#10H			;转换双字节十六进制整数
ZHB3:	MOV	A,R7			;从高端移出待转换数的一位到CY中
	RLC	A
	MOV	R7,A
	MOV	A,R6
	RLC	A
	MOV	R6,A
	MOV	A,R5			;BCD码带进位自身相加,相当于乘2
	ADDC	A,R5
	DA	A			;十进制调整
	MOV	R5,A
	MOV	A,R4
	ADDC	A,R4
	DA	A
	MOV	R4,A
	MOV	A,R3
	ADDC	A,R3
	MOV	R3,A			;双字节十六进制数的万位数不超过6,不用调整
	DJNZ	R2,ZHB3			;处理完16bit
	RET 	
;(;4)  标号;  FMUL    功能;浮点数乘法
;入口条件;被乘数在[R0]中,乘数在[R1]中。
;出口信息;OV=0时,积仍在[R0]中,OV=1时,溢出。
;影响资源;PSW、A、B、R2~R7、位1EH、1FH    堆栈需求;6字节

FMUL:	LCALL	MVR0			;将[R0]传送到第一工作区中
	MOV	A,@R0
	XRL	A,@R1			;比较两个操作数的符号
	RLC	A
	MOV	1FH,C			;保存积的符号
	LCALL	MUL0			;计算积的绝对值
	LJMP	MOV0			;将结果传回到[R0]中
MUL0:	LCALL	MVR1			;将[R1]传送到第二工作区中
MUL1:	MOV	A,R3			;第一尾数为零否?
	ORL	A,R4
	JZ	MUL6
	MOV	A,R6			;第二尾数为零否?
	ORL	A,R7
	JZ	MUL5
	MOV	A,R7			;计算R3R4×R6R7-→R3R4
	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


;(27)  标号;  FTOB    功能:格式化浮点数转换成浮点BCD码
;入口条件:格式化浮点操作数在[R0]中。
;出口信息:转换成的浮点BCD码仍在[R0]中。
;影响资源:PSW、A、B、R2~R7、位1DH~1FH   堆栈需求:6字节

FTOB:	INC	R0
	MOV	A,@R0
	INC	R0
	ORL	A,@R0
	DEC	R0
	DEC	R0
	JNZ	FTB0
	MOV	@R0,#41H
	RET
FTB0:	MOV	A,@R0
	MOV	C,ACC.7
	MOV	1DH,C
	CLR	ACC.7
	MOV	@R0,A
	LCALL	MVR0
	MOV	DPTR,#BFL0		;绝对值大于或等于1时的查表起点。
	MOV	B,#0			;十的0次幂。
	MOV	A,R2
	JNB	ACC.7,FTB1
	MOV	DPTR,#BTFL		;绝对值小于1E-6时的查表起点。
	MOV	B,#0EDH			;十的-19次幂。
	ADD	A,#16
	JNC	FTB1
	MOV	DPTR,#BFLN		;绝对值大于或等于1E-6时的查表起点。
	MOV	B,#0FAH			;十的-6次幂。
FTB1:	CLR	A			;查表,找到一个比待转换浮点数大的整数幂。
	MOVC	A,@A+DPTR
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	R5,A
	MOV	A,#1
	MOVC	A,@A+DPTR
	MOV	R6,A
	MOV	A,#2
	MOVC	A,@A+DPTR
	MOV	R7,A
	MOV	A,R5			;和待转换浮点数比较。
	CLR	C
	SUBB	A,R2
	JB	ACC.7,FTB2		;差为负数。	
	JNZ	FTB3
	MOV	A,R6
	CLR	C
	SUBB	A,R3
	JC	FTB2
	JNZ	FTB3
	MOV	A,R7
	CLR	C
	SUBB	A,R4
	JC	FTB2
	JNZ	FTB3
	MOV	R5,B			;正好是表格中的数。
	INC	R5			;幂加一。
	MOV	R6,#10H			;尾数为0·1000。
	MOV	R7,#0
	SJMP	FTB6			;传送转换结果。
FTB2:	INC	DPTR			;准备表格下一项。
	INC	DPTR
	INC	DPTR
	INC	B			;幂加一。
	SJMP	FTB1			;	
FTB3:	PUSH	B			;保存幂值。
	LCALL	DIV3			;相除,得到一个二进制浮点数的纯小数。
FTB4:	MOV	A,R2			;取阶码。
	JZ	FTB5			;为零吗?
	CLR	C
	LCALL	RR1			;右规。
	SJMP	FTB4
FTB5:	POP	ACC			;取出幂值。
	MOV	R5,A			;作为十进制浮点数的阶码。
	LCALL	HB2			;转换尾数的十分位和百分位。
	MOV	R6,A
	LCALL	HB2			;转换尾数的千分位和万分位。
	MOV	R7,A
	MOV	A,R3			;四舍五入。
	RLC	A
	CLR	A
	ADDC	A,R7
	DA	A
	MOV	R7,A
	CLR	A
	ADDC	A,R6
	DA	A
	MOV	R6,A
	JNC	FTB6
	MOV	R6,#10H
	INC	R5
FTB6:	INC	R0			;存放转换结果。
	INC	R0
	MOV	A,R7
	MOV	@R0,A
	DEC	R0
	MOV	A,R6
	MOV	@R0,A
	DEC	R0
	MOV	A,R5
	MOV	C,1DH			;取出数符。
	MOV	ACC.7,C
	MOV	@R0,A	
	RET
HB2:	MOV	A,R4			;尾数扩大100倍。
	MOV	B,#100
	MUL	AB
	MOV	R4,A
	MOV	A,B
	XCH	A,R3
	MOV	B,#100
	MUL	AB
	ADD	A,R3
	MOV	R3,A
	JNC	HB21
	INC	B
HB21:	MOV	A,B			;将整数部分转换成BCD码。
	MOV	B,#10
	DIV	AB
	SWAP	A
	ORL	A,B
	RET
BTFL:	DB	41H,0ECH,1EH		;1.0000E-19
	DB	45H,93H,93H		;1.0000E-18
	DB	48H,0B8H,78H		;1.0000E-17
	DB	4BH,0E6H,96H		;1.0000E-16
	DB	4FH,90H,1DH		;1.0000E-15
	DB	52H,0B4H,25H		;1.0000E-14
	DB	55H,0E1H,2EH		;1.0000E-13
	DB	59H,8CH,0BDH		;1.0000E-12
	DB	5CH,0AFH,0ECH		;1.0000E-11
	DB	5FH,0DBH,0E7H		;1.0000E-10
	DB	63H,89H,70H		;1.0000E-9
	DB	66H,0ABH,0CCH		;1.0000E-8
	DB	69H,0D6H,0C0H		;1.0000E-7
BFLN:	DB	6DH,86H,38H		;1.0000E-6
	DB	70H,0A7H,0C6H		;1.0000E-5
	DB	73H,0D1H,0B7H		;1.0000E-4
	DB	77H,83H,12H		;1.0000E-3
	DB	7AH,0A3H,0D7H		;1.0000E-2
	DB	7DH,0CCH,0CDH		;1.0000E-1
BFL0:	DB	1,80H,00H		;1.0000
	DB	4,0A0H,00H		;1.0000E1
	DB	7,0C8H,00H		;1.0000E2
	DB	0AH,0FAH,00H		;1.0000E3
	DB	0EH,9CH,40H		;1.0000E4
	DB	11H,0C3H,50H		;1.0000E5
	DB	14H,0F4H,24H		;1.0000E6
	DB	18H,98H,97H		;1.0000E7
	DB	1BH,0BEH,0BCH		;1.0000E8
	DB	1EH,0EEH,6BH		;1.0000E9
	DB	22H,95H,03H		;1.0000E10
	DB	25H,0BAH,44H		;1.0000E11
	DB	28H,0E8H,0D5H		;1.0000E12
	DB	2CH,91H,85H		;1.0000E13
	DB	2FH,0B5H,0E6H		;1.0000E14
	DB	32H,0E3H,60H		;1.0000E15
	DB	36H,8EH,1CH		;1.0000E16
	DB	39H,31H,0A3H		;1.0000E17
	DB	3CH,0DEH,0BH		;1.0000E18
	DB	40H,8AH,0C7H		;1.0000E19	  
	END

⌨️ 快捷键说明

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