Saya mengambil kursus tentang kompiler dalam studi sarjana saya di mana kami menulis kompiler yang mengkompilasi program sumber dalam bahasa seperti mainan Java ke bahasa perakitan mainan (yang kami punya juru bahasa). Dalam proyek ini kami membuat beberapa asumsi tentang mesin target yang terkait erat dengan executable asli "nyata", termasuk:
- tumpukan run-time, dilacak oleh register stack pointer ("SP") khusus
- heap untuk alokasi objek dinamis, dilacak oleh register heap pointer ("HP") khusus
- register penghitung program khusus ("PC")
- mesin target memiliki 16 register
- operasi pada data (sebagai lawan dari, misalnya, lompatan) adalah operasi register-to-register
Ketika kami sampai di unit tentang menggunakan alokasi register sebagai optimasi, itu membuat saya bertanya-tanya: Berapa jumlah minimum register secara teoritis untuk mesin seperti itu? Anda dapat melihat dengan asumsi kami bahwa kami menggunakan lima register (SP, HP, PC, ditambah dua untuk digunakan sebagai penyimpanan untuk operasi biner) dalam kompiler kami. Sementara optimisasi seperti alokasi register tentu dapat memanfaatkan lebih banyak register, apakah ada cara untuk bertahan dengan lebih sedikit sementara masih mempertahankan struktur seperti tumpukan dan tumpukan? Saya kira dengan pengalamatan register (operasi register-to-register) kita membutuhkan setidaknya dua register, tetapi apakah kita membutuhkan lebih dari dua?