获取MSB / LSB寄存器

时间:2017-05-19 12:05:20

标签: assembly arm

这可能看起来像是一个愚蠢的问题,但我真的不能告诉我错过了什么

在ARM 7上:

我在寄存器0中有一个8位数字,比如说

10110111

我想'循环'通过这个并用当前位做一些事情直到8位上升,但我在这个简单的问题上遇到了很多麻烦..

我的逻辑是:

- get MSB / LSB of number in r0
- shift it to r1
- lsl / lsr r0

但是从这个逻辑来看,我不知道你将如何获得MSB / LSB。任何人都可以帮我吗?或者有更好的循环方式吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

查看rbitclz说明。这些允许您计算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