21/163
uPSD3212A, uPSD3212C, uPSD3212CVFirst, pointers R1 and R0 are set up to point to the
two bytes containing the last four BCD digits. Then
a loop is executed which leaves the last byte, loca-
tion 2EH, holding the last two digits of the shifted
number. The pointers are decremented, and the
loop is repeated for location 2DH. The CJNE in-
struction (Compare and Jump if Not equal) is a
loop control that will be described later. The loop
executed from LOOP to CJNE for R1 = 2EH, 2DH,
2CH, and 2BH. At that point the digit that was orig-
inally shifted out on the right has propagated to lo-
cation 2AH. Since that location should be left with
0s, the lost digit is moved to the Accumulator.
Table 7. Shifting a BCD Number Two Digits to
the Right (using direct MOVs: 14 bytes)
Table 8. Shifting a BCD Number Two Digits to
the Right (using direct XCHs: 9 bytes)
Table 9. Shifting a BCD Number One Digit to the Right
2A 2B 2C 2D 2E ACC
MOV A,2Eh 00 12 34 56 78 78
MOV 2Eh,2Dh 00 12 34 56 56 78
MOV 2Dh,2Ch 00 12 34 34 56 78
MOV 2Ch,2Bh 00 12 12 34 56 78
MOV2Bh,#0 0000123456 78
2A 2B 2C 2D 2E ACC
CLR A 00 12 34 56 78 00
XCH A,2Bh 00 00 34 56 78 12
XCH A,2Ch 00 00 12 56 78 34
XCH A,2Dh 00 00 12 34 78 56
XCH A,2Eh 00 00 12 34 56 78
2A 2B 2C 2D 2E ACC
MOV R1,#2Eh 00 12 34 56 78 xx
MOV R0,#2Dh 00 12 34 56 78 xx
; loop for R1 = 2Eh
LOOP:MOV A,@R1 001234567878
XCHD A,@R0 0012345878 76
SWAP A 00 12 34 58 78 67
MOV @R1,A 00 12 34 58 67 67
DEC R1 001234586767
DEC R0 001234586767
CNJE R1,#2Ah,LO OP 00 12 34 58 67 67
; loop for R1 = 2Dh 00 12 38 45 67 45
; loop for R1 = 2Ch 00 18 23 45 67 23
; loop for R1 = 2Bh 08 01 23 45 67 01
CLR A 08 01 23 45 67 00
XCH A,2Ah 00 01 23 45 67 08