所以我的问题是一个我虽然相当简单并且我有一个算法,但我似乎无法使用thumb-2指令使其工作。
Amway,我需要反转r0的位,我认为最简单的方法是将数字逻辑移位到临时寄存器中,然后将其移到结果寄存器中。但是LSL,LSR似乎不允许您将丢失的移位位存储到最高有效位或最低有效位(同时也移位该寄存器的位)。是否有一部分指令我很想理解。
这是我的ARM参考: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cjacbgca.html
答案 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。