교재집필

명령어 세트 정의 및 설계 문서화

서호60 2024. 12. 1. 11:27

명령어 세트를 정의하고 문서화하는 작업은 CPU 설계의 핵심입니다. 명령어 세트를 문서화하면 CPU의 기능과 동작 방식을 명확히 설명하고, 설계 및 디버깅 과정을 체계적으로 진행할 수 있습니다.


1. 명령어 세트 정의 문서의 구조

  1. 명령어 세트 개요
    • CPU의 데이터 폭과 명령어 구조.
    • Opcode 및 Operand의 정의.
  2. 명령어 세부 목록
    • 명령어 이름, 코드, 기능 설명.
    • 입력 및 출력 동작 정의.
  3. 명령어 형식
    • 명령어 비트 구조.
    • Opcode와 Operand의 위치 및 의미.
  4. 예제 코드
    • 명령어 사용 예제.
    • 명령어 실행 결과.
  5. 디버깅 정보
    • 명령어 테스트 시 유의사항.

2. 명령어 세트 정의 문서 예시

1. 명령어 세트 개요

  • CPU 데이터 폭: 8비트
  • 명령어 형식: 8비트
    • Opcode: 상위 4비트 (명령어 구분)
    • Operand: 하위 4비트 (데이터 또는 주소)
  • 메모리 구조: 256바이트
  • 레지스터 구성:
    • A: 기본 연산 레지스터
    • B: 보조 연산 레지스터

2. 명령어 세부 목록

명령어 이름          Opcode        Operand                        설명
LOAD 0001 메모리 주소 지정된 메모리에서 레지스터 A로 데이터 로드
STORE 0010 메모리 주소 레지스터 A의 데이터를 지정된 메모리에 저장
ADD 0100 레지스터 B 레지스터 A와 B를 더해 결과를 A에 저장
SUB 0101 레지스터 B 레지스터 A에서 B를 빼서 결과를 A에 저장
JUMP 1000 메모리 주소 지정된 메모리 주소로 프로그램 흐름 이동
JZ 1001 메모리 주소 레지스터 A가 0이면 지정된 주소로 이동
NOP 0000 없음 아무 작업도 하지 않음
HLT 1111 없음 프로그램 종료

3. 명령어 형식

명령어는 8비트로 구성되며, 상위 4비트는 Opcode, 하위 4비트는 Operand입니다.

비트 위치7 6 5 43 2 1 0
구성 Opcode Operand
설명 명령어 유형 데이터/주소
  • Opcode 예시:
    • 0001: LOAD
    • 0010: STORE
    • 0100: ADD
    • 1111: HLT

4. 명령어 동작 정의

LOAD
  • 동작: 메모리 주소의 데이터를 레지스터 A로 로드.
  • 명령어 형식: 0001 [주소]
    • 예: 0001 0100 → 메모리 0x04의 데이터를 A에 로드.
STORE
  • 동작: 레지스터 A의 데이터를 지정된 메모리에 저장.
  • 명령어 형식: 0010 [주소]
    • 예: 0010 0110 → A의 데이터를 메모리 0x06에 저장.
ADD
  • 동작: 레지스터 A와 B를 더해 A에 저장.
  • 명령어 형식: 0100 0000 (Operand는 사용하지 않음)
    • 예: 0100 0000 → A = A + B.
SUB
  • 동작: 레지스터 A에서 B를 빼서 결과를 A에 저장.
  • 명령어 형식: 0101 0000
    • 예: 0101 0000 → A = A - B.
JUMP
  • 동작: 프로그램 흐름을 지정된 메모리 주소로 이동.
  • 명령어 형식: 1000 [주소]
    • 예: 1000 0011 → PC = 0x03.
JZ
  • 동작: 레지스터 A가 0이면 지정된 주소로 이동.
  • 명령어 형식: 1001 [주소]
    • 예: 1001 0101 → (A == 0) → PC = 0x05.
NOP
  • 동작: 아무 작업도 하지 않음.
  • 명령어 형식: 0000 0000.
HLT
  • 동작: CPU 동작 정지 및 프로그램 종료.
  • 명령어 형식: 1111 0000.

5. 예제 코드

메모리에서 두 숫자를 더하는 프로그램
  • 목표: 메모리 0x01, 0x02의 값을 더해 결과를 0x03에 저장.
 
 
숫자 맞추기 게임 예제
  • 목표: 메모리 0x00에 저장된 숫자를 플레이어가 입력값으로 맞추는 간단한 게임.

6. 디버깅 정보

  1. 명령어 디코딩 확인: Opcode와 Operand가 올바르게 해석되는지 확인.
  2. 시뮬레이션 시나리오:
    • 메모리 및 레지스터 상태 변화 추적.
    • 각 명령어 실행 후 CPU 상태를 기록.
  3. 오류 처리:
    • 정의되지 않은 Opcode가 입력된 경우 CPU 동작 중단 또는 디버깅 메시지 출력.

이 명령어 세트 설계 문서는 CPU 설계와 디버깅의 기준으로 활용됩니다.