2015-01-13 14 views
5

MIPSアーキテクチャでは$k0$k1のレジスタは何ですか? WikiBooks MIPS Assembly

にあるよう は、k個のレジスタは、OSのカーネルで使用するために予約されています。

しかし、については何も見つかりませんでした。何が役に立ちましたか?それらの使い方は?

ありがとうございます。

+0

'$ k0'と' $ k1'はそれぞれ '$ 26'と' $ 27'のエイリアスです。 "予約された"部分は慣例によるもので、CPUは気にしません。 OSは、それが望むものを何でも使用することができます。ユーザー空間の状態を壊す恐れなしに使用できるスクラッチレジスタとして役立ちます。 – Jester

+0

@Jester OK、そう、どのようにOSがこれらのレジスタを使うことができますか? (疑似命令の変換中にアセンブラで使用される '$ 1'のように)(私が自分の答えを探していたときには、「割り込みを管理するために使われています。割り込みの管理の順序、またはそれらが有用なものは何ですか?) – AliLotfi

+0

これは通常のレジスタです。いつものように使用できます。あなたの質問を理解しないでください。割り込みの管理に関しては、ユーザー状態が保存されるまで、割り込みをスクラッチレジスタとして使用することができます。私はすでにそれを言った。 – Jester

答えて

9

割り込みハンドラは、使用する汎用レジスタをすべて保存する必要があります(リターン時にリストアするため)。しかし、少なくとも1つのレジスタを最初に変更する必要があります( のようにsw $t0, saved_t0は、$atを使用して2つのマシン命令に展開されます)。

この状況は、2つの汎用レジスタ、$k0および$k1(kは例外ハンドラの一部です)を使用することを禁止することで解決します。割り込みハンドラは、値を保存または復元せずに$k0および$k1を使用することができます。これによりレジスタの保存を開始するのに十分な余裕ができ、割り込みハンドラからの復帰も可能です。

関連する問題