在这个问题中,我们将看到如何将8位二进制数转换为其等效的BCD。二进制数存储在位置20H。转换后,结果将存储在30H和31H中。30H将保持MS部分,而31H将保持LS部分。
因此,让我们假设数据为D5H。程序将D5H的二进制值转换为BCD值213D。
地址 | 值 |
---|---|
。 。 。 | |
20小时 | D5 |
21小时 | |
。 。 。 |
MOVR1,#20H;Takethe address 20H into R1 MOVA,@R1;Takethe data into Acc MOVB,#0AH;LoadB with AH = 10D DIVAB ;DivideA with B MOVR5,B;Storethe remainder MOVB,#0AH;LoadB with AH = 10D DIVAB ;DivideA with B MOVR1,#30H;Loaddestination address MOV@R1,A;Storethe MS portion MOVA,B;LoadB content to A SWAPA;Swapthe nibbles ADDA,R5;Addstored remainder with A INCR1;Increasethe address MOV@R1,A HALT: SJMPHALT
在这里,我们只是将二进制数带入累加器。然后将累加器的内容除以0AH(10D)。因此,其余部分存储在单独的寄存器中。这将在以后添加。然后再次将商除以0AH,并生成MS位。在存储完MS位之后,将数字从寄存器B获取到累加器。交换累加器的半字节以在LSbit产生四个零。然后添加先前存储的余数以生成结果。
输出结果
地址 | 值 |
---|---|
。 。 。 | |
20小时 | D5 |
21小时 | |
。 。 。 | |
30小时 | 02 |
31小时 | 13 |
。 。 。 |