Penjelasan Frame 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?

qwaserdftyghuijkiii
sumber
1
Penelitian apa yang sudah Anda lakukan - dan apa yang Anda kenal dengan istilah itu? Untuk apa sistem ini (sistem yang berbeda memiliki terminologi yang berbeda)?
Saya hanya ingin dibiasakan dengan frame pointer (mips assembly). Saya tidak mengerti bagaimana ini membantu, mengapa kita membutuhkannya? Terima kasih banyak
qwaserdftyghuijkiii

Jawaban:

44

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 di 24($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
Saya tidak tahu apa yang dimaksud dengan "register berada pada premium pada masa itu - register berdasarkan parameter di mana tidak konvensional" tetapi parameter juga dapat diletakkan di tumpukan ketika # register terbatas. Jika Anda memiliki 35 parameter misalnya (saya percaya MIPS memiliki 32 regs.) Maka Anda perlu meletakkan 3 parameter terakhir pada stack. Juga lebih spesifik untuk implementasi, FP akan berada di alamat dalam memori di mana alamat pengirim berada.
Jonathan
1
@Jonathan MIPS Dari 32 register itu, $ 0 adalah 0. $ pada dicadangkan, $ v0 dan $ v1 adalah untuk nilai pengembalian panggilan fungsi, $ a0 - $ a3 adalah parameter fungsi, $ t0 - $ t9 bersifat sementara (pemanggil mempertahankan) , $ s0 - $ s7 disimpan, dan $ gp, $ sp, $ fp, dan $ ra digunakan oleh sistem itu sendiri. Secara keseluruhan, hanya ada 24 register tujuan umum dan beberapa di antaranya mengeluarkan biaya tambahan jika Anda ingin menggunakannya. Anda biasanya hanya menggunakan register $ t (10). Bandingkan dengan Itanium yang memiliki 128 register. Memanggil fungsi dalam MIPS dengan 35 parameter, Anda mungkin akan meletakkan semuanya di tumpukan.
@ Jonathan Saya juga akan menunjukkan komentar ini : "AMD Bulldozer: 96 GPR fisik, Intel Sandy Bridge: 160 GPR fisik, Intel Haswell: 168 GPR fisik". Banyak hal menjadi lucu dengan beberapa mesin inti. SPARC memiliki 160 register . Saya juga mengarahkan Anda untuk mendaftar jendela yang masuk ke beberapa filosofi desain MIPS dengan setengah register sebanyak yang sezamannya.
Jadi, ini adalah hal yang sama dengan penggunaan konvensional dari %ebpregister 'basis pointer' dalam konvensi pemanggilan x86? (Saya baru MOV 8(%ebp), %eax
mengenal
Garis Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.tidak jelas apa artinya itu
zadane