4.4.1. MUL、MLA 和 MLS

使用有符号或无符号 32 位操作数的乘法、乘加和乘减,结果取低 32 位。

语法

MUL{S}{cond} {Rd}, Rn, Rm
MLA{S}{cond} Rd, Rn, Rm, Ra
MLS{cond} Rd, Rn, Rm, Ra

其中:

cond

是一个可选的条件代码(请参阅条件执行)。

S

是一个可选的后缀。 如果指定 S,则会更新运算结果的条件代码标记(请参阅条件执行)。

Rd

是目标寄存器。

Rn, Rm

是存放乘数的寄存器。

Ra

存放被加数和被减数的寄存器。

用法

MUL 指令可将 RnRm 中的值相乘,并将所得结果的低 32 位存入 Rd

MLA 指令可将 RnRm 中的值相乘,然后再将乘积与 Ra 中的值相加,最后将所得和的低 32 位存入 Rd

MLS 指令可将 RnRm 中的值相乘,然后再从 Ra 中的值中减去乘积,最后将所得差的低 32 位存入 Rd

不要将 r15 用作 RdRnRmRa

条件标记

如果指定了 S,则 MULMLA 指令将:

  • 根据结果来更新 N 和 Z 标记。

  • 如果是 ARMv4 及更早版本,则破坏 C 和 V 标记

  • 如果是 ARMv5 及更高版本,则不影响 C 或 V 标记。

Thumb 指令

MUL 指令的下列形式可用于的 Thumb-2 之前的 Thumb 代码中,在 Thumb-2 代码中使用时为 16 位指令:

MULS Rd, Rn, Rd

RdRn 必须都是 Lo 寄存器。

其他任何 Thumb 乘法指令都不能更新条件代码标记。

体系结构

ARM 指令 MULMLA 可用于 ARM 体系结构的所有版本中。

MLS ARM 指令可用于 ARMv6T2 及更高版本。

这些 32 位 Thumb 指令可用于 ARMv6T2 及更高版本。

MULS 16 位 Thumb 指令可用于 ARM 体系结构的所有 T 变体中。

示例

    MUL     r10, r2, r5
    MLA     r10, r2, r1, r5
    MULS    r0, r2, r2
    MULLT   r2, r3, r2
    MLS     r4, r5, r6, r7
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential