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

📄 hex to bcd.asm

📁 16路巡检仪 该仪表采用c语言编写
💻 ASM
字号:



;					/*************************************************************************************
;					程序公布原因: 在目前所发表的十六进制转化成BCD码的处法中,一般都采用移位相加的方法,
;					其计算过程都比较费时,不适宜很多场合,且很多不适宜C语言调用。而在
;					C语言中,有些初学者用求余的方法来做这种运算,造成程序十分臃肿。下面
;					这段程序仿照竖式除法来进行运算,速度超快。
;					程序来源: http://www.yymcu.com
;					作者: lisenda
;					程序作用: 把位于-999至9999的十六进制转化成四位BCD码
;					KEILC51调用格式: void Hex2Bcd(signed int,uchar *hextemp);
;					程序外部数据: unsigned char data BcdData[4];
;					程序入口: 即调用函数参数;
;					程序出口: 转换后的数据保存在BcdData[0],BcdData[1],BcdData[2],BcdData[3],
;					分别为千位,百位,十位,个位,若BcdData[0]中为0x0a,则表示负号;
;					例子: 若调用Hex2Bcd(9876),
;					则BcdData[0]=0x09,BcdData[1]=0x08,BcdData[2]=0x07,BcdData[3]=0x06;
;					若调用Hex2Bcd(-123),
;					则BcdData[0]=0x0a,BcdData[1]=0x01,BcdData[2]=0x02,BcdData[3]=0x03;
;					若调用Hex2Bcd(123),
;					则BcdData[0]=0x00,BcdData[1]=0x01,BcdData[2]=0x02,BcdData[3]=0x03;
;					欢迎防问: http://www.yymcu.com
;					*************************************************************************************/

					
					//NAME	HEX2BCD
					?PR?_HEX2BCD SEGMENT CODE
;					EXTRN DATA(Fpublicvar)
					PUBLIC _Hex2Bcd
					RSEG ?PR?_HEX2Bcd
					_Hex2Bcd:
					USING	0
					PUSH ACC
					;PUSH	AR5
        				PUSH    AR1
					CLR A
					MOV @R1,A ;正负号初始化
					MOV A,R6
					JNB ACC.7,H2B
;					MOV Fpublicvar,#0AH ;建负号标志
					MOV @R1,#24 ;建负号标志
					CPL A
					MOV R6,A
					MOV A,R7
					CPL A
					INC A
					MOV R7,A
					JNZ H2B
					INC R6
		H2B: MOV R4,#0AH
					MOV B,R4
					MOV A,R6
					DIV AB
					MOV R6,A
					MOV A,R7
					ANL A,#0F0H
					ORL A,B
					SWAP A
					MOV B,R4
					DIV AB
	;				MOV R2,A
					mov	r5,a
					MOV A,R7
					SWAP A
					ANL A,#0F0H
					ORL A,B
					SWAP A
					MOV B,R4
					DIV AB
					INC	R1
					INC	R1
					INC	R1
					MOV @R1,B ;得到个位
					SWAP A
;					ORL A,R2
					ORL	a,r5
					SWAP A
					MOV R7,A ;第一次除法完成
					ANL A,#0F0H
					ORL A,R6
					SWAP A
					MOV B,#0AH
					DIV AB
					SWAP A
;					MOV R1,A ;存入高位商
					mov	r5,a

					MOV A,R7
					ANL A,#0FH
					SWAP A
					ORL A,B
					SWAP A
					MOV B,R4
					DIV AB ;第二次除法完成
					DEC	R1
					MOV @R1,B ;保存BCD十位
;					ORL A,R1
					orl	a,r5

					MOV B,R4
					DIV AB
					DEC	R1
					MOV @R1,B ;保存百位
					JZ Hex2BcdRet    ;
					DEC	R1
					CJNE	@R1,#24,huhao  ;
					MOV		@R1,#27  ;显示 -1
				  LJMP  Hex2BcdRet 
huhao:		MOV @R1,A ;保存千位
          
					;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Hex2BcdRet: POP             AR1
					;POP		AR5
					;LCALL	DIG_HIDE	;调用消隐模块
					POP ACC
					RET
					
		
		
		END		

⌨️ 快捷键说明

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