反转寄存器Thumb-2中的位

时间:2013-10-08 11:29:35

标签: arm bit-manipulation shift thumb

所以我的问题是一个我虽然相当简单并且我有一个算法,但我似乎无法使用thumb-2指令使其工作。

Amway,我需要反转r0的位,我认为最简单的方法是将数字逻辑移位到临时寄存器中,然后将其移到结果寄存器中。但是LSL,LSR似乎不允许您将丢失的移位位存储到最高有效位或最低有效位(同时也移位该寄存器的位)。是否有一部分指令我很想理解。

这是我的ARM参考: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cjacbgca.html

2 个答案:

答案 0 :(得分:3)

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

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cihjgdid.html

答案 1 :(得分:2)

如果使用C后缀(“设置标志”),可以将移出的位复制到S位(进位标志)。并且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可用,则应使用它,否则请检查bit twiddling tricks