web-dev-qa-db-ja.com

フレームポインターの説明

MIPS Assembly には、スタックポインタ用のレジスタと、フレームポインタ用の別のレジスタがあります。フレームポインターとは何ですか?その目的は何ですか?スタックポインターとどう違うのですか?

30

MIPSアセンブリでは、スタックポインタはスタックの先頭を指します。スタックにスペースを割り当てると、スタックポインタ($ sp)が移動して空きメモリをポイントします。

MIPSアセンブリでサブルーチンを呼び出すとき(レジスターは当時は非常に貴重でした-レジスターベースのパラメーターが従来と異なる場合)、パラメーターをスタックに書き込んでから、スタックポインターを進めます。

メソッドが開始するとき、パラメーターは16($sp)のオフセットにある可能性があります。ただし、変数がスタックに配置されると、スタックポインターが移動し、同じパラメーターが代わりに24($sp)に配置されるようになります。これはコードを少し混乱させるかもしれません。

フレームポインター($ fp)は、スタックフレームの先頭を指し、サブルーチンの呼び出しの間は移動しません。これはスタックフレームのベースを指し、サブルーチンに渡されるパラメーターは、フレームポインターに対して一定の位置に留まります。

フレームポインタは、それを変更するサブルーチン呼び出しで保存および復元する必要があることを理解してください。

参考文献:

45
user40980