2025-09-23 22:57
Tags: 컴퓨터 하드웨어
기계어
-
CPU가 직접 이해하고 실행할 수 있는 유일한 언어로, 0과 1의 이진 코드로 구성된다.
-
모든 프로그램은 컴파일러나 인터프리터를 통해 궁극적으로 특정 CPU 아키텍처에 맞는 기계어로 번역되어야 실행
-
폰 노이만 구조 에선 메모리 에 데이터 + 명령어(프로그램) 저장 → 이 ‘명령어’를 기계가 알아들을 수 있는 형태로 표현한 것이 바로 기계어의 시작
-
CPU 제조사는 자신들의 프로세서가 이해할 수 있는 명령어들의 집합과 그 형식을 정의하는데,
- 이를 명령어 집합 구조(Instruction Set Architecture, ISA)
-
0과 1로 코딩하는건 사실상 불가능 → 1대1 대응 시켜서 어셈블리어 등장
-
기계어 명령어는 보통 두 부분으로 구성
- 연산 부호 (Opcode, Operation Code):
- CPU가 수행해야 할 작업의 종류를 나타낸다.
- ‘무엇을 할 것인가?‘에 해당하며, 덧셈(ADD), 데이터 이동(MOVE), 비교(COMPARE) 등과 같은 기본적인 동작을 지정한다.
- 피연산자 (Operand):
- 연산에 사용될 데이터나 데이터의 위치를 나타낸다.
- ‘무엇을 가지고 할 것인가?‘에 해당, 특정 메모리 주소, CPU 내부의 임시 저장 공간인 레지스터(Register), 숫자 값 자체가 될 수 있다.
- 연산 부호 (Opcode, Operation Code):
명령어 집합의 두 가지 접근법: CISC와 RISC
ISA는 크게 두 가지 철학으로 나뉜다.
| 구분 | CISC (Complex Instruction Set Computer) | RISC (Reduced Instruction Set Computer) |
|---|---|---|
| 철학 | 하나의 명령어가 복잡하고 강력한 기능을 수행 | 하나의 명령어는 단순하고 한 가지 작업만 수행 |
| 명령어 수 | 많음 (수백 ~ 수천 개) | 적음 (수십 ~ 수백 개) |
| 명령어 길이 | 가변 길이 | 고정 길이 |
| 실행 속도 | 명령어마다 다름 | 대부분의 명령어가 1클럭에 실행 |
| 컴파일러 | 상대적으로 단순 | 복잡함 (최적화가 중요) |
| 대표 아키텍처 | Intel x86, AMD x86-64 | ARM, MIPS, RISC-V |
| 비유 | ”점심 세트 주문” (한 번에 여러 요리) | “밥, 국, 반찬 따로 주문” (단순 작업 조합) |