MOVP T,loc16
6-217
MOVP T,loc16 Load the T Register and Store P in the Accumulator
SYNTAX OPTIONS OPCODE OBJMODE RPT CYC
MOVP T,loc16 0001 0110 LLLL LLLL X − 1
Operands T Upper 16 bits of the multiplicand register (XT)
loc16 Addressing mode (see Chapter 5)
Description Load the T register with the 16-bit content of the location pointed to by the
“loc16” addressing mode. Also, the content of the P register, shifted by the
amount specified by the product shift mode (PM) bits, is loaded into the ACC
register:
T = [loc16];
ACC = P << PM;
Flags and
Modes
N After the operation if bit 31 of the ACC register is 1, then the N bit is set;
otherwise, N is cleared.
Z After the operation, if the value of ACC is zero, then the Z bit is set; otherwise
Z is cleared.
PM The value in the PM bits sets the shift mode for the output operation from the
product register. If the product shift value is positive (logical left shift
operation), then the low bits are zero filled. If the product shift value is
negative (arithmetic right shift operation), the upper bits are sign extended.
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 using 16-bit multiply:
; Y = (X0*C0) >> 2) + (X1*C1 >> 2) + (X2*C2 >> 2)
; X2 = X1
; X1 = X0
SPM −2 ; Set product shift to >> 2
MOV T,@X2 ; T = X2
MPY P,T,@C2 ; P = T*C2
MOVP T,@X1 ; T = X1, ACC = X2*C2 >> 2
MPY P,T,@C1 ; P = T*C1
MOV @X2,T ; X2 = X1
MOVA T,@X0 ; T = X0, ACC = X1*C1 >> 2 + X2*C2 >> 2
MPY P,T,@C0 ; P = T*C0
MOV @X1,T ; X1 = X0
ADDL ACC,P << PM ; ACC = X0*C0 >> 2 + X1*C1 >> 2 + X2*C2 >> 2
MOVL @Y,ACC ; Store result into Y