2016-06-26 5 views
2

私は大学で来年に行う必要があるため、MIPSについてあまりよく分かりませんが、今年はlexとyaccと私たちはMIPSを知る必要があります。私は数時間前に何かを学んだだけですが、たとえば「a = -2」と「b = -a」がある場合、「a = -2」の場合、addi $ 1、$ 0 、-2 '、' b = -a 'の場合はmove $ 2、$ 31'というようなものがあります。私はここまで理解しましたが、何かを知りたいです。 $ 31は 'b'が格納されるレジスタですか?はいの場合、その登録簿では特別なものは何ですか?なぜ30ドルで保管することができないのですか、たとえば29ドルですか?それは$ 31が最後の登録者なのですから?

答えて

1

登録の割り当ては、次の2つの変数を持っている場合は、http://www.cs.uwm.edu/classes/cs315/Bacon/Lecture/HTML/ch05s03.html

だから、ABI MIPSの対象に、コンパイラの割り当て方式に基づいています目的。レジスタ$31別名$raがリターンアドレスレジスタです。 $rajal命令にハードワイヤードされているため、データ値を保持するのは良い選択ではありません。

$0別名$zeroはゼロの値にハードワイヤードされています。他のレジスタはどのような目的でも使用できますが、ほとんどのコンパイラやほとんどのプログラムは、ABIのレジスタ使用規則に準拠しています。

したがって、$1 aka $atは「アセンブラの一時的な」です。これは、mipsが等しい/不等(例えば、beq/bne)のための条件分岐命令しか有しておらず、(例えばblt)を持たないために使用される。だから、それは一般的に、あなたの順序のために$atレジスタ

で出力レジスタを、取るslt命令を持っています

a = -2; 
b = -a; 

のはa$t1に割り当てられている$t0bが割り当てられていると仮定しよう。生成されたシーケンスは次のようになります。また

addi $t0,$zero,-2   # a = -2 
    sub  $t1,$zero,$t0   # b = -a 

、そしてここに私の答えを参照してください、$raで行うことができないことができるものの詳細については:Whether $ra register callee saved or caller saved in mips?

+0

ありがとうございました、私が理解しました! – Linksx

1

MIPSの$ 31レジスタはリターンアドレスレジスタです。呼び出し関数によって保存されます。保存後に使用できます。

しかし、それに対してチェックはありません。他の汎用レジスタと同様に、lw命令で使用できます。 ab、コンパイラが与えられたために利用可能である任意のレジスタに割り当てることができます。

関連する問題