ฉันลงเรียนหลักสูตรคอมไพเลอร์ในการศึกษาระดับปริญญาตรีของฉันซึ่งเราเขียนคอมไพเลอร์ที่คอมไพล์โปรแกรมต้นฉบับในภาษาจาวาของเล่นเหมือนภาษาแอสเซมบลีของเล่น (ซึ่งเรามีล่าม) ในโครงการเราได้ตั้งสมมติฐานบางอย่างเกี่ยวกับเครื่องเป้าหมายที่เกี่ยวข้องอย่างใกล้ชิดกับโปรแกรมดั้งเดิมที่ใช้งานจริง
- สแต็กรันไทม์ติดตามโดยการลงทะเบียนสแต็คพอยน์เตอร์ ("SP") เฉพาะ
- ฮีปสำหรับการจัดสรรอ็อบเจ็กต์แบบไดนามิกที่ติดตามโดยตัวชี้ฮีพเฉพาะ ("HP") ลงทะเบียน
- การลงทะเบียนตัวนับโปรแกรมเฉพาะ ("PC")
- เครื่องเป้าหมายมี 16 รีจิสเตอร์
- การดำเนินการกับข้อมูล (ตรงข้ามกับเช่นการข้าม) เป็นการดำเนินการลงทะเบียนเพื่อลงทะเบียน
เมื่อเราไปถึงหน่วยการใช้การจัดสรรการลงทะเบียนเพื่อทำให้เกิดประโยชน์สูงสุดมันทำให้ฉันประหลาดใจ: จำนวนการลงทะเบียนขั้นต่ำทางทฤษฎีสำหรับเครื่องดังกล่าวคืออะไร? คุณสามารถเห็นได้จากสมมติฐานของเราที่เราใช้การลงทะเบียนห้ารายการ (SP, HP, PC, และอีกสองสำหรับใช้เป็นที่เก็บข้อมูลสำหรับการทำงานแบบไบนารี) ในคอมไพเลอร์ของเรา ในขณะที่การเพิ่มประสิทธิภาพเช่นการจัดสรรการลงทะเบียนสามารถใช้ประโยชน์จากการลงทะเบียนมากขึ้นแต่มีวิธีที่จะได้รับน้อยลงในขณะที่ยังคงโครงสร้างเช่นสแต็คและกอง? ฉันคิดว่ามีการลงทะเบียนที่อยู่ (การลงทะเบียนเพื่อดำเนินการลงทะเบียน) เราต้องการอย่างน้อยสองทะเบียน แต่เราต้องการมากกว่าสอง?