控制工程师论坛

自动化软件

3字节的BCD转3字节的HEX

xilinxue
xilinxue

2008-11-01

BCD_TEMP_1 EQU 30H
BCD_TEMP_2 EQU 31H
BCD_TEMP_3 EQU 32H

 

 

BCD_HEX_1:
 MOV B,#10H ;分离十位和个位
 DIV AB
 MOV R5,B ;暂存个位
 MOV B,#10 ;将十位转换成十六进制
 MUL AB
 ADD A,R5 ;按十六进制加上个位
 RET
BH2功能 : 三字节BCD码整数转换成三字节十六进制整数
入口条件: 待转换的三字节BCD码整数在30H,31H,32H中。
出口信息: 转换后的三字节十六进制整数仍在30H,31H,32H中。
BCD_HEX_3:
 MOV A,BCD_TEMP_1  ;将低字节转换成十六进制
 LCALL BCD_HEX_1
 MOV BCD_TEMP_1,A
 MOV A,BCD_TEMP_2 ;将高字节转换成十六进制
 LCALL BCD_HEX_1
 MOV B,#100  ;扩大一百倍
 MUL AB
 ADD A,BCD_TEMP_1 ;和低字节按十六进制相加
 MOV BCD_TEMP_1,A
 CLR A
 ADDC A,B
 MOV BCD_TEMP_2,A
 MOV R7,BCD_TEMP_3 ;扩大一万倍
 MOV R4,#10H
 MOV R3,#27H
 LCALL NMUL21  ;单字节无符号数乘法程序,结果在R2R3R4
 MOV R7,BCD_TEMP_1
 MOV R6,BCD_TEMP_2
 MOV R5,#00H
 LCALL NADD3  ;和低双字节按十六进制相加
 MOV BCD_TEMP_1,R4
 MOV BCD_TEMP_2,R3
 MOV BCD_TEMP_3,R2
 RET

;三字节无符号数加法程序 (R2R3R4+R5R6R7)=(R2R3R4)
;入口    :R2,R3,R4,R5,R6,R7
;占用资源:ACC
;堆栈需求:2字节
;出口    :R2,R3,R4,CF
NADD3:    MOV    A,R4
          ADD    A,R7
          MOV    R4,A
          MOV    A,R3
          ADDC   A,R6
          MOV    R3,A
   MOV  A,R2
   ADDC  A,R5
   MOV  R2,A
          RET

;单字节无符号数乘法程序 (R3R4*R7)=(R2R3R4)
;入口    :R3,R4,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口    :R2,R3,R4
NMUL21   :MOV    A,R4
          MOV    B,R7
          MUL    AB
          MOV    R4,A
          MOV    A,B
          XCH    A,R3
          MOV    B,R7
          MUL    AB
          ADD    A,R3
          MOV    R3,A
          CLR    A
          ADDC   A,B
          MOV    R2,A
          CLR    OV
          RET

回帖

评论2

总共 , 当前 /
首页 | 登录 | 注册 | 返回顶部↑
手机版 | 电脑版
版权所有 Copyright(C) 2016 CE China