ARM中大小端转换和按字节反转

4.3.11. REV、REV16、REVSH 和 RBIT

在字或半字内反转字节或位的顺序。

语法

op{cond} Rd, Rn
{cond} Rd, Rn

其中:

op

为下列项之一:

REV

反转字中的字节顺序。

REV16

独立反转每个半字中的字节顺序。

REVSH

反转低半字中的字节顺序,并将符号扩展到32 位。

RBIT

反转32 位字中的位的顺序。

cond

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

Rd

是目标寄存器。 Rd 不能为r15。

Rn

是存放操作数的寄存器。 Rn 不能为r15。

用法

您可利用这些指令来更改端标记:

REV

将 32 位大端数据变为小端数据或将 32 位小端数据变为大端数据。

REV16

将 16位大端数据变为小端数据或将 16 位小端数据变为大端数据。

REVSH

可完成以下转换:

  • 16 位带符号大端数据变为 32 位带符号小端数据

  • 16 位带符号小端数据变为 32 位带符号大端数据

条件标记

这些指令不更改标记。

16 位指令

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

REV Rd, Rm

Rd Rm 必须都是Lo 寄存器。

REV16 Rd, Rm

Rd Rm 必须都是Lo 寄存器。

REVSH Rd, Rm

Rd Rm 必须都是Lo 寄存器。

体系结构

RBIT 外,这些 ARM 指令均可用于 ARMv6 及更高版本中。

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

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

这些 16 位 Thumb 指令可用于 ARMv6 及更高版本的所有 T 变体中。

示例

    REV     r3, r7
    REV16   r0, r0
    REVSH   r0, r5       ; Reverse Signed Halfword
    REVHS   r3, r7       ; Reverse with Higher or Same condition
    RBIT    r7, r8

你可能感兴趣的:(STM32,ARM)