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

📄 floatbin.lst

📁 此程序为出租车计价器
💻 LST
📖 第 1 页 / 共 2 页
字号:
Sunplus u'nSP Assembler - Ver. 1.10.0
              Listing File Has Been Relocated
                            	//============================================================
                            	//	文件名称:	FloatBin.asm
                            	//	功能描述:	浮点数转BCD码程序
                            	//	维护记录:	2003-6-9	v1.0
                            	//	维护说明:	创建
                            	//============================================================
                            	//=============================================================================//
                            	//格 式:long int F_FloatToBCD(float Fdata)
                            	//描 述:单精度浮点数转换为BCD码的程序
                            	//输 入:Float型数据,但有效数字不超过7个十进制位,即只能转出7个BCD码
                            	//输 出:long int型数据,从高位到低位,每四个位表示一个BCD码,最后b3位表示正负数
                            	//		 b2~b0表示小数点位置,如输入数据-674.567时,输出0x6745670b
                            	//注 备:本程序纯为个人兴趣所写,时间紧,所以没有写注释,基本原则是按IEEE的Float数
                            	//       成标准推算的,如在使用中有问题可以邮件与作者联系:zhang89c51@yahoo.com.cn
                            	//       欢迎众高手参与讨论与赐教。
                            	//作 者:小丑		Mz出品			2005年10月
                            	//=============================================================================//
00000202                    	.ram
00000202 00 00              	.var uiTemp_shift
00000203 00 00 00 00        	.var uiBIN_Hight,uiBIN_Low
00000205 00 00              	.var uiBIN_FH
0000B999                    	.code
                            	M_FloatToBCD_Set: .macro 
                            		test r3,0x8000
                            		jz ?M_FloatToBCD_Set_1
                            		r3 += 0xd000
                            	?M_FloatToBCD_Set_1:
                            		test r3,0x0800
                            		jz ?M_FloatToBCD_Set_2
                            		r3 += 0xfd00
                            	?M_FloatToBCD_Set_2:
                            		test r3,0x0080
                            		jz ?M_FloatToBCD_Set_3
                            		r3 += 0xffd0
                            	?M_FloatToBCD_Set_3:
                            		test r3,0x0008
                            		jz ?M_FloatToBCD_Set_20
                            		r3 += 0xfffd
                            	?M_FloatToBCD_Set_20:	
                            		test r4,0x8000
                            		jz ?M_FloatToBCD_Set_21
                            		r4 += 0xd000
                            	?M_FloatToBCD_Set_21:
                            		test r4,0x0800
                            		jz ?M_FloatToBCD_Set_22
                            		r4 += 0xfd00
                            	?M_FloatToBCD_Set_22:
                            		test r4,0x0080
                            		jz ?M_FloatToBCD_Set_23
                            		r4 += 0xffd0
                            	?M_FloatToBCD_Set_23:
                            		test r4,0x0008
                            		jz ?M_FloatToBCD_Set_Exit
                            		r4 += 0xfffd
                            	?M_FloatToBCD_Set_Exit:
                            	.endm
                            	
0000B999                    	.code
                            	//**********************************************************************//
                            	//二进制小数转换为BCD码
                            	//
                            	//**********************************************************************//
                            	.public _F_FloatToBCD_Dot
                            	_F_FloatToBCD_Dot:
                            	F_FloatToBCD_Dot:
0000B999 88 DA              		push r5 to [sp]
0000B99A 58 9A              		r5 = 24
                            	?FloatToBCD_Dot_1:
0000B99B 62 95              		r2 = r2 lsr 1
0000B99C 88 D8              		push r4 to [sp]
0000B99D 74 99              		r4 = r4 lsr 3
0000B99E A1 93              		r1 = r1 ror 1
0000B99F 74 99              		r4 = r4 lsr 3
0000B9A0 A3 97              		r3 = r3 ror 1
0000B9A1 74 99              		r4 = r4 lsr 3
0000B9A2 88 96              		pop r4 from [sp]
0000B9A3 A4 99              		r4 = r4 ror 1
                           1		M_FloatToBCD_Set
0000B9A4 0B C7 00 80       1		test r3,0x8000
0000B9A6 02 5E             1		jz ?M_FloatToBCD_Set_1
0000B9A7 0B 07 00 D0       1		r3 += 0xd000
                           1	?M_FloatToBCD_Set_1:
0000B9A9 0B C7 00 08       1		test r3,0x0800
0000B9AB 02 5E             1		jz ?M_FloatToBCD_Set_2
0000B9AC 0B 07 00 FD       1		r3 += 0xfd00
                           1	?M_FloatToBCD_Set_2:
0000B9AE 0B C7 80 00       1		test r3,0x0080
0000B9B0 02 5E             1		jz ?M_FloatToBCD_Set_3
0000B9B1 0B 07 D0 FF       1		r3 += 0xffd0
                           1	?M_FloatToBCD_Set_3:
0000B9B3 48 C6             1		test r3,0x0008
0000B9B4 02 5E             1		jz ?M_FloatToBCD_Set_20
0000B9B5 0B 07 FD FF       1		r3 += 0xfffd
                           1	?M_FloatToBCD_Set_20:	
0000B9B7 0C C9 00 80       1		test r4,0x8000
0000B9B9 02 5E             1		jz ?M_FloatToBCD_Set_21
0000B9BA 0C 09 00 D0       1		r4 += 0xd000
                           1	?M_FloatToBCD_Set_21:
0000B9BC 0C C9 00 08       1		test r4,0x0800
0000B9BE 02 5E             1		jz ?M_FloatToBCD_Set_22
0000B9BF 0C 09 00 FD       1		r4 += 0xfd00
                           1	?M_FloatToBCD_Set_22:
0000B9C1 0C C9 80 00       1		test r4,0x0080
0000B9C3 02 5E             1		jz ?M_FloatToBCD_Set_23
0000B9C4 0C 09 D0 FF       1		r4 += 0xffd0
                           1	?M_FloatToBCD_Set_23:
0000B9C6 48 C8             1		test r4,0x0008
0000B9C7 02 5E             1		jz ?M_FloatToBCD_Set_Exit
0000B9C8 0C 09 FD FF       1		r4 += 0xfffd
                           1	?M_FloatToBCD_Set_Exit:
0000B9CA 41 2A              		r5-=1
0000B9CB 71 4E              		jnz ?FloatToBCD_Dot_1
0000B9CC 88 98              		pop r5 from [sp]
0000B9CD 90 9A              		retf
                            	//**********************************************************************//
                            	//Float单精度实数转换为BCD码
                            	//
                            	//**********************************************************************//	
                            	.public _F_FloatToBCD
                            	_F_FloatToBCD:
0000B9CE 88 DA              		push r5 to [sp]
0000B9CF 08 0B 01 00        		r5 = sp+1
0000B9D1 90 D8              		push r3,r4 to [sp]
0000B9D2 03 92              		r1 = [r5+3]
0000B9D3 04 94              		r2 = [r5+4]
0000B9D4 7A 9B              		r5 = r2 lsr 4
0000B9D5 75 9B              		r5 = r5 lsr 3
0000B9D6 0D B7 00 01        		r3 = r5 & 0x0100
0000B9D8 1B D7 05 02        		[uiBIN_FH] = r3
0000B9DA 0D BB FF 00        		r5 &= 0x00ff
0000B9DC 0A B5 7F 00        		r2 = r2 & 0x007f
0000B9DE 0A A5 80 00        		r2 = r2 | 0x0080
0000B9E0 59 93              		r1 = r1 lsl 4
0000B9E1 9A 95              		r2 = r2 rol 4
0000B9E2 59 93              		r1 = r1 lsl 4
0000B9E3 9A 95              		r2 = r2 rol 4
                            	//	push r1,r2 to [sp]
0000B9E4 0D 4B 7F 00        		cmp r5,0x007f
0000B9E6 22 1E              		jae ?F_FloatToBCD_B
0000B9E7 0B 97 7F 00        		r3 = 0x007f
0000B9E9 05 27              		r3 = r3-r5
0000B9EA 03 9B              		r5 = r3
0000B9EB 1D DB 02 02        		[uiTemp_shift] = r5
                            	?F_FloatToBCD_Low1:
0000B9ED 62 95              		r2 = r2 lsr 1
0000B9EE 75 9B              		r5 = r5 lsr 3
0000B9EF A1 93              		r1 = r1 ror 1
0000B9F0 15 9B 02 02        		r5 = [uiTemp_shift]
0000B9F2 41 2A              		r5-=1
0000B9F3 1D DB 02 02        		[uiTemp_shift] = r5
0000B9F5 49 4E              		jnz ?F_FloatToBCD_Low1
0000B9F6 7A 95              		r2 = r2 lsr 4
0000B9F7 B9 93              		r1 = r1 ror 4
0000B9F8 72 95              		r2 = r2 lsr 3
0000B9F9 65 9B              		r5 = r5 lsr 1
0000B9FA B1 93              		r1 = r1 ror 3
0000B9FB 41 9A              		r5 = 1

⌨️ 快捷键说明

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