我需要编写一个汇编程序,它从内存中给出了最宽的32位8位数。我给了一个存储空间数组,每个地址对应一个8位字。我需要将每个数字移动到一个寄存器中,然后找到宽度。在这种情况下,宽度表示第一个和最后一个之间的距离。
例如:
00000000 = 0
00010000 = 1
00101000 = 3
10000001 = 8
对于这个程序,我必须创建自己的指令集。每条指令都是8位长,因此我也不能拥有过长的分支。
我的主要问题是弄清楚如何计算“宽度”。一旦我知道如何做到这一点,我应该能够弄清楚如何使用8位指令来做到这一点。
答案 0 :(得分:3)
在x86(386+)程序集中,有bsf
(向前扫描位)和bsr
(位扫描反向)。使用bsf
,您将最低有效位的索引设置为1,并使用bsr
将最高有效位的索引设置为1.这些加1的差异是所需的距离或宽度。位。我相信这些指令的等价物也可以在你自己的处理器中实现。
答案 1 :(得分:0)
我不知道它是否可能在你的处理器上,但在x86上我会旋转直到第一次进位设置(如果你最后一次旋转1,进位设置为1)并存储转数,然后做同样的事情,除了你做它到对面然后它应该是(8 - 这两个边缘的总和)。