not疑似

not

疑似
RISC-V アセンブリ 参考

lyszt.netはnotおよびその他のRISC-V命令をより詳しく扱っています。

説明

not はレジスタのすべてのビットを反転します。0 は 1 になり、1 は 0 になります。以下の形式はソースレジスタ rs を読み取り、32 ビットすべてを反転し、その結果を宛先レジスタ rd に書き込みます。この操作はビット単位の補数です。

not rd, rs

not は疑似命令です。つまり、アセンブラが実際の命令に書き換える読みやすい名前です。これは以下の命令になり、すべて 1 のマスクとの XOR です。

xori rd, rs, -1

XOR はマスクが 1 であるビットを反転するので、すべて 1 のマスクはすべてのビットを反転します。値 -1 はビットで表すとすべて 1 であり、それがマスクとして機能する理由です。RISC-V には専用の反転命令はありません。この書き換えがそれを処理するからです。

not はマスクの反対を生成します。あるパターンが特定のビットを選択する場合、not は残りを選択するパターンを生成します。not の後に and を続けると、元のマスクが指定したビットがクリアされ、一連のフラグがオフになります。

RISC-V マニュアルは not を定数 -1 を伴う xori のアセンブラ疑似命令として定義し、その xori をレジスタ rs1 のビット単位の論理反転として説明しています。

not と neg は異なる結果をもたらします。not はビットを反転し、neg は符号を反転します。5 の not は -6 であり、5 の neg は -5 です。シミュレータのトレースは、not の代わりに実行される xori を示しています。

展開先

xori rd, rs, -1

アセンブラはこの疑似命令を、上記に示された実際の命令または複数の命令に置き換えます。

例

li t0, 0
not t1, t0       # t1 = -1 (every bit flipped)