这可能看起来像是一个愚蠢的问题,但我真的不能告诉我错过了什么
在ARM 7上:
我在寄存器0中有一个8位数字,比如说
10110111
我想'循环'通过这个并用当前位做一些事情直到8位上升,但我在这个简单的问题上遇到了很多麻烦..
我的逻辑是:
- get MSB / LSB of number in r0
- shift it to r1
- lsl / lsr r0
但是从这个逻辑来看,我不知道你将如何获得MSB / LSB。任何人都可以帮我吗?或者有更好的循环方式吗?
谢谢!
答案 0 :(得分:3)
查看rbit
和clz
说明。这些允许您计算MSB和LSB索引。
答案 1 :(得分:1)
我很难理解你的问题。但如果您使用标志LSLS进行切换,则可以从那里读取随身携带位置。
答案 2 :(得分:0)
我已经解决了这个问题,但我不确定它是最好的方法。
解决方案:
使用值为1的第二个寄存器,每次迭代,AND(r0,r1)表示您的位。然后只是LSL r1,然后继续。
例如
mov r0, #0b10101010 @original
mov r1, #1
loop:
and r2,r0,r1 @this is your bit
lsl r1
b loop