Indirect Addressing Modes
5-14
AMODE ”loc16/loc32” Syntax Description
X *−− 32bitDataAddr(31:0) = XAR(ARP)
if(loc16), XAR(ARP) = XAR(ARP) + 1
if(loc32), XAR(ARP) = XAR(ARP) + 2
Example(s):
MOVL XAR2,#Array1+(N−1)*2 ; Load XAR2 with end address of Array1
MOVL XAR3,#Array2+(N−1)*2 ; Load XAR3 with end address of Array2
MOV @AR0,#N−1 ; Load AR0 with loop count N
Loop:
NOP *,ARP2 ; Set ARP pointer to point to XAR2
MOVL ACC,*−− ; Load ACC with location pointed to by XAR2,
; post−decrement XAR2
NOP *,ARP3 ; Set ARP pointer to point to XAR3
MOVL *−−,ACC ; Store ACC into location pointed to by XAR3,
; post−decrement XAR3
NOP *,ARP0 ; Set ARP pointer to point to XAR0
XBANZ Loop,*−− ; Loop until AR0 == 0, post−decrement AR0
AMODE ”loc16/loc32” Syntax Description
1 *−−,ARPn 32bitDataAddr(31:0) = XAR(ARP)
if(loc16), XAR(ARP) = XAR(ARP) + 1
if(loc32), XAR(ARP) = XAR(ARP) + 2
ARP = n
MOVL XAR2,#Array1+(N−1)*2 ; Load XAR2 with end address of Array1
MOVL XAR3,#Array2+(N−1)*2 ; Load XAR3 with end address of Array2
MOV @AR0,#N−1 ; Load AR0 with loop count N
NOP *,ARP2 ; Set ARP pointer to point to XAR2
SETC AMODE ; Make sure AMODE = 1
.lp_amode ; Tell assembler that AMODE = 1
Loop:
MOVL ACC,*−−,ARP3 ; Load ACC with location pointed to by XAR2,
; post−increment XAR2, set ARP to point
; to XAR3
MOVL *−−,ACC,ARP0 ; Store ACC into location pointed to by XAR3,
; post−increment XAR3, set ARP to point
; to XAR0
XBANZ Loop,*−−,ARP2 ; Loop until AR0 == 0, post−decrement AR0,
; set ARP pointer to point to XAR2