プログラムを作成していますが、ビット3と6が設定されているかどうかを確認する必要があります。単語を回転したり、左右にシフトしたりできることを知っています。
しかし、どうすれば個々のビットの状態にアクセスできますか?and / xorのようなビット演算子を使用しますか?
プログラムを作成していますが、ビット3と6が設定されているかどうかを確認する必要があります。単語を回転したり、左右にシフトしたりできることを知っています。
しかし、どうすれば個々のビットの状態にアクセスできますか?and / xorのようなビット演算子を使用しますか?
ビット単位で、0x08と0x40を使用します(ビット0が最下位ビットであると想定)。これを行うには、andi命令を使用します。
$ t0がテストする値である場合:
andi $t1, $t0, 0x08
andi $t2, $t0, 0x40
ビット3が設定されている場合、$ t1は非ゼロになり、ビット6が設定されている場合、$t2は非ゼロになります。
はい、ビット単位の演算子を使用します。ビット3と6のみが設定されているビットマスクとANDをとることができます。次に、ゼロとの比較を行います。
(私は長い間アセンブラをしていません)のようなもの:
and r2, r1, 0x48 # r2 = r1 & 0x48
cmp r2, 0x48
jz zzzzzz #jmp to zzzzz if bits 6 and 3 are set
MIPSアセンブリで単一ビットをテストするための1つの手法は、目的のビットを最上位ビット位置にシフトし、bltz/bgezを使用してビットの状態をテストすることです。これにより、andi命令を使用して目的のビットを選択できない場合に、命令が保存されます。