<< Chapter < Page | Chapter >> Page > |
For our purposes, the CPL bit is set and so we will use SPH/SP for direct addressing. SP is initialized for you in the core file and should not need to be modified. SP-referenced direct addressing is used by the
psh
and
pop
instructions for stack manipulation, as well as by all subroutine calls and returns, which save program addresses on the stack.
Examples:
; Assuming SPH = 0, SP = FF00h,
MOV *SP(5) , T2 ; T2 = value at location 00FF05h
; Assuming DPH = 3, DP = 0
MOV @0005h, T2 ; T2 = value at location 030005h
ADD *SP(6), AC0 ; AC0 = AC0 + (contents of memory location SPH:SP+6)
This seems to be TI's term for all the forms of direct
addressing which it does not call direct addressing! There are three types of adsolute addressing : k16, k23, and I/O. We will only be using the first two. It isrepresented in assembly-instruction syntax-definitions using
one of the above abbreviations (
*(lk)
addressing
is available when the syntax definition says
Smem
or
Lmem
).
k16 absolute addressing uses the operand *abs16(#k16) along with the 7-bit DPH to form a 23-bit address.
Example:
; Assuming DPH = 3
MOV *abs16(#2002h), T2 ; T2 = value at address 032002h
k23 absolute addressing uses the operand *(#k23) as a 23-bit address.
Example:
MOV *(#032002h), T2 ; T2 = value at location 032002h
MOV AR1, *(#hold) ; sets (storage location at hold) = AR1
Indirect addressing on the TMS320C55x uses
the auxiliary registers
AR0
through
AR7
and the
CDP
. They can be used in place of
Smem/Lmem
or
Xmem/Ymem
.
In
Smem/Lmem
indirect addressing, only one indirect address is used int he instruction and a number of variations is possible (see the table on page 6-39 of the
CPU Reference guide). An asterisk is always used, which usually signifies indirect addressing. Any of the registers
AR0
-
AR7
may be used, with optional modifications: automatic post-decrement by one, pre- and post-increment by one, post-increment and post-decrement by
n
(
n
being stored in T0, T1, or AR0), and more, including many options for circular addressing (which automatically implements circular buffers) and bit-revered 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
,
T0
, or
T1
with circular addressing.
ADD Xmem, Ymem, ACx
ADD *AR1+, *AR2+, AC0 ; Add values stored in memory locations referenced by
; AR1 and AR2 and store result in AC0.
; Incremement AR1 and AR2 by 1 with or without circular
; addressing depending on circular addressing bit
; for the respective auxiliary registers
Notification Switch
Would you like to follow the 'Digital signal processing laboratory (ece 420 55x)' conversation and receive update notifications?