在8051中向右移动多字节BCD编号

在这里,我们将看到一个将某些多字节BCD编号向右移动的问题。BCD编号移位两位数(8位)。 

让我们考虑一个四字节的BCD编号(45 86 02 78)存储在位置20H,21H,22H,23H。地址10H保持整个BCD编号的字节数。因此,执行此代码后,内容将向右移动,而20H将保持00H。

地址






20小时
45
21小时
86
22小时
02
23小时
78









程序

        CLRA;Clear the Register A
        MOVR2,10H;TakeByte Count
        INCR2;Increase R2 for loop
        MOVR1,#20H;Takethe address 20H into R1
LOOP:   XCHA,@R1; Get content, which is pointed out by R1 value
        INCR1;IncreaseR1 for next location
        JNZR2, LOOP ;Check R2 is 0 or not to loop back
HALT:   SJMPHALT ;Stop the program

这里使用XCH指令。通过使用该指令,将交换寄存器A的值和R1指向的地址的内容。换完后,地址向右移动一个字节,然后再次交换以放入旧值并取新值。通过使用此过程,BCD字节被移位。

在开始运行程序时,计数器值增加1,其值比字节数多一。如果该值未增加,则最后一个字节将不移位,将被丢弃。

输出结果

地址






20小时
00
21小时
45
22小时
86
23小时
02
24小时
78