sicp.io
5.2.2 · 레지스터가 된 제어

프로그램 카운터는 제어를 데이터로 만든다.

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 갈래는 명령 수를 정확히 한 번씩 늘려야 합니다.

    이 수업 완료하기

    이 장의 총 23개 수업 중 0개 완료0%