ในชุด MIPSมีการลงทะเบียนสำหรับตัวชี้สแต็กและการลงทะเบียนอีกครั้งสำหรับตัวชี้เฟรม ตัวชี้เฟรมคืออะไรและมีจุดประสงค์อะไร? มันแตกต่างจากตัวชี้สแต็คอย่างไร
ในชุด MIPSมีการลงทะเบียนสำหรับตัวชี้สแต็กและการลงทะเบียนอีกครั้งสำหรับตัวชี้เฟรม ตัวชี้เฟรมคืออะไรและมีจุดประสงค์อะไร? มันแตกต่างจากตัวชี้สแต็คอย่างไร
คำตอบ:
ในชุด MIPS ตัวชี้สแต็กชี้ไปที่ด้านบนของสแต็ก ในขณะที่คุณจัดสรรพื้นที่บนสแต็คตัวชี้สแต็ก ($ sp) จะย้ายไปยังหน่วยความจำอิสระ
เมื่อเรียกรูทีนย่อยในแอสเซมบลี MIPS (ลงทะเบียนอยู่ที่พรีเมี่ยมในสมัยนั้น - ลงทะเบียนพารามิเตอร์ตามที่ไม่ธรรมดา) หนึ่งเขียนพารามิเตอร์ไปยังสแต็กแล้วเลื่อนตัวชี้สแต็ก
16($sp)
เมื่อวิธีการที่จะเริ่มออกพารามิเตอร์อาจจะอยู่ที่ชดเชย อย่างไรก็ตามเนื่องจากตัวแปรถูกวางไว้บนสแต็กตัวชี้สแต็กจะย้ายและพารามิเตอร์เดียวกันอาจจะอยู่ที่24($sp)
แทน ทำให้รหัสสับสนเล็กน้อย
ตัวชี้เฟรม ($ fp) ชี้ไปที่จุดเริ่มต้นของเฟรมสแต็กและไม่ย้ายในช่วงระยะเวลาของการเรียกรูทีนย่อย สิ่งนี้ชี้ไปที่ฐานของเฟรมสแต็กและพารามิเตอร์ที่ส่งผ่านไปยังรูทีนย่อยยังคงอยู่ที่จุดคงที่ที่สัมพันธ์กับตัวชี้เฟรม
ตระหนักว่าตัวชี้เฟรมจะต้องถูกจัดเก็บและกู้คืนด้วยการเรียกรูทีนย่อยที่ปรับเปลี่ยน
อ่านเพิ่มเติม:
%ebp
ลงทะเบียน 'ตัวชี้ฐาน' ในการประชุม x86 ที่เรียก? (ฉันใหม่ทั้งหมดนี้ แต่ดูเหมือนสิ่งพื้นฐานเดียวกันกับการใช้ sth เช่นMOV 8(%ebp), %eax
หรือเช่นนั้น?)
Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
ไม่ชัดเจนว่านั่นหมายความว่าอย่างไร