LC3大会按位右移(LC3 Assembly Bitwise Right Shift)

2019-06-23 11:30发布

我需要做什么它同时实现按位左移和按位向右转向使用LC-3组装 。 基本上,每个位具有在换档方向上移动在一个空间,和零填充产生的空的空间。

例子:

右移:

 01001001
 00100100→

左移:

 01001001
←10010010

我已经成功地实现了一个左移,通过采取二进制字符串,并将其添加到自身。

我难倒就如何执行右移。 任何想法,将不胜感激。 我有AND,NOT,加运算,数据移动操作,七个寄存器来存储值和内存的整个范围。 我只是需要一些基本的想法如何可以实现。

如果你需要一个LC-3指令集,有一个在这里 。

Answer 1:

假设你设置R2 ,这样它只有一个位集。 然后,如果你做一个AND与在另一个寄存器和分支Z条件,你正在测试该位是否被设置。 如果是,你要设置的前一位在“结果”寄存器。

如果然后在遍历一个地方重复改变你的单位寄存器,你应该有你需要的东西。

(道歉,如果这是含糊不清,因为这大概是功课我试图避免只是给你答案)

编辑:

因此,假设您的输入是01001011.开始时你的00000000输出的00000010输入掩码,以及00000001的输出掩码你做AND和发现,这是非零,那么您将输出掩码添加到输出。 然后,你既转移了口罩获得00000100和00000010。

通过循环的下一次时,与为零,所以你添加什么,等等。 当移动掩模使得零循环终止。



Answer 2:

哇,这是一个相当最小的指令集。

如果您有可用的256个字节的内存,然后查找表可能是要走的路。

你可以通过在每个位位置的循环,用做没有数据存储AND提取位。



Answer 3:

您需要两个口罩。 两者都是单个“1”与它们的其余部分的“0”。 两者都初始化为0000 0000 0000 0001,但其中之一是要原来的号码是正确的,移动量,左移。 我们将称之为MASK1。 未转移数量将掩码2。

与原来的号码比较MASK1。 如果(MASK1“和”输入)>或<0,“或”与MASK2输出,然后左移两个掩模。

在这两种情况下,左转向既面具,然后再试一次,直到有输入测试没有更多的比特。

LC-3并没有按位“或”。 你将不得不“而不是”两个操作数,“和”他们的话“而不是”为按位结果“或”。

之所以要测试是否掩码1“和”输入>或<0,因为如果它是零,我们想要做什么。 如果“与”荷兰国际集团这些操作数的结果为> 0,则这意味着,测试的位置发现了一个“1”,它需要被打印到的结果。 如果面膜已经左移,成为1000 0000 0000 0000,这在技术上是一个负数。 的“和”这一点,在该位置的任何数量为“1”也将是一个负数。



Answer 4:

假设通过一次又一次减去0领先你可以除以2。

所以,算你如何能经常补充RX,RX,#-2

我敢肯定,也有一个方法可以解决领先1。



文章来源: LC3 Assembly Bitwise Right Shift