?? 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 + -