csrr疑似

csrr

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

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

説明

csrr は制御レジスタを汎用レジスタに読み込みます。制御・ステータスレジスタ(CSR)は、トラップハンドラのアドレスや最後のトラップの原因など、プロセッサの状態を保持します(csrrw を参照)。以下の形式は CSR の値を rd にコピーします。

csrr rd, csr

アセンブラはこれを疑似命令、つまり実際の命令に書き換えられる読みやすい名前として扱います。これは以下の命令になります。rs1 が zero であるため、CSR は読み取られ、何も書き込まれません。

csrrs rd, csr, zero

トラップハンドラは 2 つの CSR を読み取ることから始まります。mepc は中断された命令のアドレスを保持し、mcause はトラップの原因を保持します。

csrr t0, mcause

mcause の最上位ビットは、割り込みの場合は 1、例外の場合は 0 です。下位ビットは原因コードです。このシミュレータのボタン割り込みは 0x8000000b を残します。これはコード 11 の割り込み、マシン外部割り込みです。

RISC-V マニュアルは csrr rd, csr を csrrs rd, csr, x0 と定義しています。

展開先

csrrs rd, csr, zero

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

例

csrr t0, mstatus   # t0 = mstatus