4 Data Transfer
4 – 4
Here is a simple example of linear indirect addressing:
I3=0x3800;
M2=0;
L3=0;
AX0=DM(I3,M2);
Here is an example which uses a memory variable to store an address
pointer:
.VAR/DM/RAM addr_ptr;
{variable holds address to be
accessed}
I3=DM(addr_ptr);
{I3 loaded using direct addressing}
L3=0;
{disable circular addressing}
M1=0;
{no post-modify of I3}
AX0=DM(I3,M1);
{AX0 loaded using indirect addressing}
4.2.3
Modulo Addressing (Circular Buffers)
The modulus logic implements automatic modulo addressing for accessing
circular data buffers. To calculate the next address, the modulus logic uses
the following information:
• The current location, found in the I register (unsigned).
• The modify value, found in the M register (signed).
• The buffer length, found in the L register (unsigned).
• The buffer base address.
From these inputs, the next address is calculated according to the formula:
Next Address = (I + M – B) Modulo (L) + B
where:
I
=
current address
M
=
modify value (signed)
B
=
base address
L
=
buffer length
M + I =
modified address
The inputs are subject to the condition:
|M| < L
This condition insures that the next address cannot wrap around the buffer
more than once in one operation.