【问题标题】:Right shift using iteration in LC3在 LC3 中使用迭代右移
【发布时间】:2012-10-05 04:09:13
【问题描述】:
所以我正在 LC3 中开发一个程序,但我遇到了屏蔽问题。我可以创建一个适当长度的所有 1 的掩码,很好地将所有内容转移到适当的字段,但是一旦我完成 AND 比较,我就无法将事情转移回右侧。你如何在 LC3 中右移?我在迭代比较中看到了一些东西,但我不知道如何比较不同位置的位,并且要在相同位置比较它们,无论如何我最终都必须向右移动一个。我错过了什么吗?
【问题讨论】:
标签:
logic
bit-manipulation
mask
lc3
【解决方案1】:
要模拟右移,你只需要制作两个掩码,一个用于源位,一个用于目标位:
src_mask=0x04; // read from bit position 2
dst_mask=0x01; // write to bit position 0
while(src) { // or while src_mask, because that too will eventually go to zero
if (src & src_mask) dst+=dst_mask; // or dst|=dst_mask
src &= (~src_mask);
dst_mask=dst_mask+dst_mask;
src_mask=src_mask+src_mask;
}
【解决方案2】:
在这种情况下,您可能根本不需要进行右移 - 只需在左移之前保存起始字段,然后再从内存中恢复它。