3

手続きを使ったMIPSコードを勉強しているのですが、スタック(sp)とフレームポインタ(fp)の目的がわかりません。

たとえば、私が研究しているコードには以下のものがあります。入力した数値の前のすべての数値 (例: 3.3,2,1,0) を出力し、使用したスタック サイズを示します。この例では 16 を使用しました。 を に変更した-4ところ-8、エラーが発生しました。ただし、を使用する他のコードに気付きました-8

問題は、何が欠けているのですか?

proc:
    addi $sp,$sp,-4     # 
    sw   $ra,0($sp)     # push $ra  
4

1 に答える 1

1

関数を呼び出す前に、戻りアドレスをスタックにプッシュします。それがコードの機能です。-4 は、スタック ポインタを上に移動してスタックに 4 バイトを「割り当てる」ことを意味し、リターン アドレスを書き込むことができます。

上記の説明は、レジスタの通常の使用を前提としています。

コードを見るまで、-8 が何をするかについて結論を出すことはできません。しかし、関数への引数のためにスペースを予約している可能性があります。

于 2012-06-26T07:42:42.003 に答える