ADDRESSING
4 - 20 ADDRESS GENERATION UNIT MOTOROLA
as 0, 32, 64, 96, 128, 160, etc. For this example, L is arbitrarily chosen to be 2, making
the lower boundary 64. The upper boundary of the buffer is then 84 (the lower boundary
plus 20 (M–1)). The Mn register is loaded with the value 20 (M–1). The offset register is
arbitrarily chosen to be 15 (NnM). The address pointer is not required to start at the lower
address boundary and can begin anywhere within the defined modulo address range —
i.e., within the lower boundary + (2k) address region. The address pointer, Rn, is arbitrarily
chosen to be 75 in this example. When R2 is post-incremented by the offset by the MOVE
instruction, instead of pointing to 90 (as it would in the linear mode) it wraps around to 69.
If the address register pointer increments past the upper boundary of the buffer (base ad-
dress plus M–1), it will wrap around to the base address. If the address decrements past
the lower boundary (base address), it will wrap around to the base address plus M–1.
If Rn is outside the valid modulo buffer range and an operation occurs that causes Rn to
be updated, the contents of Rn will be updated according to modulo arithmetic rules. For
example, a MOVE B0,X:(R0)+ N0 instruction (where R0=6, M0=5, and N0=0) would ap-
parently leave R0 unchanged since N0=0. However, since R0 is above the upper
boundary, the AGU calculates R0+ N0–M0–1 for the new contents of R0 and sets R0=0.
(Rn) ± Nn MOD M
WHERE Nn = 2k (i.e., P = 1)
M
M
2k
2k
Figure 4-12 Linear Addressing with a Modulo Modifier