📄 hex to bcd.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 + -