<요약>
- ALU
- 구성 요소
- 산술 연산장치
- 논리 연산장치
- 시프트 레지스터
- 보수기
- 상태 레지스터
- 구성 요소
- 진수 보수 표현
- 종류
- 부호화-크기 표현
- 1의 보수
- 2의 보수
- 종류
- 비트 확장
- 종류
- 부호화-크기 비트 확장
- 2의 보수 비트 확장
- 종류
- 논리 연산
- 기본 논리 연산
- 응용 논리 연산
- 종류
- 선택적-세트 연산
- 선택적-보수 연산
- 마스크 연산
- 삽입 연산
- 비교 연산
- 종류
- 시프트 연산자
- 논리적 시프트
- 순환 시프트
- 데이터 전송 방법
- 순환 시프트 + 논리적 시프트
- 산술적 시프트
- 논리적 시프트 사용
- C 플래그를 포함한 시프트 연산
- 종류
- SHLC
- SHRC
- RLC
- RRC
- 예외
- 우측 시프트 연산
- 해결 방안
- C 플래그가 레지스터로 못 넘어오게 막음
- 오버플로우 알림
- 해결 방안
- 우측 시프트 연산
- 종류
1. ALU
- ALU(산술논리연산장치)
- 산술, 논리 연산 수행
- CPU 내부 존재
- 구성 요소
- 산술 연산장치
- 사칙연산 수행
- 논리 연산장치
- AND, NOT 등 수행
- 시프트 레지스터
- 비트를 왼, 오로 이동
- 보수기
- 2의 보수 변환(음수화)
- 상태 레지스터
- 연산 결과 상태를 나타내는 플래그 저장
- 산술 연산장치
2. 진수
- 종류
- 2진수
- 8진수
- 2진수 3자리
- 16진수
- 2진수 4자리
- 음수 표현
- 모든 음수 표현은 맨 왼쪽 비트(MSB)가 부호를 뜻함
- 종류
- 부호화-크기 표현
- 의미
- 가장 왼쪽 비트(MSB) = 부호
- 0 = +
- 1 = -
- 장점
- 간단
- 단점
- 덧셈, 뺄셈 수행 어려움
- +0, -0 존재 : 플래그 입장에서는 서로 다른 값이기 때문에 에러
- 의미
- 1의 보수 표현
- 의미
- 해당 값을 모두 반전시키면 음수
- 예시
- +8 = 0 1000
- ⇒ -8 = 1 0111
- 의미
- 2의 보수 표현
- 의미
- 해당 값을 모두 반전시키고 +1하면 음수
- 예시
- +8 = 0 1000
- ⇒ -8 = 1 1000
- 의미
- 부호화-크기 표현
- 1, 2 보수의 범위
- 가정 : 8비트
- 1의 보수 : -127 ~ 127(-(2^7-1) ~ (2^7-1))
- 2의 보수 : -128 ~ 127(-2^7 ~ (2^7-1))
- ex)
- 2의 보수 = -128 ~ 127
- 1의 보수 = -127 ~ 127
- 2의 보수가 음수 표현을 1개 더 가능
- 2의 보수 → 10진수 변환
- 음수 보수 → 10진수
- 해당 비트로 나타낼 수 있는 최소값 + 보수 값
- 예시
- 8비트, 0000 1000
- ⇒ 최소값 = -128
- ⇒ 보수 값 = 1000 = 8
- ⇒ 결과 = -128 + 8 = -120
- 예시
- 보수를 보수로 바꿔서 계산
- 해당 비트로 나타낼 수 있는 최소값 + 보수 값
- 음수 보수 → 10진수
3. 비트 확장
- 의미
- 해당 데이터의 비트를 늘려주는 것
- 종류
- 부호화-크기 표현의 비트 확장
- 부호 비트만 맨 왼쪽으로 옮겨두고, 그 사이 공간을 0으로 채움
- 예시
- 1001 → 4비트 확장 → 1 / 0000 / 001
- 2의 보수 표현의 비트 확장
- 양수인 경우 부호화-크기 표현과 같음
- 음수인 경우, 부호화-크기 표현에서 사이 공간을 1로 채움
- 예시
- 양수
- 맨 왼쪽 비트는 부호
- 0001 → 4비트 확장 → 0 / 0000 / 001
- 음수
- 1001 → 4비트 확장 → 1 / 1111 / 001
- 양수
- 부호화-크기 표현의 비트 확장
4. 논리 연산
- 의미
- AND, NOT, …
- 멀티플렉서
- 신호 개수 < 출력 개수
- 000 → 0000 0001, 001 → 0000 0010
- 디멀티플렉서
- 신호 개수 > 출력 개수
- N-비트 논리 연산장치
- N개 만큼의 X모듈 연결
- 예시
- 4-비트 논리 연산장치
- 논리 연산
- 종류
- 기본적인 논리연산
- AND, OR, XOR, NOT 연산
- 응용 논리연산
- 종류
- 선택적-세트 연산
- 일부 비트만 1로 세트
- 선택적-세트 연산
- 종류
- 기본적인 논리연산
- 종류
- 선택적-보수 연산
- 일부 비트만 보수로 바꾸려고 함
- XOR 연산을 이용해서 선택적-보수 실행
- 예시
- 마스크 연산
- 일부 비트만 0으로 만들기
- AND 연산 사용
- 예시
- 삽입 연산
- 일부 비트만 원하는 값으로 대체
- AND, OR 연산 사용
- 예시
- 비교 연산
- 두 값의 같은 위치의 비트 비교
- 같으면 0, 다르면 1
- XOR 연산 사용
- 예시
- 두 값의 같은 위치의 비트 비교
5. 시프트 연산자
- 의미
- 비트를 왼, 오로 이동
- 종류
- 논리적 시프트
- 종류
- 좌측 시프트
- 모든 비트를 왼쪽으로 1칸 이동
- 맨 오른쪽 비트는 0
- 우측 시프트
- 모든 비트를 오른쪽으로 1칸 이동
- 맨 왼쪽 비트는 0
- 좌측 시프트
- 종류
- 순환 시프트
- 종류
- 순환 좌측 시프트
- 좌측 시프트인데, 버려지는 맨 왼쪽 비트를 맨 오른쪽으로 보냄
- 순환 우측 시프트
- 우측 시프트인데, 버려지는 맨 오른쪽 비트를 맨 왼쪽 비트로 보냄
- 순환 좌측 시프트
- 종류
- 논리적 시프트
- 원리
- 시프트 레지스터
- 시프트 기능의 회로
- D 플립플롭으로 만듦
- 시프트 레지스터
6. 직렬 데이터 전송
- 의미
- 순환 + 논리적 시프트로 A 레지스터의 내용을 B 레지스터로 복사
- 과정
- A 레지스터 : 순환
- B 레지스터 : 논리
- 예시
- B 레지스터는 우측 시프트 시행
- A 레지스터는 순환 우측 시프트 수행
- ⇒ B 레지스터의 값은 왼쪽에서부터 사라지고, 사라진 자리를 A 레지스터의 값이 채움
- 따라서, A 레지스터의 내용이 B 레지스터로 복사됨(A 레지스터는 원본 유지)
7. 산술적 시프트
- 의미
- 부호를 가진 데이터에 대한 시프트 동작 방법
- 부호 비트만 놔두고 시프트 연산 진행
- 종류
- 산술적 좌측 시프트
- 부호 비트는 대상에서 제외하고, 좌측 시프트 시행
- 산술적 우측 시프트
- 우측 시프트 시행(부호 비트는 오른쪽 비트로 복사됨, 부호 비트의 값은 부호 비트 그대로 유지)
- 산술적 좌측 시프트
8. 시프트의 이점
- 특정 산술 연산 속도 높일 수 있음
- *2, /2 연산을 빠르게 진행 가능
- 좌측 시프트 → *2
- 우측 시프트 → /2
- 곱하기 연산을 빠르게 진행 가능
- 예시
- x에 24를 곱하려고 한다. 이때, 24를 빠르게 곱할 수 있다.
- 24 → 8 + 16 → 2^3 + 2^4
- a = x를 3번 왼쪽 시프트 (2^3)
- b = x를 4번 왼쪽 시프트(2^4)
- ⇒ a+b = x*24
- 예시
- *2, /2 연산을 빠르게 진행 가능
9. C 플래그를 포함한 시프트 연산
- 의미
- 시프트 연산에서 맨 왼쪽에 플래그가 있다고 가정하고 연산 진행
- 종류
- 맨 왼쪽 비트 C 플래그를 포함해서 시프트 진행(원래 하던대로 시프트 하면됨)
- SHLC : C 플래그를 포함한 좌측-시프트
- SHRC : C 플래그를 포함한 우측-시프트
- RLC : C 플래그를 포함한 좌측 순환 시프트
- RRC : C 플래그를 포함한 우측 순환 시프트
- 예외
- 산술적 우측 시프트에 C 플래그 값이 포함되는 경우
- → C 플래그의 값이 부호 비트에 쓰여짐
- 해결 방안
- C 플래그가 레지스터로 못들어오게 막음
- or
- 오버플로우 알림
- 산술적 우측 시프트에 C 플래그 값이 포함되는 경우
'CS > 컴퓨터 구조' 카테고리의 다른 글
2장 : 컴퓨터 산술/논리 - (3) 산술 연산 (0) | 2024.11.18 |
---|---|
2장 : 컴퓨터 산술/논리 - (2) 논리 연산2 (1) | 2024.11.15 |
1장 : CPU - (5) 주소 지정 방식 (0) | 2024.11.11 |
1장 : CPU - (4) 명령어 세트 (0) | 2024.11.08 |
1장 : CPU - (3) 명령어 파이프라인 (0) | 2024.11.06 |