1

我需要编写一个汇编程序,它可以为我提供内存中最宽的 32 个 8 位数字。我得到了一个内存空间数组,每个地址对应一个 8 位字。我需要将每个数字移动到一个寄存器中,然后找到宽度。在这种情况下,宽度是指第一个和最后一个 1 之间的距离。

前任:

00000000 = 0

00010000 = 1

00101000 = 3

10000001 = 8

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

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

4

2 回答 2

3

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

于 2012-09-11T07:04:26.937 回答
0

我不知道它是否可能在您的处理器上,但在 x86 上,我将旋转直到设置第一个进位(如果您最后一次旋转出 1,进位设置为 1)并存储旋转次数,然后执行相同操作,除非您执行相反的操作边,然后它应该是(8 - 这两个边距的总和)。

于 2012-09-11T06:20:39.767 回答