오늘 끝나면
Shift와 비교
- ✓Shift와 비교의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 Shift와이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
밀고 회전하고 비교 — 상태 플래그가 생긴다 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
반도체 설계 · 08
Shift와
비교
비트를 통째로 한 칸 미는 것이 시프트다.
왼쪽으로 밀면 ×2, 오른쪽으로 밀면 ÷2가 된다. 빈 자리에 뭘 채우느냐가 핵심이다.
비교는 빼서 차를 버리고 플래그만 남기는 연산이다.
비트를 밀면 ×2 또는 ÷2
이진수는 자릿값이 2의 거듭제곱이다. 그래서 자리를 통째로 한 칸 옮기면 값이 두 배가 되거나 반토막이 된다.
왼쪽으로 한 칸 밀면 모든 비트의 자릿값이 두 배가 된다. 곧 ×2다.
오른쪽으로 한 칸 밀면 반대로 ÷2가 된다(소수점 아래는 버린다).
십진수에서 자리를 옮기면 ×10이나 ÷10이 되는 것과 똑같은 원리다. 밑이 2일 뿐이다.
곱셈기와 나눗셈기는 비싸다. 그런데 2의 거듭제곱 곱셈이나 나눗셈은 시프트 한 번으로 끝난다.
그래서 시프트는 ALU에서 가장 싼 산술이다. 컴파일러도 x*2를 보면 시프트로 바꾼다.
빈 자리에 뭘 채우나, 논리 vs 산술
한 칸 밀면 반대편 끝에 빈 자리가 생긴다. 거기에 뭘 넣느냐로 시프트 종류가 갈린다.
논리 오른쪽(SHR)은 빈 MSB 자리에 무조건 0을 채운다.
부호 없는 수를 ÷2 할 때 맞다. 0…1010은 0…0101이 된다.
산술 오른쪽(SAR)은 빈 자리에 원래 부호비트(MSB)를 복사한다.
음수를 ÷2 해도 음수로 남게 하려는 것이다. −8이 −4로 제대로 나온다.
만약 음수를 0으로 채우면 갑자기 큰 양수로 망가진다. 그래서 부호 있는 수에는 SAR을 쓴다.
왼쪽 시프트는 항상 LSB에 0을 채운다. 종류 구분이 없다.
0을 넣으니 음수가 큰 양수로 망가진다
MSB(1)를 복사하니 −8 ÷2가 −4로 맞다
rotate, 밀려난 비트를 반대편으로
시프트는 끝 비트를 밖으로 버린다. 회전(rotate)은 그 비트를 버리지 않고 반대편 끝으로 돌려 넣는다.
오른쪽 회전(ROR)은 밀려난 LSB를 빈 MSB 자리에 끼운다.
그래서 1의 개수는 절대 변하지 않는다. 비트가 고리처럼 돌 뿐이다.
회전은 암호와 해시, 비트 단위 데이터 처리에서 자주 쓴다.
버리는 시프트와 보존하는 회전을 한 ALU에 함께 넣어두면 쓰임새가 넓어진다. 시프트 유닛은 보통 이 네 종류(SHL, SHR, SAR, ROR)를 갖춘다.
직접 밀어보고 빈 자리를 예측한다
16비트 레지스터 R을 두고 SHL, SHR, SAR, ROR 중 하나를 골라 한 칸씩 민다. 실행 전에 빈 자리에 뭐가 들어올지 먼저 예측하고 결과와 맞춰본다.
CMP를 고르면 R−B를 계산해 차는 버리고 Zero와 Negative 플래그만 세운다. B를 밀어 R과 같게, 작게, 크게 만들며 플래그가 어떻게 바뀌는지 본다.
왼쪽 · ×2
b15 … b0 (왼쪽이 MSB)
실행하면 나옴
비교 = 빼서 플래그만 남기기
CPU에는 ‘같나? 작나?’를 직접 보는 회로가 없다. 빼본 뒤 결과의 흔적으로 판단한다.
비교(CMP) A−B는 가산기로 뺄셈을 한다. 단, 차 값은 저장하지 않고 버린다.
대신 결과에서 두 가지 흔적만 챙기는데, 이것이 플래그다.
Zero는 차가 0일 때 1이 되고, 두 값이 같다는 뜻이다.
Negative는 차가 음수일 때 1이 되며(차의 MSB), A가 더 작다는 뜻이다.
이 두 비트 조합으로 같다, 작다, 크다, 이하, 이상을 전부 가려낸다.
시프트도 비교도 결국 ALU 안의 부속이다. 여기서 만든 플래그를 분기(branch) 명령이 읽어 ‘같으면 점프’를 결정한다.
Q. 산술 오른쪽 시프트(SAR)가 빈 자리에 채우는 값은?
정답은 부호 비트(MSB)다.SAR은 원래 MSB를 복사해 채우므로 음수를 ÷2 해도 부호가 유지된다.
반대로 논리 오른쪽(SHR)은 무조건 0을 채워 부호 없는 수에만 맞다.
CMP A,B : A − B를 계산해 차는 버리고 Z와 N만 챙긴다
| 연산 | Z | N | 의미 |
|---|---|---|---|
| A − B | 1 | 0 | A = B (같음) |
| A − B | 0 | 1 | A < B (작음) |
| A − B | 0 | 0 | A > B (큼) |