0

私はLC3でプログラムに取り組んでおり、マスキングに問題があります。適切な長さのすべての 1 のマスクを作成し、すべてを適切なフィールドにシフトすることは問題ありませんが、AND 比較を行った後、私の人生では物事を右に戻すことはできません。LC3でどのように右シフトしますか? 反復比較で何かを見ましたが、異なる位置のビットを比較する方法がわかりません。同じ位置でそれらを比較するには、最終的に1つを右にシフトする必要があります。何か不足していますか?

4

2 に答える 2

0

この状況では、右シフトを行う必要はまったくないかもしれません。左にシフトする前に開始フィールドを保存し、後でメモリから復元するだけです。

于 2012-10-17T18:23:45.270 に答える
0

右シフトをシミュレートするには、ソース ビット用と宛先ビット用の 2 つのマスクを作成する必要があります。

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;
}
于 2012-10-16T11:22:54.793 に答える