오래 못 할 짓 하지 않기

[ 컴퓨터 구조 ] 10. Multiplication 본문

2학년 2학기/컴퓨터 구조

[ 컴퓨터 구조 ] 10. Multiplication

쫑알bot 2023. 10. 8. 13:15
728x90

두 수의 곱은 addshift 연산으로 구현할 수 있다.

= Mul : add + shift 

 

 

물론 이렇게 진리표를 그려서 할 수도 있음.

하지만 이건 3비트 숫자 2개를 할 때는 쓸만하겠지만, 비트수가 많아지면 답이 없음.

 


우선 일반적인 곱셈을 생각해보자.

 

가장 첫번째로 오는 것은 

1) 312 * 3 을 먼저 곱하고, 그 아래에 더해준다. ( add )

2) 그리고 그 다음에 312*0 결과를 더할 곳은 한 칸 뒤로 밀어준다 ( Shift )

3) 312*0 결과를 한 칸 밀린 곳에 더한다. ( add )

4) 한 칸 민다 ( Shift )

5)  312*2 를 계산하고 그 밀린 칸에 더한다 ( add )

 

 

binary multiplication도 같은 매커니즘으로 가면 된다.

 

 

1) 먼저 0100 * 1 = 0010 을 아래에 더한다.  add

2) 다음 결과를 위해 한 칸 민다.  shift

3)  0010 * 0 = 0000 을 아래에 한 칸 밀린 곳에 더한다. add

4) 다음 결과를 위해 한 칸 민다.  shift  

5)  0010 * 0 = 0000 을 아래에 한 칸 밀린 곳에 더한다. add

6) 다음 결과를 위해 한 칸 민다.  shift

7) 먼저 0100 * 1 = 0010 을 아래에 더한다.  add

 

팁이라고 하면 0이면 굳이 더할 거 없으니까 비트만 한 칸씩 밀어준다.

1이면 더하고 밀기

 

각 자릿수마다 밀어주면서 세부적으로 계산

 


Implementation  V1

 

Multiplicand 가 위에 있는 거고,

Multiplier 가 아래에 있는 것이다. 

 

[ Add ]

우선 00000010 *  1 을 계산한 값을 Product에 넣는다. 

 


[ Shift ]

그런 다음에는 Multiplicand는 한 자릿수 위의 계산을 위해 left shift를 하고

Multiplier는 그 다음 Multiplier를 주기 위해 (1001에서 1했으니 그 다음 0을 주려고) right shift를 한다.

 

(아래가 그 결과)

 

[ Shift ]

Multiplier가 0이니까 더할 필요 X이고, Multiplican는 left, Multiplier는 right로 이동한다.

 

[ Shift ]

Multiplier가 0이니까 더할 필요 X이고, Multiplican는 left, Multiplier는 right로 이동한다.

 

 

 

Multiplier에서 1이 나왔으므로 비트가 변한 곳에서의 0010을 더해준다.

 

 

 

그리고 마지막으로 bit를 shift해준다.

 

 

항상 add를 하고 shift한다고 생각하면됨, 세트임

대신 Multiplier가 0이 나왔을 땐 0을 add하고 shift한다 생각하셈. add 안 한다 X / 0을 add한다.

 

 

 

 


 

Implementation  V2

 

Multiplicand 에서 Shift left하는 걸 Product에서 Shift right 해준다고 생각하면 된다.

 

 

Multiplcand 의 값은 그대로 있고 더하는 위치를 Product가 이동하면서 받음. 

Shift right이므로, Product의 Hi 부분에 받는다. 

 

처음 Multiplier를 만나서, 0100을 hi에 더하고, right shift ( product, Multiplier ) 를 한 결과.

 

 

이후 이런 식으로 하면 됨

 


 

Implementation  V3

 

Multiplier랑 Product가 계속 Shift right 하는 거, 그냥 Product register에 넣어버리자.

계산할 땐 Hi만 쓰니까 Multiplier는 LO에 넣음.

 

연산의 형태

 


 

Exercise )

 

여기에서 알려주고 싶은 건

마지막에 자릿수가 넘어가는 Carry out이 발생할 경우에는 넘어가지 말고 가장 높은 자릿수에 넣기

 

 


Multiplication of negative numbers

 

 

1. 음수를 양수로 바꾼다.

2. 숫자로만 계산한다.

3. 두 개의 숫자가 부호가 달랐다면 결과에 음수를 붙인다. 

 

 

 

 

(출처)

 

한동대학교 용환기교수님 - 컴퓨터 구조