제3장 컴퓨터 산술과 논리 연산

고독한 복전생·2022년 10월 25일
0
post-thumbnail

3.1 ALU의 구성 요소


산술 연산장치 : 산술 연산(+, -, x, ÷)
논리 연산장치 : 논리 연산(AND, OR, XOR, NOT 등)
시프트 레지스터 : 비트들을 좌측 혹은 우측으로 이동시키는 기능
보수기 : 2진 데이터를 2의 보수로 (음수화)
상태 레지스터 : 연산 결과의 상태를 나타내는 플래그들을 저장


3.2 정수의 표현

음수 표현 방법

  • 부호화-크기 표현
  • 1의 보수 표현
  • 2의 보수 표현

부호화-크기 표현

맨좌측 비트 부호 비트, 나머지 (n-1)개의 비트들을 수의 크기를 나타내는 표현 방식
ex) 9 = 0 0001001 -9 = 1 001001

부호화-크기로 표현된 2진수를 10진수로 변환
ex) 0 0100011 = 35 1 001001 = -9
단점

  • 산술 연산 시 부호 비트와 크기를 비교하여 처리해야하기에 복잡함
  • 0에 대한 표현이 두 개 존재하기에, n-비트 단어로 표현할 수 있는 수는 2^n - 1개

보수 표현

1의 보수 표현

  • 모든 비트들을 반전(0 -> 1, 1 -> 0)

2의 보수 표현

  • 모든 비트들을 반전, 결과값 + 1

2의 보수 -> 10진수
양수 :
음수 :

음수의 경우 비트 반전 후 변환한 다음, - 를 붙여주는 방법도 있다


비트 확장

8비트 -> 16비트

10진수 예시
21 = 0001 0101
21 = 0000 0000 0001 0101
-21 = 1001 0101
-21 = 1000 0000 0001 0101

2의 보수 예시
양수는 동일
-21 = 1110 1011(0001 0101 -> 1110 1010 -> + 1)
-21 = 1111 1111 1110 1011


3.3 논리 연산


선택적-세트 연산 : OR 연산과 동일
선택적-보수 연산 : XOR 연산과 동일
마스크 연산 : AND 연산과 동일
삽입 연산 : AND 연산 후, OR 연산
비교 연산 : XOR 연산과 동일


3.4 시프트 연산

논리적 시프트 : 레지스터 내의 비트들을 좌 혹은 우로 한 칸씩 이동
좌측, 우측 시프트
모든 비트들을 해당 방향으로 한 칸씩 이동하며 빈 공간에는 0이 들어오고, 넘어간 데이터는 버힌다.

순환 시프트
최상위 혹은 최하위에 있는 비트가 이동할 때 버리지 않고, 반대편 끝으로 이동한다.

직렬 데이터 전송

산술적 시프트
가장 좌측의 부호 비트는 유지한채, 나머지 비트들만 시프트

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


3.5 정수의 산술 연산

덧셈

1 + 1 = 10이 되면서 올림수(Carry) 1 발생하여 상위 비트로 넘기고 자신은 0만 남김
2의 보수로 표현된 수들의 덧셈 : 두 수를 더하고, 올림수가 발생하면 버림

오버플로우
V = _C_4 ⊕ _C_3

  • 덧셈 결과가 범위를 초과하여 결과값이 틀린 상태
  • 두 올림수들 간의 exclusive-OR 이용

뺄셈

덧셈을 이용하여 수행
A - B = A + (-B)

오버플로우

  • 덧셈과 동일한 상태 및 방법

곱셈

각 비트에 대하여 부분 적 계산 후, 모두 더함

나눗셈


3.6 부동소수점 수의 표현

N = 부호 x M(가수) x 기수^E(지수)

가수는 정밀도, 지수는 표현 가능한 수의 범위를 나타낸다.

한편 소수점 아래 첫번째 비트는 항상1이므로 반드시 저장할 필요없다.
따라서 가수가 n 비트라면, n+1자리 수 까지 표현 가능

소수점 2진수로 변환하는 방법

8-비트 바이어스된 지수

ex)
13.625 = 1101.101 = 0.1101101 x 2^4
부호(S) : 1
지수(E) : 00000100 + 10000000(바이어스 128) = 10000100
가수(M) : 10110100000000000000000 (소수점 우측 첫번째 1은 제외)

IEEE 754 표준 부동소수점 수의 형식

32비트 ~ 바이어스 127 사용
1.M x 2^E 형태를 가지지만, 소수점 왼쪽의 1은 필드에 저장되지 않으며 이를 hidden bit라고 부른다.

ex)
13.625 = 1101.101 = 1.101101 x 2^3
부호(S) : 1
지수(E) : 00000011 + 01111111(바이어스 127) = 10000010
가수(M) : 10110100000000000000000 (소수점 우측 첫번째 1은 제외)


3.7 부동소수점 산술 연산

덧셈과 뺼셈
지수 일치 -> 가수들간 연산 수행 -> 결과 정규화

곱셈
가수끼리 곱 -> 지수끼리 합 -> 결과 정규화

나눗셈
가수끼리 나눗셈 -> 피제수의 지수 - 제수의 지수 -> 결과 정규화
※ 5 ÷ 2 ~> 5가 피제수, 2가 제수

profile
인문대 컴퓨터공학부

0개의 댓글