S3F84B8_UM_REV 1.00
2 ADDRESS SPACES
2-10
2.3.2 USING THE REGISTER POINTS (RP)
Register pointers RP0 and RP1, mapped to addresses D6H and D7H in set 1, are used to select two movable 8
byte working register slices in the register file. After a reset, they point to the working register common area: RP0
points to addresses C0H–C7H, and RP1 points to addresses C8H–CFH.
To change a register pointer value, you load a new value to RP0 and/or RP1 using an SRP or LD instruction (see
Using working register addressing, you can only access two 8-bit slices of the register file that are currently
pointed by RP0 and RP1. However, you cannot use the register pointers to select a working register space in set
2, C0H–FFH, because these locations can be accessed by only using the Indirect Register or Indexed addressing
modes.
Usually, the selected 16 byte working register block consists of two contiguous 8 byte slices. As a general
programming guideline, it is recommended that RP0 point to the “lower” slice and RP1 point to the “upper” slice
(see
). In some cases, it may be necessary to define working register areas in different (non-
contiguous) areas of the register file. In
, RP0 and RP1 point to the “upper” slice and “lower” slice
respectively.
Since a register pointer can point to either of the two 8 byte slices in the working register block, you can define the
working register area to support program requirements.
Example 2-1 Setting the Register Pointers
SRP
#70H
;
RP0
70H, RP1
78H
SRP1
#48H
;
RP0
no change, RP1
48H,
SRP0
#0A0H
;
RP0
A0H, RP1
no change
CLR
RP0
;
RP0
00H, RP1
no change
LD
RP1,
#0F8H
;
RP0
no change, RP1
0F8H
FH (R15)
0H (R0)
16-Byte
Contiguous
Working
Register block
Register File
Contains 32
8-Byte Slices
RP0
RP1
8H
7H
0 0 0 0 1 X X X
0 0 0 0 0 X X X
8-Byte Slice
8-Byte Slice
Figure 2-7 Contiguous 16 Byte Working Register Block