4.4.2. UMULL、UMLAL、SMULL 和 SMLAL

采用 32 位操作数以及 64 位结果和累加器的有符号长乘法和无符号长乘法(可选择进行累加)。

语法

Op{S}{cond} RdLo, RdHi, Rn, Rm

其中:

Op

UMULLUMLALSMULLSMLAL 之一。

S

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

cond

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

RdLo, RdHi

是目标寄存器。 对于 UMLALSMLAL,它们还用于存放累加值。 RdLoRdHi 必须为不同的寄存器

Rn, Rm

是存放操作数的 ARM 寄存器。

不要将 r15 用作 RdHiRdLoRnRm

用法

UMULL 指令会将 RnRm 中的值解释为无符号整数。 它会先求这两个整数的乘积,然后将结果的低 32 位存入 RdLo,高 32 位存入 RdHi

UMLAL 指令会将 RnRm 中的值解释为无符号整数。 它会先求这两个整数的乘积,然后将 64 位结果与 RdHiRdLo 中所包含的 64 位无符号整数相加。

SMULL 指令会将 RnRm 中的值解释为有符号整数的二进制补码。 它会先求这两个整数的乘积,然后将结果的低 32 位存入 RdLo,高 32 位存入 RdHi

SMLAL 指令会将 RnRm 中的值解释为有符号整数的二进制补码。 它先求这两个整数的乘积,然后将 64 位结果与 RdHiRdLo 中的 64 位有符号整数相加。

条件标记

如果指定了 S,则这些指令将:

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

  • 不影响 C 或 V 标记。

体系结构

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

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

这些指令均无 16 位 Thumb 版本。

示例

    UMULL       r0, r4, r5, r6
    UMLALS      r4, r5, r3, r8
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IC
Non-Confidential