Tôi đã tham gia một khóa học về trình biên dịch trong các nghiên cứu đại học của mình, trong đó chúng tôi đã viết một trình biên dịch biên dịch các chương trình nguồn bằng ngôn ngữ giống như đồ chơi Java thành ngôn ngữ lắp ráp đồ chơi (chúng tôi có một trình thông dịch). Trong dự án, chúng tôi đã đưa ra một số giả định về máy mục tiêu liên quan chặt chẽ với các tệp thực thi gốc "thực", bao gồm:
- ngăn xếp thời gian chạy, được theo dõi bởi một thanh ghi con trỏ ngăn xếp chuyên dụng ("SP")
- một đống để phân bổ đối tượng động, được theo dõi bởi một thanh ghi con trỏ heap chuyên dụng ("HP")
- một thanh ghi bộ đếm chương trình chuyên dụng ("PC")
- máy đích có 16 thanh ghi
- các hoạt động trên dữ liệu (trái ngược với, ví dụ, nhảy) là các hoạt động đăng ký để đăng ký
Khi chúng tôi đến đơn vị sử dụng phân bổ đăng ký như một tối ưu hóa, nó làm tôi tự hỏi: số lượng đăng ký tối thiểu theo lý thuyết cho một máy như vậy là gì? Bạn có thể thấy các giả định của chúng tôi rằng chúng tôi đã sử dụng năm thanh ghi (SP, HP, PC, cộng với hai để sử dụng làm bộ lưu trữ cho các hoạt động nhị phân) trong trình biên dịch của chúng tôi. Trong khi tối ưu hóa như phân bổ đăng ký chắc chắn có thể sử dụng nhiều thanh ghi hơn , có cách nào để có được ít hơn trong khi vẫn giữ các cấu trúc như stack và heap không? Tôi cho rằng với địa chỉ đăng ký (hoạt động đăng ký để đăng ký) chúng ta cần ít nhất hai thanh ghi, nhưng chúng ta có cần nhiều hơn hai không?