sicp.io
5.2.3 · 컨트롤러 실행

프로그램 카운터는 조립된 명령을 실제 기계 실행으로 만든다.

명령 실행기는 pc가 가리키는 명령을 가져와 명시적인 레지스터 파일을 바꾸고 숫자 분기 대상을 따라 halt까지 진행할 수 있습니다.

생각해 볼 질문

숫자 프로그램 카운터 하나가 대입과 검사와 제어 이동을 어떻게 조정할까요?

  • 해결된 명령을 직접 인덱싱되는 컨트롤러 벡터에 저장하기
  • 명시적인 레지스터 파일에 n, product, flag, pc 유지하기
  • assign, test, branch, goto, halt 명령 해석하기
  • 실행을 제한하고 눈에 보이는 상태 이력 유지하기

컨트롤러는 이전 조립기 수업에서 생성된 숫자 대상을 사용합니다. 상태 벡터는 n, product, flag, pc 순서의 레지스터 파일입니다. 주기마다 controller[pc]를 가져옵니다. assign이나 test는 pc를 진행시키고, branch는 7을 선택하거나 앞으로 나아가며, goto는 2를 쓰고, halt는 레지스터를 반환합니다.

첫 번째 프로그램은 n이 2인 상태에서 전체 컨트롤러를 실행하여 product를 2로 남깁니다. 두 번째 프로그램은 n이 1인 상태에서 시작하여 halt가 아닌 모든 명령 뒤에 pc, n, product, flag를 기록합니다. 두 실행 모두 40단계 보호 장치를 둡니다. 명령 실행기는 해결된 컨트롤러 벡터 위에서 assign, test, branch, goto, halt를 처리합니다.

SICP 코드UTF-8 1,876 / 1,048,576바이트
예제
결과
출력
진단
실행 추적0 / 0 개 이벤트
    실행은 브라우저 안에서 이루어지며 프로그램 결과와 실행 추적을 보여줍니다.
    예상 결과

    첫 번째 프로그램은 (0 2 #t 7)을 반환합니다. 두 번째 프로그램은 ((1 1 0 #f) (2 1 1 #f) (3 1 1 #f) (4 1 1 #f) (5 1 1 #f) (6 0 1 #f) (2 0 1 #f) (3 0 1 #t) (7 0 1 #t))를 반환합니다.

    실행 추적에서 볼 점

    각 명령 전에 현재 pc 위치의 vector-ref를 따라가세요. product와 n 대입, pc 2에서 flag가 참이 되는 순간, 거짓 분기가 pc 4로 진행하는 과정, goto가 pc 2로 복원하는 과정, 참 분기가 pc 7에서 halt를 선택하는 과정을 찾으세요. 실행 흐름은 40단계 보호 장치 아래에서 이 컨트롤러를 기록합니다.

    직접 해보기

    프로그램을 수정하고 결과를 비교해 보세요.

    첫 번째 컨트롤러의 초기 n 상수를 0으로 바꾸세요. 최종 레지스터를 예측하고 참 분기가 어떤 대입을 건너뛰는지 식별하세요.

    힌트 보기

    product가 1이 된 뒤 test는 flag를 참으로 만들고 branch는 pc에 직접 7을 씁니다.

    이 수업 완료하기

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