【问题标题】:Get MSB / LSB in register获取寄存器中的 MSB / LSB
【发布时间】:2017-05-19 12:05:19
【问题描述】:

这似乎是一个愚蠢的问题,但我真的无法说出我错过了什么

在 ARM 7 上:

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

10110111

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

我的逻辑是:

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

但是从这个逻辑来看,我不知道你将如何获得 MSB / LSB。谁能帮帮我?还是有更好的循环方式?

谢谢!

【问题讨论】:

  • 你想做什么?只需检查每个位状态还是您在数一个或什么?翻转位的顺序?
  • 您也可以使用一组掩码 1、2、4、8,16... 循环并在寄存器值上执行 AND。

标签: assembly arm


【解决方案1】:

查看rbitclz 说明。这些允许您计算 MSB 和 LSB 索引。

【讨论】:

    【解决方案2】:

    我很难理解您的问题。但是,如果您使用标志 LSLS 进行移位,您可以从那里读取进位位和它。

    【讨论】:

    • 对不起,你可以看出我对组装很陌生。谢谢你的帮助!你是说如果我做 LSLS 它会进入进位位?从进位读取将是从 xPSR 寄存器的某个位置获取 irt 对吗?
    【解决方案3】:

    我有解决此问题的方法,但我不确定这是不是最好的方法。

    解决方案:

    使用值为 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2013-05-17
      • 2021-02-08
      相关资源
      最近更新 更多