在这里,我们将看到一个将某些多字节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 |
。 。 。 |