Technical Support
On-Line Manuals
Assembler Reference
Conventions and feedback
Assembler command line options
ARM and Thumb Instructions
Instruction summary
Instruction width specifiers
Memory access instructions
General data processing instructions
Flexible second operand (Operand2)
Operand2 as a constant
Operand2 as a register with optional shift
Shift operations
Multiply instructions
Saturating instructions
Parallel instructions
Parallel add and subtract
Packing and unpacking instructions
Branch and control instructions
Coprocessor instructions
Miscellaneous instructions
ThumbEE instructions
Pseudo-instructions
Condition codes
ADD, SUB, RSB, ADC, SBC, and RSC
ADR (PC-relative)
ADR (register-relative)
ADRL pseudo-instruction
AND, ORR, EOR, BIC, and ORN
ASR, LSL, LSR, ROR, and RRX
B, BL, BX, BLX, and BXJ
BFC and BFI
BKPT
CBZ and CBNZ
CDP and CDP2
CHKA
CLREX
CLZ
CMP and CMN
CPS
CPY pseudo-instruction
DBG
DMB, DSB, and ISB
ENTERX and LEAVEX
ERET
HB, HBL, HBLP, and HBP
IT
LDC, LDC2, STC, and STC2
LDM and STM
LDR and STR (immediate offset)
LDR and STR (register offset)
LDR and STR, unprivileged
LDR (PC-relative)
LDR (register-relative)
LDR pseudo-instruction
LDREX and STREX
MAR and MRA
MCR, MCR2, MCRR, and MCRR2
MIA, MIAPH, and MIAxy
MOV and MVN
MOV32 pseudo--instruction
MOVT
MRC, MRC2, MRRC and MRRC2
MRS (system coprocessor register to ARM register)
MRS (PSR to general-purpose register)
MSR (ARM register to system coprocessor register)
MSR (general-purpose register to PSR)
MUL, MLA, and MLS
NEG pseudo-instruction
PKHBT and PKHTB
PLD, PLDW, and PLI
PUSH and POP
QADD, QSUB, QDADD, and QDSUB
REV, REV16, REVSH, and RBIT
RFE
SBFX and UBFX
SDIV and UDIV
SEL
SETEND
SEV, WFE, WFI, and YIELD
SMC
NOP
SMLAD and SMLSD
SMLALxy
SMLALD and SMLSLD
SMMUL, SMMLA, and SMMLS
SMUAD{X} and SMUSD{X}
SMULxy and SMLAxy
SMULWy and SMLAWy
SRS
SSAT and USAT
SSAT16 and USAT16
SUBS pc, lr
SVC
SWP and SWPB
SXT, SXTA, UXT, and UXTA
SYS
TBB and TBH
TST and TEQ
UMULL, UMLAL, SMULL, and SMLAL
UMAAL
UND pseudo-instruction
USAD8 and USADA8
VFP Programming
Directives Reference
|
Assembler Reference
MUL, MLA, and MLS
Multiply, Multiply-Accumulate, and Multiply-Subtract, with
signed or unsigned 32-bit operands, giving the least significant
32 bits of the result. Syntax
MUL{S}{cond} {Rd}, Rn, Rm
MLA{S}{cond} Rd, Rn, Rm, Ra
MLS{cond} Rd, Rn, Rm, Ra
where: condis an optional condition code. Sis
an optional suffix. If S is specified, the
condition code flags are updated on the result of the operation. Rdis the destination register. Rn, Rmare registers holding the values to be multiplied. Rais a register holding the value to be added or subtracted
from.
Usage
The MUL instruction multiplies the values from Rn and Rm,
and places the least significant 32 bits of the result in Rd. The MLA instruction multiplies the values from Rn and Rm,
adds the value from Ra,
and places the least significant 32 bits of the result in Rd. The MLS instruction multiplies the values from Rn and Rm,
subtracts the result from the value from Ra,
and places the least significant 32 bits of the final result in Rd. Register restrictions
For the MUL and MLA instructions, Rn must
be different from Rd in
architectures before ARMv6. You cannot use PC for any register. You can use SP in ARM instructions but these are deprecated
in ARMv6T2 and above. You cannot use SP in Thumb instructions. Condition flags
If S is specified, the MUL and MLA instructions: update the N and Z flags
according to the result corrupt the C and V flag in ARMv4 do not affect the C or V flag in ARMv5T and above.
Thumb instructions
The following form of the MUL instruction is
available in Thumb code, and is a 16-bit instruction: MULS Rd, Rn, RdRd and Rn must
both be Lo registers.
There are no other Thumb multiply instructions that can update
the condition code flags. Architectures
The MUL and MLA ARM instructions
are available in all versions of the ARM architecture. The MLS ARM instruction is available in ARMv6T2
and above. These 32-bit Thumb instructions are available in ARMv6T2 and
above. The MULS 16-bit Thumb instruction is available
in all T variants of the ARM architecture. Examples
MUL r10, r2, r5
MLA r10, r2, r1, r5
MULS r0, r2, r2
MULLT r2, r3, r2
MLS r4, r5, r6, r7
See also
|