4.8.3. SXT、SXTA、UXT 和 UXTA

符号扩展、带加法的符号扩展、零扩展和带加法的零扩展。

语法


SXT<extend>{cond} {Rd}, Rm{, rotation}

SXTA<extend>{cond} {Rd}, Rn, Rm{, rotation}

UXT<extend>{cond} {Rd}, Rm{, rotation}

UXTA<extend>{cond} {Rd}, Rn, Rm{, rotation}

其中:

<extend>

是下列项之一:

B16

将两个 8 位值扩展为两个 16 位值。

B

将一个 8 位值扩展为一个 32 位值。

H

将一个 16 位值扩展为一个 32 位值。

cond

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

Rd

是目标寄存器。

Rn

是存放要相加的值的寄存器(仅 SXTAUXTA)。

Rm

是存放要扩展的值的寄存器。

rotation

是下列项之一:

ROR #8

Rm 中的值向右循环移 8 位。

ROR #16

Rm 中的值向右循环移 16 位。

ROR #24

Rm 中的值向右循环移 24 位。

如果省略 rotation,则不执行循环。

不能将 r15 用作 RdRnRm

操作

这些指令执行以下操作:

  1. Rm 中的值向右循环移 0、8、16 或 24 位(仅适用于 ARM 和 Thumb-2)。

  2. 对所得到的值执行下列操作:

    • 提取 [7:0] 位,并符号或零扩展到 32 位。 如果指令为扩展并相加指令,则加上 Rn 中的值。

    • 提取 [15:0] 位,并符号或零扩展到 32 位。 如果指令为扩展并相加指令,则加上 Rn 中的值。

    • 提取 [23:16] 位以及 [7:0] 位,并符号或零扩展到 16 位。 如果指令是扩展并相加,则分别将它们加到 Rn 的 [31:16] 位和 [15:0] 位上,以形成结果的 [31:16] 位和 [15:0] 位。

条件标记

这些指令不更改标记。

16 位指令

这些指令的下列格式可用于 Thumb 代码中,在 Thumb-2 代码中使用时为 16 位指令:

SXTB Rd, Rm

RdRm 必须都为 Lo 寄存器。

SXTH Rd, Rm

RdRm 必须都为 Lo 寄存器。

UXTB Rd, Rm

RdRm 必须都为 Lo 寄存器。

UXTH Rd, Rm

RdRm 必须都为 Lo 寄存器。

体系结构

这些 ARM 指令可用于 ARMv6 及更高版本。

SXTUXT Thumb 指令可用于 ARMv6T2 和 ARMv7。

SXTAUXTA Thumb 指令可用于 ARMv6T2 和 ARMv7,但 ARMv7-M 架构要除外。

这些 16 位 Thumb 指令可用于 ARMv6 及更高版本。

示例


    SXTH         r3, r9, r4

    UXTAB16EQ    r0, r0, r4, ROR #16

不正确的示例


    SXTH     r9, r3, r2, ROR #12 ; rotation must be by 0, 8, 16, or 24.

Copyright © 2002-2007 ARM Limited. All rights reserved. ARM DUI 0204HC
Non-Confidential