Arm 反转寄存器Thumb-2中的位

Arm 反转寄存器Thumb-2中的位,arm,bit-manipulation,shift,thumb,Arm,Bit Manipulation,Shift,Thumb,所以我的问题是一个我认为很简单的问题,我有一个算法,但我似乎不能用thumb-2指令使它工作 安利,我需要反转r0的位,我认为最简单的方法是逻辑地将数字右移到临时寄存器,然后左移到结果寄存器。然而,LSL、LSR似乎不允许存储丢失到最高有效位或最低有效位的移位位(同时也移位该寄存器的位)。有没有什么我不理解的地方 这是我的手臂参考: 如何使用rbit指令?我的ARMARM副本显示它在ARMv6T2和更高版本中具有Thumb-2编码 如果使用S后缀(“设置标志”),则被移出的位可以复制到C位(进位

所以我的问题是一个我认为很简单的问题,我有一个算法,但我似乎不能用thumb-2指令使它工作

安利,我需要反转r0的位,我认为最简单的方法是逻辑地将数字右移到临时寄存器,然后左移到结果寄存器。然而,LSL、LSR似乎不允许存储丢失到最高有效位或最低有效位的移位位(同时也移位该寄存器的位)。有没有什么我不理解的地方

这是我的手臂参考:

如何使用
rbit
指令?我的ARMARM副本显示它在ARMv6T2和更高版本中具有Thumb-2编码


如果使用
S
后缀(“设置标志”),则被移出的位可以复制到
C
位(进位标志)。而
RRX
指令使用
C
设置结果的位31。因此,您可能可以执行以下操作:

  ; 32 iterations
  MOV R2, #32
  ; init result
  MOV R1, #0
loop
  ; copy R0[31] into C and shift R0 to left
  LSLS R0, R0, #1
  ; shift R1 to right and copy C into R1[31]
  RRX  R1, R1
  ; decrement loop counter
  SUBS R2, #1
  BNE  loop
  ; copy result back to R0
  MOV R0, R1

请注意,这是一种非常缓慢的反转位的方法。如果
RBIT
可用,您应该使用它,否则请检查一些。

我想这会起作用:)但这有点违背了问题的目的。我想知道是否仅仅通过移动/旋转就不能完成。这真是太棒了,非常感谢!