レストル

レストル

レジスタ: CPUの手

まず、ビットとは何でしょうか?ビットとは0か1の1つであり、コンピュータが保存できる最小の情報単位です。それを32個集めると32ビット数になり、0から約40億まで数えることができます。RISC-Vのすべてのレジスタとすべてのメモリスロットは、1つの32ビット数を保持します。

レジスタとは、プロセッサ内部にある小さな記憶スロットで、1つの32ビット数を保持します。RISC-Vは32個のレジスタを提供します。それらはプロセッサコア内にあるため、レジスタはメインメモリよりも桁違いに高速に使用できます。そのうちのいくつかで、書くコードのほとんどをカバーできます:t0からt2(一時的な値)、a0からa2(引数と結果)、zero(常に0)、sp(スタックポインタ)、ra(リターンアドレス)。

ℹ
Simulatorタブでは、プログラムの実行中に値が変化する各レジスタを表示します。そのビューを眺めることが、レジスタの挙動を感じ取る最速の方法です。
最初のプログラム: 42 を出力する
# 42を出力し、終了します。
# a7 がサービスを選び、a0 が値を受け持ちます。
li a7, 1 # サービス 1 = 整数を出力
li a0, 42 # 表示する値
ecall # 実行する
li a7, 10 # サービス 10 = 終了
ecall

はload immediateの略で、定数をレジスタに配置します。はサービス1を選択し、これは整数を出力します。は出力する数値をa0に配置します。は制御をシステムに渡し、システムはa0の値を出力します。次には終了サービスを選択し、がプログラムを終了します。Runを押してから、42を変更してプログラムを再度実行してください。

プログラム実行
0x400000li a7, 1
0x400004li a0, 42
0x400008ecall
0x40000cli a7, 10
0x400010ecall
a71
a0—
output—
pc0x400000

a7を1に設定すると、次のecallは数値を出力します。

以下の図は、シミュレータが上記の5行を実行する際の流れを追っています。各行は、プログラムがロードされたときに占めるアドレスを持ち、すべてのRISC-V命令は4バイト幅であるため、アドレスは4バイトずつ離れています。pcとラベル付けされたボックスは、プログラムカウンタの略で、現在ハイライトされている行のアドレスを保持します。その数値が、プロセッサがプログラム内の位置について知っているすべてです。つまり、プログラムカウンタのアドレスにある命令をフェッチし、それを実行し、次にプログラムカウンタに4を加えて次の命令に到達します。レジスタは、その行のが実行されるときに値を受け取り、出力は最初のが実行されるときにのみ現れます。