在 8051 中向右移位一个多字节 BCD 数


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

让我们考虑一个四字节 BCD 数(45 86 02 78)存储在位置 20H、21H、22H、23H。地址 10H 保存整个 BCD 数的字节数。所以执行这段代码后,内容将向右移位,20H 将保留 00H。

地址



.
.
.
20H
45
21H
86
22H
02
23H
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 指向的地址内容被交换。在 wapping 之后,地址向右移动一个字节,然后再次交换以放置旧值并获取新值。通过使用此过程,BCD 字节被移位。

计数器值一开始增加了 1,以便比字节计数多运行程序一次。如果不增加值,则最后一个字节将不会被移动,它将被丢弃。

输出

地址



.
.
.
20H
00
21H
45
22H
86
23H
02
24H
78


.
.
.

更新于: 27-Jun-2020

306 次浏览

启动您的 职业

完成课程后获得认证

入门
广告
© . All rights reserved.