任务描述
DEC0 DEC1 DEC2 存放"十进制"数 eg:03 35 96
HEX0 HEX1存放十六进制数 eg:83 3C
任务原理
本质是BCD码转二进制
所谓的十进制 如“15”,对应的是 0x15H 这一个十六进制数,而0x15的十进制数为21,二进制为0001 0101(就是1 “和” 5)
所以,我们要做的是 把每一位十进制的BCD码提出来,附上相应的权重,结果本质为普通的二进制,表现为十六进制(这听起来很绕口)但是在keil里跑一下会更好理解(后面会结合代码分析)
方案Ⅰ
思路
循环—> (HEX*10)+TMP
1.从高位开始 提取“十进制”的每一位数(半个byte存一位)
2.带进位的循环
(进位:HEX1溢出的存进HEX0)
(循环:结果存回HEX1 HEX0中)
代码
40H 41H 42H 为DEC0 DEC1 DEC2
R1 R2 为 HEX0 HEX1
ORG 0000H
LJMP MAIN
ORG 0100H
LOOP: MOV A,R2
MOV B,#0AH ;DEC = 10
MUL AB
MOV R5,B ;JW
MOV R2,A
MOV A,R1
MOV B,#0AH ;DEC = 10
MUL AB
ADD A,R5 ;+JW
MOV R1,A ;R1R2*10
;2BYTE + 1BYTE: R1R2 + R6
MOV A,R6
ADDC A,R2
MOV R2,A
MOV A,#00H
ADDC A,R1
MO