所以我的问题是,我虽然很简单,我有一个算法,但我似乎不能用拇指-2指令使它工作。
安利,我需要逆转r0的位数,我认为最简单的方法是逻辑上将数字右移到一个临时寄存器中,然后将剩下的数字转换到结果寄存器中。然而,LSL,LSR似乎不允许您存储丢失到最重要位或最不重要位的移位位(同时也转移该寄存器的位)。是否有什么教学内容让我失去了理解。
这是我的手臂参考:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cjacbgca.html
发布于 2013-10-08 12:17:17
如果使用C后缀("set标志“),移出的位可以复制到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-08 11:34:07
使用rbit指令如何?我复制的ARMARM显示它有一个拇指-2编码在ARMv6T2和更高版本.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cihjgdid.html
https://stackoverflow.com/questions/19246544
复制相似问题