Skip to content

pongdang04/DGU2025-2_SystemSoftware_Final-Project

Repository files navigation

시소프 기말텀프로젝트 보고서.pdf

CPU16 Simulator

16비트 단순 명령어 컴퓨터(CPU16) 시뮬레이터입니다.

프로젝트 개요

본 프로젝트는 시스템 소프트웨어 기말 과제로, 16비트 CPU와 4096바이트 메모리를 시뮬레이션하는 프로그램입니다. 콘솔에서 어셈블리 코드를 입력받아 실시간으로 실행하고 메모리 상태를 확인할 수 있습니다.

시스템 구조

CPU 구성요소

  • ALU (Arithmetic Logic Unit): 산술 연산 수행 (ADD, MUL, DIV, MOD)
  • CU (Control Unit): 명령어 해독 및 실행 제어
  • PC (Program Counter): 다음 실행할 명령어 주소 저장
  • IR (Instruction Register): 현재 실행 중인 명령어 저장
  • AC (Accumulator): 연산 결과 저장

메모리

  • 크기: 4096 bytes (0x000 ~ 0xFFF)
  • 16비트 단위 읽기/쓰기 지원
  • Big Endian 방식 저장

명령어 세트

명령어 Opcode 동작
LDA x 0000 AC ← Memory[x]
STA x 0001 Memory[x] ← AC
ADD x 0010 AC ← AC + x
MUL x 0011 AC ← AC × x
DIV x 0100 AC ← AC ÷ x
MOD x 0101 AC ← AC % x
SEA x 1111 AC ← x

명령어 형식 (16비트)

| 15-12 (4bit) | 11-0 (12bit) |
|   opcode     |   operand    |

빌드 방법

Linux / macOS

make
./cpu16

Windows (Visual Studio)

  1. 새 프로젝트 생성 (빈 프로젝트 또는 콘솔 앱)
  2. 소스 파일 추가: main.cpp, Memory.cpp, CPU16.cpp
  3. 헤더 파일 추가: Memory.h, Register.h, ALU.h, CU.h, CPU16.h, Assembler.h
  4. 빌드 (Ctrl + Shift + B) 후 실행 (Ctrl + F5)

직접 컴파일

g++ -std=c++17 -o cpu16 main.cpp Memory.cpp CPU16.cpp

사용 방법

프로그램 로드

CPU16> load 0
Enter assembly code (type 'END' to finish):
  > SEA 7EF
  > ADD 4
  > MUL 40
  > STA 8
  > END

프로그램 실행

CPU16> run 0 6

단계별 실행

CPU16> prepare 0 6
CPU16> step
CPU16> step
...

메모리 확인

CPU16> dump 0 f          # 16진수로 출력
CPU16> dumpbin 0 7       # 2진수로 출력
CPU16> dumpall           # 전체 메모리 출력
CPU16> read 8            # 특정 주소 읽기

레지스터 확인

CPU16> reg

전체 명령어 목록

(실행 후 help 명령어를 통해서도 확인할 수 있습니다)

명령어 설명
load [addr] 콘솔에서 어셈블리 코드 입력
loadfile <file> [addr] 파일에서 프로그램 로드
run <start> <end> 프로그램 실행
prepare <start> <end> 단계별 실행 준비
step 또는 s 명령어 한 줄 실행
dump [start] [end] 메모리 보기 (16진수)
dumpbin [start] [end] 메모리 보기 (2진수)
dumpall [bin] 전체 메모리 보기
read <addr> 특정 주소 읽기
write <addr> <val> 특정 주소에 쓰기
clear [addr] 메모리 초기화
reg 레지스터 상태 출력
ptr [addr] 메모리 포인터 확인/설정
verbose <on|off> 실행 과정 출력 설정
test 필수 테스트 프로그램 실행
test2 DIV/MOD 테스트 프로그램 실행
help 도움말
exit 종료

예제

필수 테스트 프로그램

SEA 7EF    # AC = 0x7EF (2031)
ADD 4      # AC = 0x7EF + 0x4 = 0x7F3 (2035)
MUL 40     # AC = 0x7F3 * 0x40 = 0xFCC0 (64704)
STA 8      # Memory[0x8] = 0xFCC0

DIV/MOD 테스트 프로그램

SEA 64     # AC = 100
DIV A      # AC = 100 / 10 = 10
STA 10     # Memory[0x10] = 10
SEA 65     # AC = 101
MOD A      # AC = 101 % 10 = 1
STA 12     # Memory[0x12] = 1

파일 구조

cpu16_project/
├── main.cpp        # 메인 프로그램 및 쉘 인터페이스
├── Memory.h        # 메모리 클래스 헤더
├── Memory.cpp      # 메모리 클래스 구현
├── CPU16.h         # CPU 클래스 헤더
├── CPU16.cpp       # CPU 클래스 구현
├── Register.h      # 레지스터 클래스 (PC, IR, AC)
├── ALU.h           # ALU 클래스
├── CU.h            # CU 클래스
├── Assembler.h     # 어셈블러 클래스
├── Makefile        # 빌드 설정
└── README.md       # 프로젝트 설명

개발 환경

  • C++17
  • g++ / Visual Studio

About

System Software Final Project(16bit CPU)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages