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