2012-03-03 12 views
11

MIPSプロセッサで命令jalがどのように機能するか理解できません。 私の二つの質問は次のとおりです。PC + 4またはPC + 8
A) "JAL" の後R31に格納された値とは何ですか?それは本当にPC + 8なら
B)は、何がPC + 4の命令になりますか?それはジャンプの前に実行されるか、実行されませんか?

パターソンとヘネシー(第四版)、PG 113では:

「ジャンプとリンク命令:にジャンプ命令とアドレスと同時に、レジスタ内の次の命令のアドレス($を節約しますMIPSでRA)」

『プログラムカウンタ(PC):プログラム中の命令のアドレスを含むレジスタは

これら二つの文を読んだ後、』実行され、それは次の値SAいます$ raは(PC + 4)である必要があります。

しかし、この本に付属しているMIPSの参照データ(グリーンカード)で、JAL命令のアルゴリズムは次のように定義されています。
「ジャンプとリンク:JAL:J:R [31] = PC + 8 ; PC = JumpAddr「

このwebsiteもと述べ、 『我々はリターンアドレスがPCであると仮定します』それはパイプラインは、高度なトピックですので、と言うことの後に、奇妙な、しかし、」それは本当にPC + 8です+4 "となります。
私は8086アセンブリから来たので、アドレスに戻るときとそれに続くときには大きな違いがあることを知っています。ありがとう。

答えて

12

$ raのアドレスは、実際にはPC + 8です。 jal命令の直後の命令は "branch delay slot"にあります。関数が入力される前に実行されるため、関数が復帰したときには再実行しないでください。

Mipsの他の分岐命令にも分岐遅延スロットがあります。

遅延スロットは、jal命令を実行するのに役立つ何かを行うために使用されます。

+0

ありがとうございました!不思議なことに、多くのウェブサイトが間違った情報(PC + 4)を提示しています。 – ReimannCL

1

私は同じ質問を受けました。リチャードのこのすばらしい答えと、私がここに追加したいと思っている別のリンクを探知しました。

リンクはhttp://chortle.ccsu.edu/AssemblyTutorial/Chapter-26/ass26_4.html で、PCに4を2回追加するという素晴らしい説明があります。 実際の実行には、1)newPC =パイプライン処理によるPC + 4、2)jal命令による$ ra = newPC + 4の追加が有効な$ ra =(jal命令のアドレス)+8になります。

関連する問題