오늘 끝나면
명령어와 어셈블리
- ✓CPU가 아는 명령이 LOAD·ADD·STORE·JUMP처럼 작은 동작뿐이고 fetch–decode–execute를 반복함을 설명함
- ✓JUMP가 PC를 옮겨 위로 되돌리면 같은 명령을 반복하는 루프가 만들어짐을 예로 듦
- ✓어셈블리가 기계어(0·1 비트)에 1:1로 붙인 사람용 이름표이고 ISA마다 다름을 말함
실습 미션
오른쪽 실행기에서 1~5 합산 프로그램을 스텝으로 끝까지 돌려, JUMP가 위로 되돌아가며 같은 명령을 5번 반복해 합 15를 만드는 걸 확인함.
성공 조건
- □스텝을 눌러 한 줄씩 PC가 내려가는 걸 봤음
- □JUMP에서 PC가 위 줄로 되돌아가며 루프 도는 걸 봤음
- □끝났을 때 메모리[1]에 합 15가 쌓인 걸 확인했음
작은 명령 · LOAD·ADD·STORE·JUMP · 어셈블리
명령어와 어셈블리
CPU가 아는 건 아주 작은 명령 몇 개뿐임. 우리가 짠 프로그램은 그 작은 명령 묶음으로 번역됨. 어셈블리는 그 명령에 사람이 읽는 이름을 붙인 것.
CPU가 아는 건 작은 명령뿐이다
CPU는 똑똑해 보이지만 한 번에 하는 일은 어이없이 작음.
메모리에서 값 하나 꺼내기, 둘 더하기, 결과 다시 넣기, 다른 줄로 건너뛰기. 거의 이게 전부임.
그 작은 동작 하나가 명령어임. CPU는 같은 동작만 반복함 — 명령 가져오고(fetch), 해석하고(decode), 실행함(execute). 이 한 바퀴를 1초에 수십억 번 돎.
화려한 게임도 결국 이 작은 명령의 폭포임. 복잡해 보이는 건 작은 명령을 수없이 이어 붙였기 때문이지, 명령 하나가 똑똑해서가 아님.
FETCH — PC가 가리킨 줄의 명령을 메모리에서 꺼냄
명령 하나를 처리하려면 세 단계를 다 거쳐야 함.
네 동사로 거의 다 한다 — LOAD·ADD·STORE·JUMP
수많은 명령도 결국 네 종류로 압축됨. 옮기고, 더하고, 되넣고, 건너뜀.
LOAD는 메모리 값을 레지스터(CPU 안의 임시 저장칸)로 가져옴. STORE는 그 반대로 레지스터 값을 메모리에 되넣음.
ADD는 레지스터의 두 값을 더함. 빼기·곱하기도 다 이 자리에서 일어남 — 계산은 메모리가 아니라 레지스터에서만 함.
JUMP는 다음에 읽을 줄을 바꿈. 이 네 동사로 옮기고·계산하고·이동하는 거의 모든 계산이 조립됨.
LOAD — 메모리[0] 값을 레지스터 A로 가져옴
JUMP가 반복을 만든다 — 위로 되돌아가기
보통 CPU는 위에서 아래로 한 줄씩 내려가며 실행함. PC(프로그램 카운터)가 지금 줄을 가리킴.
JUMP는 그 PC를 강제로 다른 줄로 옮김. 아래로 건너뛰면 일부를 건너뛰고, 위로 되돌리면 같은 명령을 다시 함.
위로 되돌리는 JUMP가 바로 루프임. '5를 1까지 줄이며 더해라' 같은 일을, 같은 몇 줄을 5번 돌려 처리함.
조건부 점프(JZ — 0이면 점프)를 끼우면 '언제 멈출지'까지 정함. 갈림길(if)과 반복(loop)이 전부 이 한 동작에서 나옴.
루프위(1줄)로 되돌아감 → 같은 명령을 다시 함 = 루프
위로 되돌리는 JUMP가 곧 반복임. 조건부 점프(JZ)를 끼우면 언제 멈출지까지 정함.
어셈블리 = 기계어에 붙인 이름표
CPU가 진짜 읽는 건 0과 1의 숫자임. ADD 한 줄도 메모리엔 0001 0011 같은 비트로 적혀 있음. 사람 눈엔 외계어임.
그래서 그 숫자 명령마다 사람이 읽는 이름을 붙임 — LOAD, ADD, JUMP. 이게 어셈블리임. 1947년경 등장해 0·1 손코딩을 끝냄.
어셈블리는 기계어와 거의 1:1로 대응함. 이름표만 붙였지 하는 일은 그 숫자 명령 그대로임. 어셈블러가 이름을 다시 비트로 옮김.
Intel·Arm·RISC-V는 각자 다른 명령어 집합(ISA)을 가짐. 그래서 같은 ADD라도 칩마다 다른 비트로 적힘 — 어셈블리도 칩마다 사투리가 다름.
어셈블러가 이름 한 줄을 이 비트로 바꿔 줌. 하는 일은 똑같음 — 이름표만 붙였을 뿐.
ADD R0, R0, R1
Arm — RISC, 명령 폭이 고정됨
직접 어셈블리 실행해보기
오른쪽 실행기에서 1~5 합산 프로그램을 스텝으로 한 줄씩 직접 돌려볼 것.
스텝을 누르면 PC가 가리킨 줄이 실행되고, 레지스터 A·B와 메모리 칸이 그때그때 바뀌는 게 보임.
핵심은 JUMP 줄임. 2줄로 되돌아가며 같은 명령 몇 줄을 5번 반복해, 합 15(=1+2+3+4+5)를 쌓아 올림.
외우지 말고 끝까지 돌려볼 것. '1부터 5까지 더해라'라는 사람 말이, 이 작은 명령 묶음으로 번역돼 굴러가는 게 손에 잡힘.
파란 줄 = 다음에 실행할 명령(PC) · 연한 칸 = 방금 실행한 줄
스텝을 눌러 한 줄씩 실행해보셈. CPU는 이 작은 명령(LOAD·ADD·STORE·JUMP)만 앎. JUMP가 위로 되돌아가며 같은 명령을 5번 반복하는 게 루프임.