일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- instruction
- function
- Linux
- control
- architecture
- python
- MacOS
- Pipelining
- Java
- DB
- javascript
- Algorithm
- web
- DS
- system
- react
- mysql
- MIPS
- computer
- XML
- for
- php
- html
- data structure
- DATAPATH
- while
- github
- Class
- DoM
- CSS
- Today
- Total
YYYEJI
[MIPS] Division in MIPS 본문
MIPS version 나눗셈 연산을 알아보기 전에 나눗셈 format을 살펴보겠습니다.
0001001 # quotient
----------------
1000 | 1001010 # Divisor and Dividend
- 1000
----------------
10 # Partial remainder
........
----------------
10 # Remainder
본격적으로 MIPS 나눗셈 수행 방식을 알아보겠습니다.
알고리즘은 아래와 같습니다.
partial에서 remainder가 divisor보다 크거나 작으면 quotient bit가 1이 됩니다.
반대로 작으면 quotient bit는 0이 됩니다.
MIPS에서 나눗셈 수행 결과는 HI register와 LO register에 담기는데
나머지(remainder)는 HI register
몫(quotient)은 LO register
에 담깁니다.
나눗셈도 곱셈과 마찬가지로 Quotient 부분이 Dividend/Remainder 하드웨어와 하나로 합쳐집니다.
7/2 연산을 해보겠습니다.
나눗셈은 곱셈과 다르게 shift left logic을 수행합니다.
0000 | 0111 | SLL |
0000 | 111? | SUB |
- 0010 | ||
1110 | 1110 | Put 0 |
+ 0010 | Restore | |
0000 | 1110 | SLL |
0001 | 110? | SUB |
- 0010 | ||
1111 | 1100 | Put 0 |
+ 0010 | Restore |
0001 | 1100 | SLL |
0011 | 100? | SUB |
- 0010 | ||
0001 | 1001 | Put 1 |
0011 | 001? | SLL |
- 0010 | SUB | |
0001 | 0011 | Put 1 |
0001 | 0011 | Result |
✓ SLL - SUB - Put 0 or 1(in last bit) - Restore or not
이 하나의 수행 cycle 이라고 생각하시면 됩니다.
✓ SLL은 shift left logic으로 하나씩 왼쪽으로 비트를 shift 시키면 마지막 bit는 공백으로 남습니다.
✓ 공백인 상태로 SUB divison을 시킵니다.
✓ SUB의 수행 결과에서 1번째 bit가 1이면 마지막 bit에 0를 넣고
Restore 즉, 빼준 값을 다해 더해줍니다.
0000 111□
- 0010
--------------
1110 111□ # Put 0
↓
1110 1110
+ 0010 # Restore
--------------
0000 1110
✓ SUB의 수행 결과에서 1번째 bit가 0이면 마지막 bit에 1를 넣고
Restore은 수행하지 않은 상태에서 다시 SLL로 넘어갑니다.
0011 100□
- 0010
--------------
0001 100□ # Put 1
↓
1110 1001
Q) 나눗셈의 부호는 어떻게 결정되나요?
A) Quotient의 경우에는 divisor과 dividend 부호의 곱셈 결과이고,
Remainder의 경우는 dividend 부호를 따라갑니다.
Example
dividend/divisor = Quotient, Remainder
7/2 = 3, 1
-7/2 = -3, -1
7/-2 = -3, 1
-7/-2 = 3 -1
✓ Quotient의 부호 → Dividend의 부호 X Divisor의 부호
✓ Remainder의 부호 → Dividend의 부호
◡̈
'Computer architectures' 카테고리의 다른 글
[MIPS] Combinational circuit과 Sequential circuit의 차이점 (0) | 2022.10.29 |
---|---|
[MIPS] Floating point number in MIPS (0) | 2022.10.20 |
[MIPS] Multiplication in MIPS (0) | 2022.10.20 |
[MIPS] 1부터 N 사이의 3의 배수의 합을 구하는 assembly code (0) | 2022.10.20 |
[MIPS] While문 assembly (0) | 2022.10.19 |