<< Chapter < Page | Chapter >> Page > |
Examples:
hold .word 1 ; reserve one word of storage and initialize to 1
count .word 0 ; reserve one word of storage and initialize to 0
. . . .
ld *(count),B ; sets B = 0 (assuming memory was not changed)
st T,*(hold) ; sets (storage location at address hold) = T
Indirect addressing on the TMS320C54x always uses
the auxiliary registers
AR0
through
AR7
and comes in two basic flavors. These are
easily recognized from the assembly language syntaxdescriptions as either
Smem
or
Xmem/Ymem
.
In
Smem
indirect addressing, only one indirect
address is used in the instruction and a number ofvariations is possible (see the table on page 5-13 of the
CPU
and Peripherals reference). An asterisk is always
used, which signifies indirect addressing. Any of theregisters
AR0
-
AR7
may be used,
with optional modifications: automatic post-decrement byone, pre- and post-increment by one, post-increment and
post-decrement by
n
(
n
being
stored in
AR0
), and more, including many
options for circular addressing (which automaticallyimplements circular buffers) and bit-reversed addressing
(which is useful for FFTs).
Xmem/Ymem
indirect addressing is generally used
in instructions that need two different indirect addresses,although there are a few instances where an
Xmem
by itself is specified in order to save
bits in the opcode for other options. In
Xmem/Ymem
indirect addressing, fewer bits are
used to encode the option modifiers in the opcode; hence,fewer options are available: post-increment by one,
post-decrement by one, and post-increment by
AR0
with circular addressing.
Examples:
stl B,*AR6 ; sets (contents of location pointed to by AR6) = low word of B
stl B,*AR6+0% ; sets (contents of location pointed to by AR6) = low word of B,
; then increments AR6 with circular addressing
mar *+AR3(-6) ; decrements AR3 by 6 (increment by -6)
mar
(modify address register) instruction
is unusual in the sense that it takes an
Smem
operand but does nothing with the data pointed to by the
ARx
register. Its purpose is to perform any
of the allowed register modifications discussed abovewithout having to do anything else. This is often handy
when you are using an
Xmem/Ymem
-type
instruction but need to do an
ARx
modification that is only allowed with an
Smem
-type operand.The
ld
instruction is illustrative of the many
possible addressing modes which can be selected with theproper choice of assembly language syntax:
ld #0,A ; immediate data: sets A = 0
ld 0,A ; DP-referenced direct: sets A = (contents of the address DP + 0)
ld mydata,A ; DP-referenced direct: sets A = (contents of the address
; DP + lower seven bits of mydata)
ld #mydata,A ; immediate data: sets A = 16 bit address mydata
ld *(mydata),A ; *(lk) direct: sets A = (contents of the 16 bit address mydata)
ld B,A ; accumulator: sets A = B
ld *AR1+,A ; indirect: sets A = (contents of address pointed to by AR1),
; and afterwards increments AR1 by one
ldm AR2,A ; memory-mapped register: sets A = AR2
Notification Switch
Would you like to follow the 'Ece 320 - spring 2003' conversation and receive update notifications?