✅ Instruction Set Architecture (ISA)란?
- 하드웨어(Processor)에서 실행 가능한 명령어 집합.
- 컴퓨터가 이해할 수 있는 언어이자, 소프트웨어와 하드웨어 사이의 인터페이스.
- 프로그램 입장에서 보이는 시스템의 특성: 기능 동작(operations), 상태(state) 등을 포함.
🔹 ISA는 다양한 CPU에서도 유사한 구조를 가짐.
- 공통된 기능 필요
- 설계 목표: 성능↑, 비용/전력↓, 컴파일러/하드웨어 제작 쉬움
🧠 대표 ISA: ARMv7/v8, MIPS, RISC-V, x86, AMD64 등
✅ Microarchitecture (마이크로아키텍처)
- 같은 ISA라도 여러 구현 방식이 존재함.
- 예: x86 ISA → 286, 386, Pentium, Core 등으로 다양한 구현
💡
ISA는 명세이고, µarch는 그걸 구현한 방식!
✅ Von Neumann 구조와 ISA
- Von Neumann 구조 기반: CPU + 메모리 + 입출력 장치로 구성
- ISA는 그 위에서 동작하는 프로그래머 관점의 기능 명세임.
✅ ISA 예시 (RISC-V 스타일)
예시 명령어:
lw r1,1(r0)
lw r2,2(r0)
add r3,r1,r2
sw r3,0(r0)
j 15
- 이 명령어들을 실행하면서 레지스터와 메모리 상태가 변화함.
- ISA는 바로 이런 변화들을 정의하는 구조임.
✅ ISA의 주요 설계 철학: CISC vs. RISC
| 항목 | CISC | RISC |
|---|
| 컨셉 | 복잡한 명령어 | 단순한 명령어 |
| 명령어 수 | 많음 (>1000개) | 적음 (~200개) |
| 명령어 길이 | 가변(1~15 바이트) | 고정(32bit) |
| 명령어 실행 | 여러 사이클 | 1 사이클 |
| 코드 길이 | 짧음 | 김 |
| 설계 난이도 | 어려움 | 쉬움 |
| 파이프라이닝 | 어려움 | 유리함 |
| 레지스터 수 | 적음 | 많음 |
| 전력 소비 | 높음 | 낮음 |
✅ RISC는 CPU 설계가 단순해서 임베디드 시스템에 적합
✅ CISC는 명령어 수가 적어서 코드 사이즈가 작음
✅ ISA 설계 이슈들
- 오퍼랜드 저장 위치: 레지스터, 메모리, 스택, 누산기
- 명시적 오퍼랜드 수: 0, 1, 2, 3개
- 오퍼랜드 지정 방식: register, immediate, indirect 등
- 오퍼랜드 타입/크기: int, float, string, vector 등
- 지원 연산: add, sub, mul, move, compare 등
✅ ISA 저장 구조 분류 (Storing Operands)
| 아키텍처 | 특징 | 예시 |
|---|
| Stack | TOS에 암시적 저장 | (AB) - {A+(CB)} |
| Accumulator | 누산기 하나만 명시적 | add A → acc ← acc + mem[A] |
| Register | 모든 오퍼랜드 명시적 | add A, B, C → R(A) ← R(B) + R(C) |
| Memory-to-Memory | 모든 오퍼랜드가 메모리 | mul D,A,B / add E,A,E |
✅ ISA의 오퍼랜드 수에 따른 분류
- Register-Register (0,3) → RISC-V, ARM 등
- Register-Memory (1,2) → Intel x86 등
- Memory-Memory (2,2), (3,3) → VAX 등
✅ ISA 주소 지정 방식 (Addressing Mode)
| 방식 | 예시 | 설명 |
|---|
| Register Direct | Add R4, R3 | R4 ← R4 + R3 |
| Immediate | Add R4, #3 | 상수 더하기 |
| Displacement | Add R4, 100(R1) | 로컬 변수 접근 |
| Register Indirect | Add R4, (R1) | 포인터 |
| Indexed | Add R4, (R1 + R2) | 배열 인덱싱 |
| Direct | Add R4, (1000) | 정적 주소 접근 |
| Memory Indirect | Add R4, @(R3) | 이중 포인터 |
| Auto Increment | Add R4, (R2)+ | 배열 순회 |
| Auto Decrement | Add R4, (R2)- | 스택 구현 |
| Scaled | Add R4, 100(R2)[R3] | 배열 인덱스 + 배수 |
✅ 오퍼랜드 타입과 크기
| 타입 | 비트 수 | 바이트 수 |
|---|
| Character | 8 bit | 1 Byte |
| Half Word | 16 bit | 2 Bytes |
| Word | 32 bit | 4 Bytes |
| Double Word | 64 bit | 8 Bytes |
| Float (Single) | 32 bit | 4 Bytes |
| Double | 64 bit | 8 Bytes |
✅ 지원 연산 종류
- 산술/논리: add, sub, mul, div, and, or, xor, not
- 데이터 이동: load, store, move
- 제어: branch, jump, call, return
- 시스템: OS 관련 명령
- 실수연산: fadd, fmul, fdiv
- 문자열, 그래픽 등도 확장 가능
✅ 바이트 순서 (Endianness)
| 종류 | 설명 | 예시 |
|---|
| Little Endian | LSB를 낮은 주소에 저장 | Intel, ARM, RISC-V |
| Big Endian | MSB를 낮은 주소에 저장 | 네트워크, IBM, SPARC |
✅ “Word”란?
- 고정된 크기의 데이터 단위 (ex. 32bit or 64bit)
- 레지스터 크기, 메모리 버스 너비와 관련됨
- x86에서는 word = 16bit, double word = 32bit
✅ SI vs IEC 단위 비교
| SI (10진) | IEC (2진) |
|---|
| KB = 10³ | KiB = 2¹⁰ |
| MB = 10⁶ | MiB = 2²⁰ |
| GB = 10⁹ | GiB = 2³⁰ |
| … | … |