오늘 끝나면
ALU: 더하고 비교하는 엔진
- ✓ALU: 더하고 비교하는 엔진의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 ALU:이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
반가산기·전가산기·논리 연산 — 계산은 작은 게이트 묶음이 숫자를 밀어내는 과정 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
12 · 더하고 비교하는 엔진
ALU
게이트로 덧셈 회로를 만든다. 이것을 모으고 빼기와 AND, OR까지 넣으면 숫자를 다루는 계산 코어, 곧 ALU가 된다.
반가산기, XOR과 AND
덧셈의 가장 작은 조각부터 시작한다. 1비트 더하기 1비트다.
한 자리를 더하면 결과가 둘 나온다. 합(Sum)과 자리올림(Carry)이다.
1+1은 0이고 위로 1을 올린다.
이것을 게이트로 만든다. 합은 XOR, 자리올림은 AND이다.
XOR과 AND 둘이면 반가산기(half adder)가 된다. 가산기의 씨앗이다.
| A | B | 합 | 올림 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
전가산기와 자리올림 전파
반가산기는 입력이 둘뿐이다. 진짜 덧셈에는 아래 자리에서 올라온 올림도 더해야 한다.
입력을 셋으로 늘린다. A, B, 아래 자리 올림(Carry-in)이다.
셋을 더해 합과 새 자리올림(Carry-out)을 낸다. 이것이 전가산기(full adder)이다.
반가산기 둘에 OR 하나를 붙이면 전가산기가 된다.
올림이 한 칸씩 위로 타고 오르는 것을 자리올림 전파라 한다. 손으로 받아올림 하는 것과 같다.
여러 비트를 잇다
한 자리짜리 전가산기를 여러 개 줄세운다. 그러면 여러 비트 숫자를 더한다.
한 칸의 Carry-out을 다음 칸의 Carry-in으로 꽂는다.
전가산기 4개를 이으면 4비트 덧셈기가 되고, 0부터 15까지 더한다.
올림이 오른쪽 끝에서 왼쪽 끝까지 물결처럼 번진다. 그래서 리플 캐리(ripple carry)라 부른다.
비트를 더 이으면 8비트, 32비트, 64비트로 커진다. 원리는 그대로다.
숫자를 다루는 코어
덧셈기에 빼기와 AND, OR까지 넣고 어떤 연산을 할지 고르게 한 것이 ALU이다.
ALU는 숫자 둘 A와 B, 그리고 연산 선택을 받는다.
결과와 플래그를 같이 내놓는다. 결과가 0이면 ZERO, 자리올림이 나면 CARRY가 켜진다.
오른쪽에서 연산을 고르고 A와 B를 바꿔본다. 같은 회로가 더하고 빼고 비교까지 한다. 이 ALU가 곧 CPU의 계산 근육이다.
플래그, ZERO · CARRY
ALU는 결과 숫자만 내는 것이 아니다. 그 옆에 작은 신호도 같이 켠다. 이것이 플래그다.
ZERO는 결과가 정확히 0일 때 켜진다. 두 수가 같은지 비교할 때 쓴다.
CARRY는 자리올림이 끝에서 넘쳐 나올 때 켜진다. 비트 칸을 넘어선 것이다.
플래그는 한 비트짜리 작은 깃발이다. 켜짐(1)이냐 꺼짐(0)이냐를 나타낸다.
CPU는 이 깃발을 보고 ‘같으면 점프’ 같은 판단을 한다. 결과보다 이 한 비트가 흐름을 가른다.
Q. 결과가 0일 때 켜지는 플래그는? (ZERO · CARRY · 둘 다 · 없음)
정답은 ZERO이다.CARRY는 자리올림이 끝에서 넘칠 때 켜지는 별개 신호이다.
두 신호는 따로 켜지고, 같은 비교에서 둘 다 켜질 수도 안 켜질 수도 있다.
| 연산 | 결과 | ZERO | CARRY |
|---|---|---|---|
| 5 − 5 | 0 | 1 | 0 |
| 5 + 3 | 8 | 0 | 0 |
| 15 + 1 | 0 | 1 | 1 |