프로그램 카운터는 제어를 데이터로 만든다.
pc 레지스터가 다음 명령을 가리키면 컨트롤러는 완전한 기계 상태를 바꾸며 진행할 수 있습니다.
생각해 볼 질문
전이 프로시저 하나가 여러 기계 명령을 어떻게 나타낼까요?
- pc 값으로 명령 하나 선택하기
- 제어 레지스터와 데이터 레지스터 함께 진행하기
- 컨트롤러에서 halt 상태 인식하기
상태는 pc와 a와 b와 temp와 cycles를 저장합니다. 각 cond 갈래는 정확히 명령 하나를 구현하고 뒤따라야 할 명령의 pc를 씁니다.
0번 명령은 b를 검사해 나머지 사이클로 들어가거나 pc 5의 halt로 이동합니다. 다른 명령들은 temp를 통해 값을 옮긴 뒤 검사로 제어를 되돌립니다.
SICP 코드UTF-8 587 / 1,048,576바이트
예제
결과—
- 출력
- —
- 값
- —
- 진단
- —
실행 추적0 / 0 개 이벤트
첫 프로그램은 (5 2 0 0 2)로 halt합니다. pc 5는 halt를 나타내고 a는 2를 담으며 두 번의 나머지 사이클이 완료되었습니다.
되풀이되는 pc 수열 0, 1, 2, 3, 4를 읽으세요. 마지막 검사는 pc를 0에서 halt 값 5로 직접 바꿉니다.
프로그램을 수정하고 결과를 비교해 보세요.
완료된 나머지 사이클만 세는 대신 모든 명령을 세는 레지스터를 추가하세요.
힌트 보기
모든 cond 갈래는 명령 수를 정확히 한 번씩 늘려야 합니다.