💡 본 게시글은 아래 기술 블로그를 참고하였습니다.
출처 :
https://maloveforme.tistory.com/152
https://velog.io/@apphia39/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0ISA-CISC-vs.-RISC
CPU(Central Processing Unit 중앙처리장치)는 컴퓨터 및 MCU의 핵심 연산 장치로서, 메모리에서 명령어를 읽어와 이를 해석하고 수행하는 작업을한다.
즉, 사람의 두뇌와 같이 컴퓨터의 모든 시스템을 제어, 처리하는 가장 핵심적인 장치라고 할 수 있다.
CU가 명령을 가져오고 해석한 후, ALU에서 연산을 수행하고, 결과를 레지스터나 메모리에 저장하는 흐름!
ALU (Arithmetic Logic Unit, 연산 논리 장치) 
다양한 산술 연산 및 논리 연산을 처리한다.
CU (Control Unit, 제어 장치) 
다양한 하드웨어 구성 요소들을 조율하고 관리하는 역할을 한다. 이는 시스템 전체의 효율적인 작동을 위해 전기적 제어 신호를 발생시키고, 이를 통해 다른 컴퓨터 부품들의 동작을 제어한다.
Register (레지스터) 
프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장된다. 레지스터는 CPU 내부에서 연산을 위해 사용되는 초고속 메모리, 캐시는 CPU와 RAM 사이에서 자주 사용하는 데이터를 저장하여 속도를 높이는 중간 저장소이다. (L1은 코어 내부, L2는 내부 또는 외부에, L3은 여러 코어가 공유하여 외부에 있음)
프로그램 카운터 (Program Counter, PC)
✅ 메모리에서 읽어 들일 명령어의 주소를 저장하는 레지스터
명령어 레지스터 (Command Register, Instruction Register, IR)
✅ 현재 CPU가 해석하고 있는 명령어를 저장하는 레지스터이다.
메모리에서 읽어온 명령어는 먼저 이 레지스터에 저장되고 CPU는 이곳에서 명령어를 읽고 해석하고 실행한다.
메모리 주소 레지스터 (Memory Address Register, MAR)
✅ 메모리의 주소를 저장하는 레지스터이다.
CPU가 메모리의 특정 위치에서 데이터를 읽어야 할 경우, 그 주소는 이 레지스터에 먼저 로드되고, 이후 메모리 접근 시 이 레지스터의 정보를 사용하여 해당 위치를 찾는다.
메모리 버퍼 레지스터 (Memory Buffer Register, MBR)
✅ 메모리와 주고 받을 데이터와 명령어를 저장하는 레지스터이다.
CPU가 메모리에서 데이터를 읽을 때, 해당 데이터는 이 레지스터에 저장되고, CPU는 이 레지스터를 통해 데이터를 가져온다. 또한, CPU가 메모리에 데이터를 쓸 때, 데이터는 이 레지스터에 저장되고, 메모리가 이 레지스터에서 데이터를 가져온다.
범용 레지스터 (General Purpose Register)
✅ 다양한 목적에 맞게 사용할 수 있는 레지스터이다.
산술 연산, 논리 연산, 메모리 주소 저장 등에 활용된다. 이 레지스터의 크기와 수는 CPU의 설계에 따라 차이가 있다. 이 레지스터는 CPU의 작업 효율성을 크게 향상하는 역할을 하는데, 임시 데이터 저장소로 활용되거나 연산 과정에서의 중간 결과 유지 등의 용도로 쓰인다. 때문에! CPU가 메모리에 직접 접근하는 것보다 더 빠르게 데이터에 접근하게 해, 처리 속도를 향상한다.
플래그 레지스터 (Flag Register)
✅ CPU가 수행한 최근 연산에 대한 정보, 그리고 CPU의 현재 상태를 나타내는 여러 플래그를 저장한다.
스택 포인터 (Stack Pointer)
✅ 스택의 가장 위를 가리키는 레지스터이다. (현재 스택의 최상단 주소)

CPU는 명령어 주기 (Intstruction Cycle)을 통해 명령어를 실행한다.
✅ 1) Fetch (가져오기) → 메모리에서 명령어를 가져옴
✅ 2) Decode (해석하기) → 명령어를 해석하여 실행 준비
✅ 3) Execute (실행하기) → 연산 수행 (ALU 계산, 데이터 이동 등)
✅ 4) Write Back (저장하기) → 결과를 레지스터 또는 메모리에 저장
위 과정은 클럭에 맞춰 반복된다.
소프트웨어와 하드웨어 사이의 약속 (인터페이스)

개발자들은 high level language로 코드를 짠다. (C, C++ 등등) 하지만 컴퓨터가 이를 이해하기 위해서는 빌드 과정을 거쳐 어셈블리어 -> 기계어로 번역된다. 이렇게 번역된 기계어로 HW에게 명령을 내려줘야 하는데, 이 때 SW와 HW를 연결해주는 것이 ISA이다.
즉, ISA는 SW와 HW가 서로 통신할 수 있게 해주는 명령어들의 집합과 구조이다.
✅ ISA = 프로그래밍 가능한 CPU의 명령어 세트 + 하드웨어가 실행하는 규칙
다시 말해, CPU가 실행할 수 있는 명령어와 동작 방식을 정의하는 것을 ISA라고 한다.
ISA는 크게 2종류로 나뉜다.
CISC (Complex Instruction Set Computing)과
RISC (Reduced Instruction Set Computing)으로 구분된다.