나는 학부 연구에서 컴파일러에 대해 강의했다. 거기서 우리는 장난감 자바와 같은 언어로 소스 프로그램을 장난감 조립 언어 (통역사가있는)로 컴파일하는 컴파일러를 작성했다. 이 프로젝트에서 우리는 다음을 포함하여 "실제"네이티브 실행 파일과 밀접하게 관련된 대상 시스템에 대한 몇 가지 가정을했습니다.
- 전용 스택 포인터 ( "SP") 레지스터에 의해 추적되는 런타임 스택
- 전용 힙 포인터 ( "HP") 레지스터에 의해 추적되는 동적 객체 할당을위한 힙
- 전용 프로그램 카운터 레지스터 ( "PC")
- 대상 머신에는 16 개의 레지스터가 있습니다.
- 데이터에 대한 작업 (예 : 점프와 반대)은 레지스터 간 작업입니다.
레지스터 할당을 최적화로 사용하는 단위에 도달했을 때, 나는 그런 기계에 대한 이론적 인 최소 레지스터 수는 얼마입니까? 컴파일러에서 5 개의 레지스터 (SP, HP, PC, 2 진 연산을위한 스토리지로 사용하기 위해 2 개)를 사용했다고 가정 할 수 있습니다. 레지스터 할당과 같은 최적화는 확실히 더 많은 레지스터를 사용할 수 있지만 스택 및 힙과 같은 구조를 유지하면서 적은 수로 더 많은 방법을 사용할 수 있습니까? 레지스터 주소 지정 (register-to-register 작업) 으로 적어도 두 개의 레지스터가 필요하지만 두 개 이상의 레지스터가 필요하다고 가정합니다.