사망년/컴퓨터구조

chapter 03 산술과 논리연산

stop-zero 2023. 9. 24. 23:17

ALU(Arithmetic and Logical Unit)

ALU

산술 논리 연산 장치는 가산기를 중심으로 연산 결과 등을 기억하는 레지스터, 보수 값을 생성하는 보수기, 오버플로를 검출하는 오버플로 검출기 등으로 구성되어 있다. 사칙연산인 산술 연산과 두 수의 크기를 비교하고 판단하는 논리연산의 기능을 한다. 자료의 수가 하나일 경우에는 단항 연산을 두 개의 자료에 대해서는 2진(binary) 연산을 수행한다.

주기억장치에 있는 데이터를 레지스터에 입력한다. 비트들을 좌우로 이동시키는 시프트 레지스터(shift register)와 연산 결과의 상태를 나타내는 플래그를 저장하는 상태 레지스터(status register)가 있다. CPU 연산을 위해서는 Data 정보가 있어야 한다. 레지스터의 개수가 많을 수록 속도가 올라가고 비트가 많을 수록 정확도가 올라간다. 

 

수의 표현 방법

문자 데이터의 표현

EBCDIC나 내부 ASCII로 입력하는 컴퓨터에서는 입력된 코드를 그대로 기억한다. 외부 ASCII로 입력 받는 컴퓨터에서 이것을 EBCDIC 또는 내부 ASCII 로 변환한 후 기억한다. 

 

숫자 데이터의 표현(2진화 10진 코드)

존 형식(Zone format) = 문자로서의 숫자

  • 존(Zone)과 숫자가 하나의 바이트에 표시
  • 문자(String) 처리에서만 사용되므로 연산 불가능
  • 음양 부호의 위치는 최하위 바이트의 상위 4비트인데,
    • 부호 (+) : 1100
    • 부호 (-) : 1101
    • 부호가 없으면 :: 1111
  • 숫자 데이터 : 1111
10진수의 표현 숫자 숫자 부호 숫자
+425 1111 0100 1111 0010 1100 0101
-425 1111 0100 1111 0010 1101 0101
425 1111 0100 1111 0010 1111 0101

 

팩 형식(Packed format)

  • 한 바이트에 두 자리의 10진수를 표시하는 형식으로 부호의 위치는 최하위 바이트의 하위 4비트
  • 수치 연산용으로 입출력은 불가능하며 입출력을 하려면 존 형식으로 변경해야 한다.
  • 존 형식에 비하면 기억공간이 절약, 문자 코드로의 변환이 용이하기에 계산이 복잡하지 않다.
10진수의 표현 숫자 숫자 숫자 부호
+425 0100 0010 0101 1100
-425 0100 0010 0101 1101
425 0101 0010 0101 1111

 

숫자 데이터의 표현 (2진수), 음수의 표현방법

1. 절대치 표현

  • 맨 좌측 비트 = 부호 비트
  • 나머지 n-1개의 비트 = 수의 크기(magnitude)
  • 부호비트와 크기 부분 별도로 처리
  • 0 표현 두 개 존재 > n 비트 단어로 표현할 수 있는 수들이 2n개가 아닌 (2n-1)개로 감소 
    • 0, 0000000 = + 0
    • 1, 0000000 = - 0

2. 1의 보수 표현 - 모든 비트들을 반전 (0 → 1, 1 → 0)

3. 2의 보수 표현 - 모든 비트들을 반전 후 결과값 + 1

  • +9 = 0,0001001
  • -9 = 1,1110110 (1의 보수)
  • -9 = 1,1110111 (2의 보수)

4. 비트 확장

  • 데이터를 더 많은 비트의 레지스터에 저장하거나 더 긴 데이터와의 연산 수행
  • 절대치 표현의 경우 : 부호 비트를 맨좌측으로 이동, 그 외의 비트는 0
  • 2의 보수 표현의 경우 : 확장되는 상위 비트들을 부호 비트와 값으로 세트 = 부호 비트 확장(sign-bit extension)

 

부동소수점 표현(Floating point representation)

표현 방법

  • 부동소수점 수의 일반적인 형태
  • 같은 수에 대한 부동소수점 표현이 여러 개 존재
  • 정규화된 표현 
    • 정규화 : 소수점의 오른쪽에 있는 비트가 반드시 1이 되도록 위치 조정

 

정밀도

  • 32비트 부동소수점 형식
S(부호) 지수(E) 필드 가수(M)필드
  • 지수(E) 필드의 비트 수가 늘어나면, 표현 가능한 수의 범위 확장
  • 가수(M) 필드의 비트수가 늘어나면, 정밀도(precision) 증가

 

정규화를 적용한 비트배열의 예(0.1101 X2^5)

  • 부호(S) 비트 = 0
  • 지수(E) = 00000101
  • 가수(M) = 1101 0000 0000 0000 000 000
  • 소수점 아래 첫 번째 비트는 항상 1이므로, 반드시 저장할 필요X
    • 가수 23비트로 소수점 아래 24자리 수까지 표현 가능 

 

바이어스된 지수(Biased Exponent)

  • 지수를 바이어스된 수로 표현
  • 0에 대한 표현에서 모든 비트들이 0이 되게 하여, 0-검사(Zero-Test) 가 용이하게 하기 위함
  • 음수인 지수를 표현하기 위한 방법, + 양의 방향으로 편향

 

IEEE754 : 사용자들의 혼란과 불편을 줄이고, 컴퓨터들간의 프로그램 이식성 향상 > 부동소수점 표현에 대한 소수점 제안

 

  • 지수 필드가 늘어나면 수의 범위 확장
  • 가수 필드가 늘어나면 수의 정밀도 확장

 

논리연산

AND 연산 : 같은 위치에 데이터가 모두 1이면 결과 비트는 1, 어느 하나라도 0이면 0, 마스킹 수행(필요 없는 부분을 지우는 것)

OR 연산 : 어느 하나만 1이면 결과는 1, 모두 0이면 0

XOR 연산 : 같으면 0, 다르면 1

NOT 연산 : 데이터 단어의 모든 비트들 반전(Invert)

 

선택적 - 세트(Selective-set) 연산 

B 레지스터의 비트들 중에서 1로 세트 된 비트들과 같은 위치에 있는 A레지스터의 비트들을 1로 세트

 

선택적 - 보수(Selective-Complement) 연산

  • B 레지스터의 비트들 중에서 1로 세트 된 비트들에 대응되는 A 레지스터의 비트들을 보수로 변환

 

마스크(Mask) 연산

  • B 레지스터의 비트들 중에서 0인 비트들과 같은 위치에 있는 A 레지스터의 비트들을 0으로 바꾸는 연산
  • 용도 :단어 내 원하는 비트들을 선택적으로 Clear하는데 사용

 

삽입(Insert)연산

  • 새로운 비트 값들을 단어 내의 특정 위치에 삽입

방법

  • 삽입할 비트 위치들에 대하여 마스크(AND) 연산 수행
  • 새로이 삽입할 비트들과 OR 연산 수행

 

비교(Compare) 연산

  • A와 B 레지스터의 내용 비교 → Exclusive-OR 연산
  • 같으면 0 다르면 1

 

시프트(shift) 연산

논리 시프트(Logical shift)

  • 레지스터 내의 데이터 비트들을 왼쪽 혹은 오른쪽으로 한 칸씩 이동

좌측 쉬프트(Left Shift) x 2

  • 모든 비트들을 좌측으로 한 칸씩 이동
  • 최하위 비트(A1)로는 0, 최상위 비트(A4)는 버림

우측 취프트(Right Shift) / 2

  • 모든 비트들을 우측으로 한 칸씩 이동
  • 최상위 비트(A4)로 0, 최하위 비트(A1)는 버림

 

순환 시프트(Circular Shift)

= 회전(Rotate), 최상위 혹은 최하위에 있는 비트들을 버리지 않고 반대편 끝에 있는 비트 위치로 이동

순환 좌측 - 쉬프트(Circular Shift-Left)

  • A4 A3, A3 A2, A2 A1,  A1 A4

순환 우측 - 쉬프트(Circular Shift-Right)

  • A4  A3, A3  A2, A2  A1,  A1  A4

 

산술 시프트(Arithmetic Shift)

부호 비트는 그대로 유지, 수의 크기를 나타내는 비트들만 쉬프트

산술적 좌측 - 쉬프트(Arithmetic Shift-Left)

A4(불변), A3 ← A2, A2 ← A1, A1 ← 0

산술적 우측 - 쉬프트(Arithmetic Shift-Right)

A4(불변), A4 → A3, A3 → A2, A2 → A1

 

산술 연산

2의 보수 체계에서의 가산

두 수를 더하고 올림수가 발생하면 버림

1) (+3) + (+4) = 0,011+0,100=0,111 = +7

2) (-3) + (+3) = 1,101, + 0,011 = 0,000

 

덧셈 오버플로우 : 덧셈 결과가 범위를 초괗여 결과값이 틀리게 되는 상태

 두 올림수(Carry)들 간의 Exclusive-OR를 이용

 

뺄셈 오버플로우 : 뺄셈 결과가 그 범위를 초과하여 결과값이 틀리는 상태

 

BCD 가산

  1. 본래의 2진수 가산을 사용하여, 각 비트에 맞는 BCD 코드를 더한다.
  2. 합이 9이하인 곳에서는 수정이 필요 없다.
  3. 두 비트의 합이 9보다 클 때 6(0110)의 수정 인자가 적합한 결과를 얻어 내기 위하여 합에 더해져야 한다. 캐리가 생기는 경우에는 상위 조합에 1을 더한다

 

김창환 [컴퓨터구조] 복두출판사 p.92~124

'사망년 > 컴퓨터구조' 카테고리의 다른 글

버스 중재 방식  (1) 2023.12.05
CPU의 기본 구조  (2) 2023.12.03
캐시 사상방식  (0) 2023.12.03
chapter 02 자료 표현  (0) 2023.09.19
Chapter 01 컴퓨터 시스템 개요  (0) 2023.09.11