오래 못 할 짓 하지 않기
[ 컴퓨터 구조 ] 11. DIVISION 본문
DIVISION은 Shift Left와 Subtract로 이루어진다.
일반적으로 우리가 나눗셈을 할 때를 생각해보자.
Divisor = A
Dividend = B
B-A 의 값을 보고 몫이 될지 정하는데,
우선 B의 가장 큰 자릿수부터 훑으면서 간다.
- 1- 1000 은 X 그럼 첫번째 1위에는 0
- 10- 1000도 X 두번째 0위에도 0
...
- 1001 - 1000 은 가능! 그 위에 1
그 연산을 하면 아래에 값은 10이 남는다.
- 10 - 1000도 X 그 위에도 0 (현재 몫 00010)
- 101 - 1000도 X 그 위에도 0 (현재 몫 000100)
- 1010 -1000 가능 그 위에 1 ( 몫 (000)1001 )
나머지는 1010-1000인 10
계산 알고리즘은 이렇다.
내가 한 방식대로
B-A > 0 이면,
몫 비트에 1
나머지 = 나머지 - A
그렇지 않다면
몫 비트에 1
B비트 하나 더 늘리기.
Division Hardware
Register 의 HI에는 Remainder / LO 에는 몫을 넣어둔다.
구현한 모습은 Multiplication과 비슷하다.
(기본적인 형태)
(발전된,우리가 배울 형태)
여기서 7/2 를 해보자.
7/2 연산.
각 단계별로 보자. 우리가 위에서 배웠던 방식과는 조금 차이가 있다.
우리는 안 되면 비트 밀고 했는데
- 여기에서는 그냥 일단 빼본 다음에 음수가 나오면 다시 뺀 값만큼 더해주고, 미는 방식이다.
- HI 먼저 계산하고 몫에 관한 정보가 나오면 LO 가장 오른쪽 비트에 더해주는 걸로
- 뭐든 할 때 [ 밀고 > 빼고 ] 이걸 한 세트로 생각해야한다. + 더할 땐 항상 가장 높은 비트에서 다 함
1) 처음에 밀어서 00001110 으로 만든 뒤에 - 0010을 해준다.
-0010은 1의 보수 : 1101 > 2의 보수 : 1110 이므로,
00001110
+ 1110
= 11101110 이다.
가장 앞이 1. 즉, 음수가 나왔단 뜻이니까 여기는 몫이 맞지 않다는 뜻이다.
따라서 몫을 나타내는 LO 가장 아래에 0을 넣는다.
그리고 맞지 않았다는 뜻이니 다시 뺀 만큼 더해주자
11101110
+0010
=00001110
2) [ 밀고 > 빼고 ] 이걸 한 세트로 생각해야하므로
00001110 에서 00011100이 된다.
여기에서 -0010 = 1110을 더하면
00011100
+1110
=11111100
근데 이거도 가장 앞이 1이 됨. 따라서 뒤에 몫으로 0넣고
다시 뺀 만큼 더해주기
11111100
+0010
=00011100
3) 밀고 빼기
00011100 에서 밀자.
00111000
+1110
=00011001
4) 밀고 빼기
00011001 에서 밀자
00110010
+1110
0001 0011
→ HI 0001 = 나머지 / LO 0011 몫
위 계산이 Hardware에서는 어떻게 이루어지는지 보자
1) 시작 단계에서 DIvisor는 위에 있고, Dividend는 LO에 들어가있다.
2) SLL를 먼저 한 뒤 SUB를 한다.
sign bit가 1이므로 Control test에 들어간다.
3) Restore 하기 위해 뺐던 0010를 다시 더해주고 몫 비트에 0을 넣는다.
4) 또 밀고 뺀다.
sign bit가 1이므로 다시 뺸만큼 더해주자
5)밀 뺄
잘못된 곳 없음
몫 1 추가
6)ㅁ>ㅃ
문제없음
몫 1추가
(출처)
한동대학교 용환기 교수님 - 컴퓨터 구조
'2학년 2학기 > 컴퓨터 구조' 카테고리의 다른 글
[ 컴퓨터 구조 ] 문제풀기 2 (0) | 2023.10.12 |
---|---|
[ 컴퓨터 구조 ] 12. Floating Point number (0) | 2023.10.09 |
[ 컴퓨터 구조 ] 10. Multiplication (0) | 2023.10.08 |
[ 컴퓨터 구조 ] 문제 풀기 (0) | 2023.10.05 |
[ 컴퓨터 구조 ] 9. Overflow (Data path) (0) | 2023.10.03 |