레지스터 vs 메모리
Coddy Assembly 여정의 기초 섹션에 포함된 레슨 — 45개 중 3번째.
이제 여러분은 컴퓨터 내부에서 데이터가 머무를 수 있는 두 곳에 대해 배웠습니다:
- 레지스터 — CPU 내부의 아주 작은 저장 공간
- 메모리 (RAM) — CPU 외부의 번호가 매겨진 슬롯들로 이루어진 거대한 격자
하지만 왜 두 개의 장소가 있을까요? 왜 CPU가 메모리와 직접 작업할 수 없을까요?
정답은 속도입니다. 레지스터는 CPU 내부에 있기 때문에 매우 빠릅니다. 메모리는 외부에 있기 때문에 더 느립니다. CPU는 단일 사이클 내에 레지스터에 액세스할 수 있지만, 메모리에 액세스하는 데는 훨씬 더 오랜 시간이 걸립니다.
나란히 비교:
| 특징 | 레지스터 | 메모리 (RAM) |
|---|---|---|
| 위치 | CPU 내부 | CPU 외부 |
| 속도 | 매우 빠름 (1 사이클) | 더 느림 (여러 사이클) |
| 저장 슬롯 수 | 매우 적음 (x86-64에서 16-32개) | 수백만 또는 수십억 개 |
| 각 슬롯의 크기 | 8 바이트 (64 비트) | 1 바이트 |
| 액세스 방법 | 이름으로 (rax, rbx, rcx...) | 주소로 (1000, msg, buffer) |
| 휘발성 여부 | 예 (전원이 꺼지면 사라짐) | 예 (전원이 꺼지면 사라짐) |
어셈블리에서 가장 중요한 규칙:
CPU는 메모리에 있는 데이터와 직접 작업할 수 없습니다. 데이터는 먼저 레지스터로 로드되어야 합니다.
이것은 선택 사항이 아닙니다. 이것이 CPU가 설계된 방식입니다. 모든 덧셈, 모든 비교, 모든 데이터 이동은 반드시 레지스터를 거쳐야 합니다.
지속적으로 사용하게 될 3단계 패턴:
| 단계 | 수행 내용 | 예시 |
|---|---|---|
| 1. LOAD | 메모리에서 레지스터로 데이터를 복사합니다 | mov rax, [count] |
| 2. WORK | 레지스터를 사용하여 작업을 수행합니다 | add rax, 5 |
| 3. STORE | 결과를 다시 메모리에 복사합니다 (필요한 경우) | mov [result], rax |
이 규칙을 잊어버리면 어떻게 될까요?
만약 메모리에 있는 두 숫자를 더하려고 하면, 어셈블러가 오류를 발생시킬 것입니다. CPU는 단순히 그 작업을 수행할 수 없습니다. 먼저 그것들을 레지스터에 로드해야 합니다.
직접 해보기
이 레슨에는 코드 챌린지가 없습니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.