如何在8位二进制数中找到第一个和最后一个之间的距离

时间:2012-09-11 06:09:48

标签: algorithm assembly binary

我需要编写一个汇编程序,它从内存中给出了最宽的32位8位数。我给了一个存储空间数组,每个地址对应一个8位字。我需要将每个数字移动到一个寄存器中,然后找到宽度。在这种情况下,宽度表示第一个和最后一个之间的距离。

例如:

  

00000000 = 0

     

00010000 = 1

     

00101000 = 3

     

10000001 = 8

对于这个程序,我必须创建自己的指令集。每条指令都是8位长,因​​此我也不能拥有过长的分支。

我的主要问题是弄清楚如何计算“宽度”。一旦我知道如何做到这一点,我应该能够弄清楚如何使用8位指令来做到这一点。

2 个答案:

答案 0 :(得分:3)

在x86(386+)程序集中,有bsf(向前扫描位)和bsr(位扫描反向)。使用bsf,您将最低有效位的索引设置为1,并使用bsr将最高有效位的索引设置为1.这些加1的差异是所需的距离或宽度。位。我相信这些指令的等价物也可以在你自己的处理器中实现。

答案 1 :(得分:0)

我不知道它是否可能在你的处理器上,但在x86上我会旋转直到第一次进位设置(如果你最后一次旋转1,进位设置为1)并存储转数,然后做同样的事情,除了你做它到对面然后它应该是(8 - 这两个边缘的总和)。