관리 메뉴

공부 기록장 💻

[컴퓨터구조] 컴퓨터 산술과 논리 연산 본문

# CS Study/Computer Architecture

[컴퓨터구조] 컴퓨터 산술과 논리 연산

dream_for 2021. 4. 21. 20:51

컴퓨터 산술과 논리 연산

 

ALU의 구성 요소

- 산술 연산 장치: +, -, *, % 수행

- 논리 연산 장치 : 논리 연산(AND, OR, XOR, NOT 등) 수행 

- 시프트 레지스터(shift register) : 비트들을 좌측, 우측으로 이동시키는 기능을 가진 레지스터 -> 플래그들 출력

- 보수기(complementer) : 2진 데이터를 2진 보수로 변환(음수화)

- 상태 레지스터(status register) : 연산 결과의 상태를 나타내는 플래그(flag)들을 저장하는 레지스터 <- 제어 신호들 입력 받음

 

 


정수의 표현

- 2진수 체계

- 부호 없는 정수 표현

- 소수점 아래 표현

 

 

음수 표현 방법

  1. 부호화-크기 표현(signed-magnitude representation)
    1. 맨 좌측 비트가 부호 비트, 나머지 (n-1)개의 비트들읜 수의 크기를 나타내는 표현 방식
      1. 양수- 0 , 음수- 1
    2. 문제점
      1. 덧셈과 뺄셈을 수행하기 위해 부호 비트와 크기 부분을 별도로 처리해야 함
      2. 0에 대한 표현이 두개 존재함
      3. n 비트의 단어로 표현할 수 있는 수들이 2^n개가 아닌 2^(n-1) 개로 감소함
  2. 1의 보수 표현(1's complement representation) - 모든 비트들에 대한 반전
  3. 2의 보수 표현(2's complement representation) 
    1. 모든 비트들을 반전하고 결과값에 1을 더함
    2. 1의 보수, 부호화-크기 표현과 달리 '0'을 표현하는 방법이 한 가지 뿐임
      1. ( -255 ~ 255) 까지 표현 가능한 1의 보수와 달리, -256 ~ 255 의 수 표현 가능

비트 확장(Bit Extension)

 

비트 확장 : 데이터를 더 많은 비트의 레지스터에 저장하거나 더 긴 데이터와의 연산 수행을 위해

데이터의 길이(비트 수)를 늘리는 방법

 

ex) 8-비트 부호화-크기 표현 => 16-비트 부호화 크기 표현

+21 = 00010101 (8-비트 부호화-크기 표현)

+21 = 0000000000010101 (16-비트 부호화-크기 표현)

- 21 = 10010101 (8-비트 부호화-크기 표현)

- 21 = 1000000000100101 (16-비트 부호화-크기 표현)

 

 

부호-비트 확장(sign-bit extension) : 2의 보수 표현인 경우 -> 확장되는 상위 비트들을 부호 비트와 같은 값으로 설정

 


논리 연산

 

논리 연산을 위한 하드웨어 모듈

- 입력 비트들은 든 논리 게이트들을 통과

- 선택 신호들에 의해 멀티플렉서의 네 입력등 중 하나를 출력

 

N-비트 논리 연산 장치

- AND 연산

- OR 연산

- XOR 연산(대응되는 비트들간에 exclusive-OR 연산 : 같으면 0, 다르면 1)

- NOT 연산 : 비트 반전(invert)

 

- 선택적-세트(selective-set) 연산 - OR 연산 이용

- 선택적-보수(selective-complement) 연산 - XOR 연산

- 마스크(mask) 연산 - AND 연산(B레지스터의 비트들 중 값이 0인 비트들과 같은 위치에 있는 A 레지스터의 비트들을 모두 0으로 바꾸는(clear) 연산 )

- 삽입(insert) 연산 - 새로운 비트 값들을 특정 위치에 삽입

 

  • 1) 삽입할 비트 위치들에 대해서는 마스크(AND) 연산 수행
  • 2) 새로 삽입할 비트들과 OR 연산 수행

- 비교(compare) 연산 - XOR 연산(A와 B 레지스터의 내용 비교 - 대응되는 비트들의 값이 같으면 0, 다르면 1로 설정, 모든 비트들이 같으면 Z플래그를 1로 세트)

 

 

 


시프트(shift) 연산

 

- 논리적 시프트(logical shift) : 레지스터 내의 데이터 비트들을 왼쪽 혹은 오른쪽으로 한 칸씩 이동

 

  • 좌측 시프트(left shift) 
    • 모든 비트들을 좌측으로 한 칸씩 이동
    • 최하위 비트(A1)로는 0이 들어오고, 최상위 비트(An) 는 버림(drop-out)
  • 우측 시프트(right shift)
    • 모든 비트들이 우측으로 한 칸씩 이동
    • 최상위 비트(An)으로 0이 들어오고, 최하위 비트(A0)은 버림
  • 순환 시프트(circular, rotate shift) - 최상위, 최하위 비트를 버리지 않고 반대편 끝에 있는 비트 위치로 이동
    • 순환 좌측 시프트(circular left-shift) - 최상위 비트(An)이 최하위 비트 위치인 A0으로 이동
    • 순환 우측 시프트(circular right-shift) - 최하위 비트(A0)이 최상위 비트 위치인 An으로 이동

직렬 데이터 전송(serial data transfer)

- 시프트 연산을 데이터 비트 수만큼 연속적으로 수행하여 두 레지스터들 사이에 한 개의 선을 통해 전체 데이터를 이동시키는 동작

 

 

산술적 시프트(arithmetic shift)

 

728x90
반응형
Comments