2016-03-29 14 views
1

保存されたレジスタのデータに正確に何が起こるのかが重要な理由は何ですか?削除されるか、新しい値で上書きされますか?これらの新しい価値はどこからもたらされますか?私が何かについて不明な点がある場合は、以下にコメントしてください。MIPSアセンブリでは、プロシージャで使用する必要がある保存されたレジスタを保存して復元することはなぜ重要ですか?

答えて

1

アセンブリ言語内から関数、システムコール、プロシージャ、またはその他の外部コードを呼び出すと、その関数の関数呼び出し定義によって、保存が必要なレジスタと保存されないレジスタが定義されます。多くの場合、これはプラットフォーム、ライブラリ、または言語の標準として文書化されています。あなたはこれをはっきりと理解する。あなたの質問は、 "なぜ?"

レジスタが保持されることが保証されていない場合、これは、呼び出された関数が任意の方法でこれらのレジスタを自由に操作して変更できることを意味します。彼らが "削除"されていることはあまりありません。機能が動作している間に変更または上書きされます。結局のところ、関数はあなたが使用しているのと同じレジスタを使用しなければなりません!

一方、呼び出しによってレジスタを保持する必要がある場合は、呼び出しがコードに戻るときに変更されないことが保証されます。これは、呼び出された関数によってレジスタが使用されていないが、スタック(またはどこかのメモリ)に保存されてから復帰前にリストアされるためかもしれません。

関連する問題