คำอธิบายตัวชี้เฟรม


28

ในชุด MIPSมีการลงทะเบียนสำหรับตัวชี้สแต็กและการลงทะเบียนอีกครั้งสำหรับตัวชี้เฟรม ตัวชี้เฟรมคืออะไรและมีจุดประสงค์อะไร? มันแตกต่างจากตัวชี้สแต็คอย่างไร


1
คุณทำวิจัยอะไรแล้ว - และคุณคุ้นเคยกับคำศัพท์อย่างไร สิ่งนี้เป็นระบบสำหรับ (ระบบที่แตกต่างกันมีคำศัพท์ที่แตกต่างกัน)?

ฉันแค่ต้องการทำความคุ้นเคยกับตัวชี้เฟรม (ชุด mips) ฉันไม่เข้าใจว่ามันช่วยได้อย่างไรทำไมเราต้องการมัน? ขอบคุณมาก
qwaserdftyghuijkiii

คำตอบ:


44

ในชุด MIPS ตัวชี้สแต็กชี้ไปที่ด้านบนของสแต็ก ในขณะที่คุณจัดสรรพื้นที่บนสแต็คตัวชี้สแต็ก ($ sp) จะย้ายไปยังหน่วยความจำอิสระ

เมื่อเรียกรูทีนย่อยในแอสเซมบลี MIPS (ลงทะเบียนอยู่ที่พรีเมี่ยมในสมัยนั้น - ลงทะเบียนพารามิเตอร์ตามที่ไม่ธรรมดา) หนึ่งเขียนพารามิเตอร์ไปยังสแต็กแล้วเลื่อนตัวชี้สแต็ก

16($sp)เมื่อวิธีการที่จะเริ่มออกพารามิเตอร์อาจจะอยู่ที่ชดเชย อย่างไรก็ตามเนื่องจากตัวแปรถูกวางไว้บนสแต็กตัวชี้สแต็กจะย้ายและพารามิเตอร์เดียวกันอาจจะอยู่ที่24($sp)แทน ทำให้รหัสสับสนเล็กน้อย

ตัวชี้เฟรม ($ fp) ชี้ไปที่จุดเริ่มต้นของเฟรมสแต็กและไม่ย้ายในช่วงระยะเวลาของการเรียกรูทีนย่อย สิ่งนี้ชี้ไปที่ฐานของเฟรมสแต็กและพารามิเตอร์ที่ส่งผ่านไปยังรูทีนย่อยยังคงอยู่ที่จุดคงที่ที่สัมพันธ์กับตัวชี้เฟรม

ตระหนักว่าตัวชี้เฟรมจะต้องถูกจัดเก็บและกู้คืนด้วยการเรียกรูทีนย่อยที่ปรับเปลี่ยน

อ่านเพิ่มเติม:


ฉันไม่ทราบว่า "การลงทะเบียนอยู่ที่ระดับพรีเมี่ยมในสมัยนั้น - พารามิเตอร์ตามทะเบียนที่ไม่ธรรมดา" แต่พารามิเตอร์สามารถใส่ลงในสแต็กได้เมื่อจำนวนรีจิสเตอร์มีจำนวน จำกัด หากคุณมีพารามิเตอร์ 35 ตัว (ฉันเชื่อว่า MIPS มี 32 regs.) คุณจะต้องใส่พารามิเตอร์ 3 ตัวสุดท้ายลงบนสแต็กและเฉพาะเจาะจงกับการนำไปใช้งานมากขึ้น FP จะอยู่ที่หน่วยความจำที่มีที่อยู่ผู้ส่ง
Jonathan

1
@Jathanathan MIPS ของผู้ลงทะเบียน 32 คน, $ 0 คือ 0 $ ที่สงวนไว้, $ v0 และ $ v1 เป็นค่าตอบแทนสำหรับการเรียกใช้ฟังก์ชัน $ a0 - $ a3 เป็นพารามิเตอร์ของฟังก์ชัน, $ t0 - $ t9 เป็นชั่วคราว (ผู้เรียกรักษา) บันทึก $ $ 0 - $ s7 และ $ gp, $ sp, $ fp และ $ ra ถูกใช้โดยระบบ สรุปมีการลงทะเบียนวัตถุประสงค์ทั่วไปเพียง 24 รายการและบางรายการที่เกิดขึ้นหากคุณต้องการใช้ โดยทั่วไปคุณใช้การลงทะเบียน $ t เท่านั้น (10) เปรียบเทียบสิ่งนี้กับ Itanium ซึ่งมี 128 รีจิสเตอร์ การเรียกฟังก์ชันใน MIPS ด้วยพารามิเตอร์ 35 ตัวคุณน่าจะทำให้พวกมันทั้งหมดอยู่ในสแต็ก

@ Jonathan ฉันจะชี้ไปที่ความคิดเห็นนี้ : "AMD Bulldozer: 96 GPR ทางกายภาพ, Intel Sandy Bridge: 160 GPR ทางกายภาพ, Intel Haswell: 168 GPR ทางกายภาพ" สิ่งต่าง ๆ สนุกไปกับเครื่องแกนหลายแกน SPARC มีการลงทะเบียน 160ครั้ง ฉันยังชี้ให้คุณลงทะเบียนหน้าต่างที่เข้าสู่ปรัชญาการออกแบบของ MIPS โดยมีครึ่งหนึ่งของผู้ลงทะเบียนเป็นโคตร

ดังนั้นนี่คือสิ่งเดียวกับการใช้งานปกติของการ%ebpลงทะเบียน 'ตัวชี้ฐาน' ในการประชุม x86 ที่เรียก? (ฉันใหม่ทั้งหมดนี้ แต่ดูเหมือนสิ่งพื้นฐานเดียวกันกับการใช้ sth เช่นMOV 8(%ebp), %eaxหรือเช่นนั้น?)
ELLIOTTCABLE

เส้นRealize that the frame pointer will need to be stored and restored with subroutine calls that modify it.ไม่ชัดเจนว่านั่นหมายความว่าอย่างไร
zadane
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.