在 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 |
. . . |
廣告