2

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

安利,我需要将r0的位反转,我认为最简单的方法是将数字逻辑右移到临时寄存器中,然后将左移到结果寄存器中。但是 LSL、LSR 似乎不允许您存储丢失到最高有效位或最低有效位的移位位(同时也移位该寄存器的位)。有没有我想念的指令的某些部分。

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

4

2 回答 2

4

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可用,您应该使用它,否则请检查一些小技巧

于 2013-10-08T12:17:17.730 回答
4

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

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

于 2013-10-08T11:34:07.860 回答