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