17

jal命令が MIPS プロセッサでどのように機能するか理解できません。私の2つの質問は
とおりです。b)本当にPC+8の場合、 PC+4の命令はどうなりますか? ジャンプの前に実行されますか、それとも決して実行されませんか?

Patterson と Hennessy (第 4 版)、pg 113:

「ジャンプアンドリンク命令: アドレスにジャンプすると同時に、次の命令のアドレスをレジスタに保存する命令 ( MIPS では$ra )」

「プログラムカウンター(PC):実行中のプログラム内の命令のアドレスを含むレジスター」

これら 2 つのステートメントを読むと、$raに保存される値は ( PC+4 )になるはずです。

ただし、本に付属の MIPS リファレンス データ (グリーン カード) では、jal 命令のアルゴリズムは次のように定義されてい
ます。

このウェブサイトにも「本当はPC+8です」と書かれていますが、不思議なことに、パイプライン処理は高度なトピックなので、「リターン アドレスはPC+4と仮定します」と書かれています。
私は 8086 アセンブリから来たので、アドレスに戻ることと、それに続くアドレスに戻ることには大きな違いがあることを認識しています。なぜなら、何かが真実でないと仮定しただけでは、プログラムは機能しないからです。ありがとう。

4

2 に答える 2

19

$ra のアドレスは実際には PC+8 です。jal 命令の直後の命令は、「分岐遅延スロット」にあります。関数に入る前に実行されるため、関数が戻ったときに再実行されるべきではありません。

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

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

于 2012-03-03T19:08:23.553 に答える