Mano Machine 주요 개념 정리

Morris Mano의 교육용 컴퓨터 모델은 명령어 하나가 실행되는 과정을 마이크로 연산(micro-operation) 단위까지 쪼개서 보여준다. 레지스터 하나하나가 무엇을 하는지 안다고 해서 “명령어가 실행된다”는 감이 바로 오지는 않는데, 그 사이를 이어주는 것이 이 글에서 다루는 제어 신호와 Fetch-Decode-Execute 사이클이다.

마이크로 연산 제어 신호

FGO (Full Gate Operate)

AC(Accumulator)의 값을 확인하는 조건부 분기 연산입니다:

  • AC가 0이 아닐 경우: 다음 마이크로명령어로 진행
  • AC가 0일 경우: NextU+2 위치의 마이크로명령어로 건너뜁니다

S (Subtract)

AC에서 M[AR]의 값을 빼는 마이크로 연산으로, 결과는 AC에 저장됩니다. 2의 보수 연산을 사용하여 구현됩니다.

제어 신호

NextU (Next μ-instruction)

다음 마이크로 명령어로 진행하는 제어 신호입니다. Control Address Register(CAR)의 값을 1 증가시켜 다음 마이크로 명령어 주소로 이동합니다.

Next ins (Next instruction)

현재 명령어의 실행을 완료하고 다음 기계어 명령어로 진행하는 제어 신호입니다. Program Counter(PC)를 1 증가시키고 새로운 명령어 사이클을 시작합니다.

하드웨어 구성 요소

SC (Sequence Counter)

마이크로프로그램 명령어의 순서를 제어하는 3비트 카운터입니다:

  • 명령어 사이클 시작 시 0으로 초기화
  • T0부터 T7까지의 타이밍 신호 생성
  • 클럭 펄스마다 1씩 증가하며 마이크로연산의 타이밍 제어

C (Carry flip-flop)

뺄셈 연산 시 2의 보수 계산을 위해 사용되는 플립플롭입니다:

  • 뺄셈 시작 시: C = 1 (Set)
  • 뺄셈 종료 시: C = 0 (Clear)

Executed Micro Operations

CPU가 실제로 실행하는 기본적인 동작들을 의미합니다. 예를 들어 ADD 명령어 실행 시 다음과 같은 마이크로 연산들이 순차적으로 실행됩니다:

  1. T0: AR ← PC (주소 레지스터에 프로그램 카운터 값 저장)
  2. T1: IR ← M[AR], PC ← PC + 1 (명령어 가져오기 및 PC 증가)
  3. T2: AR ← IR(0-11) (오퍼랜드 주소 가져오기)
  4. T3: DR ← M[AR] (데이터 가져오기)
  5. T4: AC ← AC + DR (실제 덧셈 수행)

왜 hex주소는 다 0x로 시작하는걸까?

‘0x’는 이 숫자가 16진수(hexadecimal)라는 것을 나타내는 접두어(prefix)입니다.

프로그래밍에서 숫자 표기 방식을 명확히 구분하기 위해 특별한 접두어를 사용하는데:

  • 16진수: 0x (예: 0x2AF)
  • 8진수: 0 (예: 0777)
  • 2진수: 0b (예: 0b1010)
  • 10진수: 접두어 없음

Fetch-Decode-Execute 사이클

사이클을 돌때마다 표가 달라지는 것은 각 단계별로 레지스터들의 상태가 변화하기 때문이다.

  1. Fetch (명령어 가져오기) 단계:
  • PC(Program Counter)의 주소값에 해당하는 명령어를 메모리에서 가져와서 IR(Instruction Register)에 저장
  • PC는 다음 명령어를 가리키도록 증가
  1. Decode (해석) 단계:
  • IR에 저장된 명령어를 분석하여 수행할 동작과 피연산자를 파악
  • 명령어의 종류에 따라 필요한 레지스터나 메모리 주소를 결정
  1. Execute (실행) 단계:
  • 해석된 명령어를 실제로 수행
  • ALU를 통한 연산이나 메모리 접근 등이 이루어짐
  • 실행 결과가 레지스터나 메모리에 저장

각 단계마다 달라지는 표의 내용:

레지스터들의 값 변화, 버스의 상태, 제어 신호들의 상태, 메모리 접근 상태

이러한 변화들이 표로 나타나기 때문에 각 단계별로 표의 내용이 달라지게 됩니다. 이는 컴퓨터가 명령어를 처리하는 과정을 단계별로 보여주는 것입니다.

핵심 정리

  • SC(Sequence Counter)가 T0, T1, T2…로 타이밍을 진행시키고, 각 타이밍마다 정해진 마이크로 연산(AR←PC, IR←M[AR] 등)이 실행되는 것이 Fetch-Decode-Execute의 실체다.
  • FGO 같은 조건부 제어 신호는 AC 값에 따라 다음에 실행할 마이크로명령어 주소를 분기시켜, 하드웨어 수준에서 “if문”과 같은 역할을 한다.
  • 뺄셈은 별도 회로 없이 “2의 보수를 만들어 더하기”로 처리되며, 이때 Carry flip-flop(C)이 보수 계산의 시작/종료를 표시한다.