csrw
疑似lyszt.netはcsrwおよびその他のRISC-V命令をより詳しく扱っています。
説明
csrw はレジスタを制御レジスタにコピーします。制御およびステータスレジスタ(CSR)は、トラップハンドラのアドレスや割り込みスイッチなどのプロセッサ状態を保持します(csrrw を参照)。以下の形式は rs を CSR にコピーし、古い値を破棄します。
csrw csr, rs
これは疑似命令であり、アセンブラが実際の命令に書き換える読みやすい名前です。これは以下の命令になり、rd が zero であるため古い値は読み取られません。
csrrw zero, csr, rs
最も一般的な用途はトラップハンドラの設定です。以下の行はラベル handler のアドレスを mtvec に格納します。
la t0, handler csrw mtvec, t0
mtvec の下位2ビットがモードを選択します。00 の場合、すべてのトラップは mtvec のアドレスにジャンプします。01 の場合、ベクタモードと呼ばれ、割り込みはそのアドレスにその原因コードの4倍を加えた場所にジャンプするため、ボタン割り込み(コード 11)はベースアドレスから44バイト先に着地します。アドレス自体の下位2ビットはモードを保持するため、空けておく必要があります。
RISC-V マニュアルでは csrw csr, rs1 を csrrw x0, csr, rs1 と定義しています。
展開先
csrrw zero, csr, rs
アセンブラはこの疑似命令を、上記に示された実際の命令または複数の命令に置き換えます。
例
li t0, 0x100 csrw mtvec, t0 # mtvec = 0x100
