String Instructions
4-56
A1 string is 0x233EFBCA1223 and *0x200 = 0x9086EE3412AC. STR =
3–2=1, defines a string length of 3. Final result, A1~ string =
0x233EFB 0x9086EE3412AC = 0xB3C5E9FE24CF, AC5=0x24CF,
AC6=0xE9FE, AC7=0xB3C5, STR=2 (unchanged). Notice that this instruction
has accumulated a carry.
Special String Sequences: There are two string instructions that have a
special meaning. If any of the following instructions: MULAPL, MULSPL,
MULTPL, SHLAPL, SHLSPL, SHLTPL, EXTSGNS, MOVAPH immediately
precedes ADDS An[~],An[~],PH and SUBS An[~],An[~],PH, the following
things happen:
1) Carry generated by the preceding instruction is used in computation.
2) Interrupts can occur between these instructions.
3) All instructions in the sequence execute as a single string operation. So,
An[~] accumulator pointed by the first instruction of the sequence should
be used for the remaining instructions in the sequence and changing the
value of n on one of the above instructions in the sequence has no effect.
4) Accumulators used by ADDS and SUBS (when used with PH) auto–incre-
ment internal registers, not APn. So subsequent ADDS and SUBS (im-
mediately following) instructions write into higher accumulators.
5) The sequence ends with ADDS or SUBS (used with PH).
6) These sequences may not give same result when single step debugging
because, single stepping changes the internal state. They should be used
either with a hardware breakpoint or with fast run mode. The breakpoint
should be set after the sequence ends.
For example,
MULAPL A0, A0~
ADDS A0, A0, PH
The first instruction performs a multiply-accumulate with MR and A0~, and
stores PL in A0. The second instruction adds PH to the second word of
memory string A0 and puts the result in accumulator string A0~. The MULAPL
– ADDS sequence is a special sequence. If A0 is AC0=0xFFFF and MR=0xFF,
after execution AC0=0xFF01, AC1=0x00FE. If you replace ADDS A0, A0, PH
with ADDS A1, A1, PH and A1 points to a different accumulator, the result is
still the same. This is because, the state generated by MULAPL (and other
similar instructions described above) is used by ADDS instruction. If another
ADDS A0, A0, PH instruction follows the previous one, AC2=0x00FE since the
ADDS instruction auto–increments an internal register (not APn). The same
reason applies for SUBS An[~],An[~],PH instruction. IMPORTANT: Interrupts
may occur between these sequences and the result can be incorrect if the in-
terrupt service changes the state of the processor To prevent interrupts from
happening, use the INTD instruction before the execution of the sequence and
an INTE afterwards.
Summary of Contents for MSP50C6xx
Page 6: ...vi...
Page 14: ...xiv...
Page 24: ...1 10...
Page 296: ...Instruction Set Summay 4 210 Assembly Language Instructions...
Page 366: ...6 12...