Dalam perakitan MIPS , ada register untuk penunjuk tumpukan, dan register lain untuk penunjuk bingkai. Apa itu frame pointer dan apa tujuannya? Apa bedanya dengan stack pointer?
28
Dalam perakitan MIPS , ada register untuk penunjuk tumpukan, dan register lain untuk penunjuk bingkai. Apa itu frame pointer dan apa tujuannya? Apa bedanya dengan stack pointer?
Jawaban:
Dalam perakitan MIPS, penunjuk tumpukan menunjuk ke atas tumpukan. Saat Anda mengalokasikan ruang pada tumpukan, penunjuk tumpukan ($ sp) bergerak untuk menunjuk ke memori bebas.
Ketika memanggil subrutin dalam perakitan MIPS (register berada pada premium di masa itu - register parameter berdasarkan mana tidak konvensional), seseorang menulis parameter ke stack dan kemudian memajukan pointer stack.
Ketika metode ini dimulai, sebuah parameter mungkin memiliki offset
16($sp)
. Namun, karena variabel ditempatkan pada tumpukan, penunjuk tumpukan bergerak dan parameter yang sama sekarang dapat ditempatkan di24($sp)
sebagai gantinya. Ini bisa membuat kode sedikit membingungkan.Frame pointer ($ fp) menunjuk ke awal frame stack dan tidak bergerak selama panggilan subrutin. Ini menunjuk ke dasar bingkai tumpukan, dan parameter yang diteruskan ke subrutin tetap di tempat yang relatif konstan terhadap penunjuk bingkai.
Sadarilah bahwa pointer bingkai perlu disimpan dan dipulihkan dengan panggilan subrutin yang memodifikasinya.
Bacaan lebih lanjut:
sumber
%ebp
register 'basis pointer' dalam konvensi pemanggilan x86? (Saya baruMOV 8(%ebp), %eax
Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
tidak jelas apa artinya itu