CS/컴퓨터 구조

2장 : 컴퓨터 산술/논리 - (1) 논리 연산

infobox503 2024. 11. 13. 21:37

<요약>

  • 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진수
        1. 해당 비트로 나타낼 수 있는 최소값 + 보수 값
          • 예시
            • 8비트, 0000 1000
            • ⇒ 최소값 = -128
            • ⇒ 보수 값 = 1000 = 8
            • ⇒ 결과 = -128 + 8 = -120
        2. 보수를 보수로 바꿔서 계산

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. 시프트의 이점

  1. 특정 산술 연산 속도 높일 수 있음
    • *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

9. C 플래그를 포함한 시프트 연산

  • 의미
    • 시프트 연산에서 맨 왼쪽에 플래그가 있다고 가정하고 연산 진행
  • 종류
    • 맨 왼쪽 비트 C 플래그를 포함해서 시프트 진행(원래 하던대로 시프트 하면됨)
    • SHLC : C 플래그를 포함한 좌측-시프트
    • SHRC : C 플래그를 포함한 우측-시프트
    • RLC : C 플래그를 포함한 좌측 순환 시프트
    • RRC : C 플래그를 포함한 우측 순환 시프트
  • 예외
    • 산술적 우측 시프트에 C 플래그 값이 포함되는 경우
      • → C 플래그의 값이 부호 비트에 쓰여짐
      • 해결 방안
        • C 플래그가 레지스터로 못들어오게 막음
        • or
        • 오버플로우 알림