Arm 反转寄存器Thumb-2中的位
所以我的问题是一个我认为很简单的问题,我有一个算法,但我似乎不能用thumb-2指令使它工作 安利,我需要反转r0的位,我认为最简单的方法是逻辑地将数字右移到临时寄存器,然后左移到结果寄存器。然而,LSL、LSR似乎不允许存储丢失到最高有效位或最低有效位的移位位(同时也移位该寄存器的位)。有没有什么我不理解的地方 这是我的手臂参考: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位(进位
如何使用
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
可用,您应该使用它,否则请检查一些。我想这会起作用:)但这有点违背了问题的目的。我想知道是否仅仅通过移动/旋转就不能完成。这真是太棒了,非常感谢!