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

1 篇文章 0 订阅

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
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
BMI是Bit Manipulation Instructions的缩写,是ARMv8架构新增的一组位操作指令。 以下是一些常用的BMI指令: 1. RBIT:将寄存器的每个二进制位反转。例如: ``` RBIT W0, W1 ; 将W1寄存器的二进制位反转后存入W0寄存器 ``` 2. REV:反转一个32位无符号整数的字节顺序。例如: ``` REV W0, W1 ; 将W1寄存器的32位无符号整数的字节顺序反转后存入W0寄存器 ``` 3. REV16:反转一个32位无符号整数的相邻16位的顺序。例如: ``` REV16 W0, W1 ; 将W1寄存器的32位无符号整数的相邻16位的顺序反转后存入W0寄存器 ``` 4. CLZ:计算寄存器值为0的二进制位的个数。例如: ``` CLZ W0, W1 ; 将W1寄存器值为0的二进制位的个数存入W0寄存器 ``` 5. MUL:执行两个32位无符号整数的乘法并将结果存储在64位寄存器。例如: ``` MUL X0, W1, W2 ; 将W1寄存器和W2寄存器的32位无符号整数相乘,结果存入X0寄存器 ``` 6. UMULL:执行两个32位无符号整数的乘法并将结果存储在两个64位寄存器。例如: ``` UMULL X0, X1, W1, W2 ; 将W1寄存器和W2寄存器的32位无符号整数相乘,结果存入X1:X0寄存器 ``` 7. SMULL:执行两个32位有符号整数的乘法并将结果存储在两个64位寄存器。例如: ``` SMULL X0, X1, W1, W2 ; 将W1寄存器和W2寄存器的32位有符号整数相乘,结果存入X1:X0寄存器 ``` 以上是一些常用的BMI指令,还有其他的一些指令可以用于位操作。需要注意的是,不是所有的ARMv8处理器都支持BMI指令,具体情况需要查看处理器的技术文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值