我需要做什么它同时实现按位左移和按位向右转向使用LC-3组装 。 基本上,每个位具有在换档方向上移动在一个空间,和零填充产生的空的空间。
例子:
右移:
01001001
00100100→
左移:
01001001
←10010010
我已经成功地实现了一个左移,通过采取二进制字符串,并将其添加到自身。
我难倒就如何执行右移。 任何想法,将不胜感激。 我有AND,NOT,加运算,数据移动操作,七个寄存器来存储值和内存的整个范围。 我只是需要一些基本的想法如何可以实现。
如果你需要一个LC-3指令集,有一个在这里 。
假设你设置R2
,这样它只有一个位集。 然后,如果你做一个AND
与在另一个寄存器和分支Z
条件,你正在测试该位是否被设置。 如果是,你要设置的前一位在“结果”寄存器。
如果然后在遍历一个地方重复改变你的单位寄存器,你应该有你需要的东西。
(道歉,如果这是含糊不清,因为这大概是功课我试图避免只是给你答案)
编辑:
因此,假设您的输入是01001011.开始时你的00000000输出的00000010输入掩码,以及00000001的输出掩码你做AND和发现,这是非零,那么您将输出掩码添加到输出。 然后,你既转移了口罩获得00000100和00000010。
通过循环的下一次时,与为零,所以你添加什么,等等。 当移动掩模使得零循环终止。
哇,这是一个相当最小的指令集。
如果您有可用的256个字节的内存,然后查找表可能是要走的路。
你可以通过在每个位位置的循环,用做没有数据存储AND
提取位。
您需要两个口罩。 两者都是单个“1”与它们的其余部分的“0”。 两者都初始化为0000 0000 0000 0001,但其中之一是要原来的号码是正确的,移动量,左移。 我们将称之为MASK1。 未转移数量将掩码2。
与原来的号码比较MASK1。 如果(MASK1“和”输入)>或<0,“或”与MASK2输出,然后左移两个掩模。
在这两种情况下,左转向既面具,然后再试一次,直到有输入测试没有更多的比特。
LC-3并没有按位“或”。 你将不得不“而不是”两个操作数,“和”他们的话“而不是”为按位结果“或”。
之所以要测试是否掩码1“和”输入>或<0,因为如果它是零,我们想要做什么。 如果“与”荷兰国际集团这些操作数的结果为> 0,则这意味着,测试的位置发现了一个“1”,它需要被打印到的结果。 如果面膜已经左移,成为1000 0000 0000 0000,这在技术上是一个负数。 的“和”这一点,在该位置的任何数量为“1”也将是一个负数。