1

MARS シミュレーターを使用して MIPS アセンブリーでプログラムを作成しています。を使用jalして関数呼び出しをjr $ra行い、その最後に を使用してプログラムの元のポイントに戻ります。

私が混乱しているのは$t、関数で使用したレジスタに、メイン プログラムに戻った後も値が残っていることです。

一時レジスタを使用する将来の関数が白紙の状態で開始できるように、戻る前にこれらのレジスタをゼロにする必要がありますか? ここで何か不足していますか?

4

1 に答える 1

3

私が混乱しているのは、関数で使用した $t レジスタが、メイン プログラムに戻った後も値を保持していることです。

はい、他のすべてのレジスタが同じ値を持っているのと同じです (関数から戻ったからといって、特別なことは何も起こりません)。

一時レジスタを使用する将来の関数が白紙の状態で開始できるように、戻る前にこれらのレジスタをゼロにする必要がありますか? ここで何か不足していますか?

それらをゼロにする必要はありません。それらはあなたが使用するためにそこにありました! 一時レジスタで好きなことを自由に行うことができますが、別の関数 (または独自の関数) を呼び出すと、同じことを行うため、関数全体の値に依存できないことに注意してください。呼び出します。これを、$s変更した場合に保存および復元する必要があるレジスタと比較してください。ただし、(通常は) 同じことを行う他の関数に依存できます。これは呼び出し規約の一部です。

于 2011-10-06T20:41:40.550 に答える