본문 바로가기
공부/컴퓨터 구조

Arithmetic & Logic Unit

by 맑은청이 2020. 5. 25.
728x90
반응형

정수(integers)와 부동소수점(floating point) 를 다루는 ALU 에 연산과정에 대해 알아보겠습니다. 

교수님이 교재 PPT 저작권 문제에 대해 알려주셔서 이제 직접 그래야할거 같네요! (똥손의 눈물) 

어쨌든 한 번 가보겠습니다. 

 

-정수 표현법 

1. 바이너리 표현법 : 이진수입니다. 41 = 00101001

2. Sign-Magnitude : 부호와 절댓값입니다.

3. Two's complement : 2의보수 입니다.  

 

 

-SignMagnitude(부호와 절댓값)

 

왼쪽 비트가 '부호비트'입니다. 

0은 양수를 의미하고 

1은 음수를 의미합니다. 

 

+18 = 00010010

 -18 = 10010010

 

 

문제 

- +,- 연산인지 -,-연산인지 구분을 해주어야합니다.

- 0의 표현이 00000000과 10000000 으로 두가지가 나옵니다. (+0 과 -0)

 

이는 비효율적입니다. 

 

 

-Two's complement(2의 보수법) 

N의 보수란 '두수의 합이 N이 되게 하는 수'를 의미합니다. 10진수에서 4의 10의 보수는 6이고 1의 10의 보수는 9입니다. 이는 컴퓨터에서 음의 정수 계산을 위해 고안되었습니다. 

 

-> 1의 보수는 각 자릿값이 모두 1인 수에서 주어진 2진수를 빼면 얻을 수 있습니다. 

-> 2의 보수는 1의 보수에서 1을 더해주면 됩니다.

 

ex)

+3 = 00000011

+2 = 00000010

+1 = 00000001

+0 = 00000000

-1 = 111111111 (+1의 값에서 0과 1을 반전시키고 +1을 해준 값)

-2 = 111111110

-3 = 111111101

 

 

2의 보수의 장점

- 0의 표현법이 하나입니다.

- 연산을 수행하기 쉽습니다.(밑에 나옴)

- 부정을 보이기 쉽습니다.

 

 

ex) 부정의 특별한 케이스1

0           = 00000000

Bitwise not 11111111 (1의 보수 취하기)

Add 1 to LSB       +1

Result      100000000

오버플로우 발생 1 무시됨 

즉 0의 부정은 0

 

ex) 부정의 특별한 케이스2

-128      = 10000000

Bitwise not 01111111

Add 1 to LSB +1

Result        10000000

 

 

128이 아니라 -128이 나옵니다. 잘못된 걸까요? 아닙니다. 애초부터 표현할 수 있는 최대 양수가 127이었기 때문에 맞는 계산입니다. 

 

2의 보수로 나타낼 수 있는 수의 범위는 n비트 -2^n ~ 2^n - 1 까지입니다. 음수를 한 개 더 표현할 수 있습니다. 

그리고 비트 확장을 시킬때는 왼쪽 수(MSB)를 확장 비트 수만큼 늘려주면 됩니다. 

 

 

 

 

 

 

그럼 Addition and Subtraction에 대해 알아보겠습니다. 사실 뺄셈은 덧셈과 동일 합니다. A - B = A + (-B) 이기 때문입니다. 

 

덧셈 뺄셈 하드웨어

뺄셈기는 존재하지 않고 Complementer 로 B -> -B 로 만들어줌을 알 수 있습니다. 

 

 

다음은 덧셈보다 조금 더 복잡한 Multiplication에 대해 알아보겠습니다. 사실 이 부분이 오늘의 핵심입니다.

곱셈은 partial products를 더함으로서 진행됩니다. parial products 는 부분 곱셈 값을 의미하는 데 

   

    1011  -> Multiplicand(곱하기를 당하는 수 = 피승수)

   x1101  -> Multiplier( 곱하는 수 = 승수)

-----------

    1011   Partial products 들

   0000

-----------

 1011

1011

-----------

10001111

 

 

n x n 비트 계산 결과값은 2n비트가 필요합니다.

 

 

다음은 곱셈에 대한 block diagram 입니다.

 

 

M : Multiplicand

A : Partial Product

Q : Multiplier 

C : Carry

입니다. 

 

보면 Shift and Add Control Logic이 Multiplier 의 하위비트를 확인하고 Add의 여부를 결정하게 됩니다. 

 

실행 예시입니다. 

1.하위비트를 본다.

2-1. 1이면 A = A + M 후 Shift

2-2. 0이면 Add 없이 Shift

3.Carry의 수를 A에 넣어준다. 

 

Multiplicand 의 값은 유지가 됩니다. 하지만 Multiplier는 연산후 사라져버립니다. 이를 보면 매우 효율적인 연산 방식임을 알 수 있습니다. 

 

 

 

 

음수의 곱셈은 이러한 방식으로 진행하면 안되고 Case 를 분류해주거나 'Booth's algorithm'을 이용해야합니다.

 

 

Booth's Algorithm 

Q 와 Q-1 에 따라 다음 연산이 달라집니다.

 

여기서 Q-1 의 초기값은 0 이고 Q0 에 따라 다음 값이 결정됩니다.  

Q0 Q-1 Q-1 - Q0 operations
0 0 0 No operations
1 0 -1 Subtract M from partial product
1 1 0 No operations
0 1 1 Add M from partial product

 

 

7 x 3 예시 입니다.

A Q Q-1 M  
0000 0011 0 0111 Initial Values
1001 0011 0 0111 A <- A - M
1100 1001 1 0111 Shift
1110 0100 1 0111 Shift
0101 0100 1 0111 A <- A - M
0010 1010 0 0111 Shift
0001 0101 0 0111 Shift

 

 

나눗셈도 하고 싶지만 교수님이 학부생 수준을 벗어난다고 하지 않으셨습니다...

그럼 오늘은 여기까지! 수고많으셨습니다.

728x90
반응형

'공부 > 컴퓨터 구조' 카테고리의 다른 글

컴퓨터구조5 Internal Memory  (0) 2020.06.12
컴퓨터구조4 Cache Memory  (0) 2020.06.05
컴퓨터구조3 CPU  (0) 2020.05.29
컴퓨터구조2 Process  (0) 2020.05.27
컴퓨터 구조1 개요  (0) 2020.05.26