4.3.11. REV、REV16、REVSH 和 RBIT
在字或半字内反转字节或位的顺序。
语法
{
op
{cond
}Rd
,Rn
cond
}Rd
,Rn
其中:
op
为下列项之一:
REV
反转字中的字节顺序。
REV16
独立反转每个半字中的字节顺序。
REVSH
反转低半字中的字节顺序,并将符号扩展到32 位。
RBIT
反转32 位字中的位的顺序。
cond
是一个可选的条件代码(请参阅条件执行)。
Rd
是目标寄存器。
不能为r15。Rd
Rn
是存放操作数的寄存器。
不能为r15。Rn
用法
您可利用这些指令来更改端标记:
REV
将 32 位大端数据变为小端数据或将 32 位小端数据变为大端数据。
REV16
将 16位大端数据变为小端数据或将 16 位小端数据变为大端数据。
REVSH
可完成以下转换:
-
16 位带符号大端数据变为 32 位带符号小端数据
-
16 位带符号小端数据变为 32 位带符号大端数据
条件标记
这些指令不更改标记。
16 位指令
这些指令的下列形式可用于 Thumb-2 之前的 Thumb 代码中,在 Thumb-2 代码中使用时为 16 位指令:
REV
Rd
, Rm
和 Rd
必须都是Lo 寄存器。Rm
REV16
Rd
, Rm
和 Rd
必须都是Lo 寄存器。Rm
REVSH
Rd
, Rm
和 Rd
必须都是Lo 寄存器。Rm
体系结构
除 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