在LC3中使用迭代进行右移

时间:2012-10-05 04:09:14

标签: logic bit-manipulation mask lc3

所以我正在研究LC3中的一个程序,我遇到了屏蔽问题。我很好地创造了一个适当长度的所有1的面具,精细地将所有东西移动到适当的区域,但是在我完成AND比较之后,我不能为我的生活转移到右边。你如何在LC3中转右?我在迭代比较中看到了一些东西,但我不知道如何比较不同位置的位,并且在相同的位置比较它们,我最终还是必须将一个位置向右移动。我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

要模拟右移,你只需要制作两个掩码,一个用于源位,一个用于目标位:

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;
}

答案 1 :(得分:0)

你可能根本不需要在这种情况下进行右移 - 只需在将其向左移动之前保存起始区域,然后将其从内存中恢复。