LC3装配按位右移

Wil*_*nes 6 assembly bit-shift bitwise-operators lc3

我需要做的是使用LC-3组件实现按位左移和按位右移.基本上,每个位都必须在移位方向上移动一个空间,零填充所创建的空白空间.

例子:

右移:

 01001001
 00100100?
Run Code Online (Sandbox Code Playgroud)

左移:

 01001001
?10010010
Run Code Online (Sandbox Code Playgroud)

通过获取二进制字符串并将其添加到自身,我已成功实现了左移.

我很难理解如何进行正确的转变.任何想法将不胜感激.我有AND,NOT,ADD操作,数据移动操作,七个寄存器来存储值和整个存储器范围.我只需要一些基本的想法如何实现它.

如果您需要LC-3指令集参考,那么这里一个.

Rus*_*ser 5

假设您设置为R2只设置一个位.然后,如果你AND使用另一个寄存器和分支Z条件,你正在测试是否设置了该位.如果是,则要在"结果"寄存器中设置前一位.

如果您将单位寄存器移到一个位置并重复循环,那么您应该拥有所需的.

(道歉,如果这是模糊的;因为这可能是家庭作业,我试图避免给你答案)

编辑:

因此,假设您的输入为01001011.您的输出为00000000,输入掩码为00000010,输出掩码为00000001.您执行AND并发现它非零,因此您将输出掩码添加到输出.然后将两个掩码移过来获得00000100和00000010.

在下一次循环时,AND为零,因此您不添加任何内容,依此类推.当移动掩码使其为零时,循环终止.


Oli*_*rth 1

哇,这是一个非常小的指令集。

如果您有 256 字节的可用内存,那么查找表可能是最佳选择。

您可以在没有数据存储器的情况下使用每个位位置上的循环AND来提取位来完成此操作。