
명령어 집합(instruction set, instruction set architecture/ISA)은 소프트웨어와 하드웨어, 특히 CPU와의 사이의 약속이다. ISA는 여러 명령어들을 정의하며 또한 현재 시스템의 상태가 어떻게 구성되어 있고 명령어를 실행할 때 그 상태가 어떻게 바뀌는지에 대해서 정의한다
쓰임
x86 : 인텔이 개발한 CISC 기반의 ISA로, 대부분의 PC에서 사용된다.
ARM : ARM 회사가 개발한 RISC 기반의 ISA로, 스마트폰이나 태블릿 등에서 많이 사용된다.
MIPS : MIPS Technologies가 개발한 RISC기반의 ISA로, 임베디드 시스템이나 게임기 등에서 사용된다.
Instruction set에서 주로 사용되며, 컴퓨터에서 사용되는 instruction (명령, 작업)의 레퍼토리 (순서를 가진 목록) machine code라고 불리는 binary code로 encoded됩니다.

Store Program Organization
RISC-V Instruction Format
3가지 타입
- R-Type (Register Type) : most arithmetic and logical instruction (except for "immediate")
- I-Type (Register Type) : data transfer (load), arithmetic with Immediate
- S-Type (Store Type) : data transfer (store)

CPU 내부에 있는 초고속 저장소입니다. 보통 석사 과정에서 다루는 RISC 구조는 "모든 연산은 레지스터에서만 한다"는 원칙을 가집니다. (메모리는 너무 느리니까요!)
최소한 알아둬야 할 8가지 레지스터 (다양한 CPU들이 공통으로 포함하고 있는 레지스터)
프로그램 카운터 (PC, Program Counter)
명령어 레지스터 (IR, Instruction Register)
메모리 주소 레지스터 (MAR, Memory Address Register)
메모리 버퍼 레지스터 (MBR, Memory Buffer Register)
플래그 레지스터 (FR, Flag Register)
범용 레지스터 (General-Purpose Registers)
스택 포인터 (SP, Stack Pointer)
베이스 레지스터 (BP, Base Pointer)
데이터가 메모리의 어디에 있는지 찾는 방법입니다. (직접 주소, 레지스터 간접 주소 등)

간단하고 빠른 명령어들로 구성된 프로세서이다.
장점
하드웨어 회로가 단순하고, 가격이 저렴하고 발열이 적고 전력소모도 적다.
명령어 실행 속도가 빠르다.
파이프라이닝 기법을 쉽게 적용이 가능하다.
단점
코드 밀도가 낮아 같은 내용을 처리하는데 더 많은 메모리 공간이 필요하다.
고급 언어와 호환성이 떨어진다.
ex) ADD R1, R2, R3
R2 + R3 => R1
복잡하고 다양한 명령어들로 구성된 프로세서이다.
장점
코드 밀도가 높아 메모리 공간을 절약할 수 있다.
고급 언어와 호환성이 좋다.
복잡한 연산을 한 번에 수행할 수 있다.
단점
하드웨어 회로가 복잡하여 가격이 비싸고 발열이 많고 전력소모가 크다.
명령어 실행 속도가 느리다.
파이프라이닝 기법에 적용하기 어렵다.
ex) ADD R1, (R2), (R3)
read R2 in memory and read R3 in memory
send to ALU for addition
Risc 예시보다 더 복잡하다
Risc가 더 많이 쓰인다.
they can share a common data path.
type of instruction: ALU, BNE, JUMP
명령어의 길이가 일정하고 단순해야 파이프라이닝(Pipelining)을 할 수 있기 때문입니다.
모든 명령어가 똑같이 32비트라면, CPU는 "아, 다음 명령어도 32비트 뒤에 있겠구나" 하고 미리 가져올 수 있습니다.
만약 길이가 제각각이라면, 앞의 명령어를 다 해석해보기 전에는 다음 명령어가 어디서 시작하는지 알 수 없습니다.