이 글은 직접 학습하거나 구현하며 남긴 개인 기술 기록입니다. 참고 자료가 있는 경우 본문에 출처를 남기고, 틀린 부분을 발견하면 수정합니다.
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 명령어 실행 시 다음과 같은 마이크로 연산들이 순차적으로 실행됩니다:
- T0: AR ← PC (주소 레지스터에 프로그램 카운터 값 저장)
- T1: IR ← M[AR], PC ← PC + 1 (명령어 가져오기 및 PC 증가)
- T2: AR ← IR(0-11) (오퍼랜드 주소 가져오기)
- T3: DR ← M[AR] (데이터 가져오기)
- T4: AC ← AC + DR (실제 덧셈 수행)
왜 hex주소는 다 0x로 시작하는걸까?
‘0x’는 이 숫자가 16진수(hexadecimal)라는 것을 나타내는 접두어(prefix)입니다.
프로그래밍에서 숫자 표기 방식을 명확히 구분하기 위해 특별한 접두어를 사용하는데:
- 16진수: 0x (예: 0x2AF)
- 8진수: 0 (예: 0777)
- 2진수: 0b (예: 0b1010)
- 10진수: 접두어 없음
Fetch-Decode-Execute 사이클
사이클을 돌때마다 표가 달라지는 것은 각 단계별로 레지스터들의 상태가 변화하기 때문이다.
- Fetch (명령어 가져오기) 단계:
- PC(Program Counter)의 주소값에 해당하는 명령어를 메모리에서 가져와서 IR(Instruction Register)에 저장
- PC는 다음 명령어를 가리키도록 증가
- Decode (해석) 단계:
- IR에 저장된 명령어를 분석하여 수행할 동작과 피연산자를 파악
- 명령어의 종류에 따라 필요한 레지스터나 메모리 주소를 결정
- Execute (실행) 단계:
- 해석된 명령어를 실제로 수행
- ALU를 통한 연산이나 메모리 접근 등이 이루어짐
- 실행 결과가 레지스터나 메모리에 저장
각 단계마다 달라지는 표의 내용:
레지스터들의 값 변화, 버스의 상태, 제어 신호들의 상태, 메모리 접근 상태
이러한 변화들이 표로 나타나기 때문에 각 단계별로 표의 내용이 달라지게 됩니다. 이는 컴퓨터가 명령어를 처리하는 과정을 단계별로 보여주는 것입니다.
핵심 정리
- SC(Sequence Counter)가 T0, T1, T2…로 타이밍을 진행시키고, 각 타이밍마다 정해진 마이크로 연산(AR←PC, IR←M[AR] 등)이 실행되는 것이 Fetch-Decode-Execute의 실체다.
- FGO 같은 조건부 제어 신호는 AC 값에 따라 다음에 실행할 마이크로명령어 주소를 분기시켜, 하드웨어 수준에서 “if문”과 같은 역할을 한다.
- 뺄셈은 별도 회로 없이 “2의 보수를 만들어 더하기”로 처리되며, 이때 Carry flip-flop(C)이 보수 계산의 시작/종료를 표시한다.
댓글이 보이지 않으면 GitHub에 로그인한 뒤 새로고침해 주세요. 공개 댓글은 로그인 상태에서 더 안정적으로 표시됩니다.