not
疑似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)
