ADD ACC,#16bit<<#0..15
6-22
ADD ACC,#16bit<<#0..15 Add Value to Accumulator
SYNTAX OPTIONS OPCODE OBJMODE RPT CYC
ADD ACC,#16bit<<#0..15 1111 1111 0001 SHFT
CCCC CCCC CCCC CCCC
X − 1
Operands
ACC Accumulator register
#16bit 16-bit immediate constant value
#0..15 Shift value (default is ”<< #0” if no value specified)
Description Add the left shifted 16-bit immediate constant value to the ACC register.
The shifted value is sign extended if sign extension mode is turned on (SXM
= 1) else the shifted value is zero extended (SXM = 0). The lower bits of the
shifted value are zero filled:
if(SXM = 1) // sign extension mode enabled
ACC = ACC + S:16bit << shift value;
else // sign extension mode disabled
ACC = ACC + 0:16bit << shift value;
Smart Encoding:
If #16bit is an 8-bit number and the shift is 0, then the assembler will encode
this instruction as ADDB ACC, #8bit to improve efficiency. To override this
encoding, use the ADDW ACC, #16bit instruction alias.
Flags and
Modes
Z
After the addition, the Z flag is set if the ACC value is zero, else the flag is
cleared.
N
After the addition, the N flag is set if bit 31 of the ACC is 1, else the flag is
cleared.
C
If the addition generates a carry, C is set; otherwise C is cleared.
V
If an overflow occurs, V is set; otherwise V is not affected.
OVC
If (OVM = 0, disabled) then if the operation generates a positive overflow,
then the counter is incremented and if the operation generates a negative
overflow, then the counter is decremented. If (OVM = 1, enabled) then the
counter is not affected by the operation.
SXM
If sign extension mode bit is set; then the 16-bit immediate constant will be
sign-extended before the addition. Else, the value will be zero extended.
OVM
If overflow mode bit is set; then the ACC value will saturate maximum
positive (0x7FFFFFFF) or maximum negative (0x80000000) if the operation
overflowed.
Repeat This instruction is not repeatable. If this instruction follows the RPT
instruction, it resets the repeat counter (RPTC) and executes only once.
Example
; Calculate signed value: ACC = (VarB << 10) + (23 << 6);
SETC SXM ; Turn sign extension mode on