Maxim Integrated DS4830A Optical Microcontroller User Manual
Page 194
![background image](/manuals/698520/194/background.png)
DS4830A User’s Guide
194
• MOVE Acc, src
(Copy data from source to active accumulator)
• MOVE dst, Acc
(Copy data from active accumulator to destination)
• MOVE Acc, Acc
(Recirculation of active accumulator contents)
• XCHN
(Exchange nibbles within each byte of active accumulator)
• XCH
(Exchange active accumulator bytes)
The active accumulator may not be the source in any instruction where it is also the implicit destination.
There is an additional notation that can be used to refer to the active accumulator for the instruction “MOVE dst,
Acc”. If the instruction is instead written as “MOVE dst, A[AP]”, the source value is still the active accumulator, but no
AP auto-increment or auto-decrement function will take place, even if this function is enabled. Note that the active
accumulator may not be the destination for the MOVE dst, A[AP] instruction (i.e. MOVE Acc, A[AP] is prohibited).
So, the two instructions
move A[7], Acc
move A[7], A[AP]
are equivalent except that the first instruction triggers auto-inc/dec (if it is enabled), while the second one will never
do so.
The Accumulator Pointer Control Register (APC) controls the automatic increment/decrement mode as well as
selects the range of bits (modulo) in the AP register that will be incremented or decremented. There are nine
different unique settings for the APC register, as listed in Table 23-1.
Table 23-1. Accumulator Pointer Control Register Settings
APC.2
(MOD2)
APC.1
(MOD1)
APC.0
(MOD0)
APC.6
(IDS)
APC
AUTO-INCREMENT/-DECREMENT SETTING
0
0
0
0
00h
No auto-increment/decrement (default mode)
0
0
1
0
01h
Increment bit 0 of AP (modulo 2)
0
0
1
1
41h
Decrement bit 0 of AP (modulo 2)
0
1
0
0
02h
Increment bits [1:0] of AP (modulo 4)
0
1
0
1
42h
Decrement bits [1:0] of AP (modulo 4)
0
1
1
0
03h
Increment bits [2:0] of AP (modulo 8)
0
1
1
1
43h
Decrement bits [2:0] of AP (modulo 8)
1
0
0
0
04h
Increment all 4 bits of AP (modulo 16)
1
0
0
1
44h
Decrement all 4 bits of AP (modulo 16)
For the modulo increment or decrement operation, the selected range of bits in AP are incremented or decremented.
However, if these bits roll over or under, they simply wrap around without affecting the remaining bits in the
accumulator pointer. So, the operations can be defined as follows:
• Increment modulo 2:
AP = AP[3:1] + ((AP[0] + 1) mod 2)
• Decrement modulo 2:
AP = AP[3:1] + ((AP[0] – 1) mod 2)
• Increment modulo 4:
AP = AP[3:2] + ((AP[1:0] + 1) mod 4)
• Decrement modulo 4:
AP = AP[3:2] + ((AP[1:0] – 1) mod 4)
• Increment modulo 8:
AP = AP[3] + ((AP[2:0] + 1) mod 8)
• Decrement modulo 8:
AP = AP[3] + ((AP[2:0] – 1) mod 8)
• Increment modulo 16:
AP = (AP + 1) mod 16
• Decrement modulo 16:
AP = (AP – 1) mod 16
For this example, assume that all 16 accumulator registers are initially set to zero.
move AP, #02h
; select A[2] as active accumulator
move APC, #02h
; auto-increment AP[1:0] modulo 4
; AP A[0] A[1] A[2] A[3]
; 02 0000 0000 0000 0000
add #01h
; 03 0000 0000 0001 0000
add #02h
; 00 0000 0000 0001 0002
add #03h
; 01 0003 0000 0001 0002
add #04h
; 02 0003 0004 0001 0002
add #05h
; 03 0003 0004 0006 0002