일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- control
- while
- react
- computer
- for
- DATAPATH
- XML
- data structure
- python
- CSS
- Pipelining
- DB
- php
- html
- DoM
- MacOS
- MIPS
- DS
- system
- Linux
- github
- javascript
- function
- instruction
- Algorithm
- web
- architecture
- mysql
- Java
- Class
- Today
- Total
YYYEJI
[MIPS] Multiplication in MIPS 본문
MIPS version 곱셈 연산을 알아보기 전에 곱셈 format을 살펴보겠습니다.
0010 # multiplicand
X 1001 # multiplier
----------------------------------
0010010 # product
본격적으로 MIPS 곱셈 수행 방식을 알아보겠습니다.
MIPS는 곱셈을 하는데 있어서 하드웨어를 줄이는 방법으로 발전해 왔습니다.
(In MIPS, Multiplier은 계속 오른쪽으로 shift 시키기 때문에 생략하겠습니다.)
Version 1
Multiplicand를 왼쪽으로 움직이고,
product는 움직이지 않습니다.
(Using shift left logic)
Version2
Multiplicand와 product를 상대적으로 생각해서
Multiplicand는 움직이지 않고
Product를 오른쪽으로 움직입니다.
(Using shift right logic)
Version3
Multiplier가 Product와 같은 방향으로 움직이기 때문에
Multiplier와 Product를 하나의 hardware로 바꿉니다.
(MIPS의 목표를 이루고 있죠)
지금 사용되는 방법은 version3입니다.
두 가지 방법이 있습니다.
첫 번째 방법은 아래와 같습니다.
Multiplicand 전체와 muliplier의 bit 하나씩 bit-and 연산을 수행해줍니다.
0 | 0 | 1 | 0 | Multiplicand | |||
1 | 0 | 0 | 1 | multiplier | |||
0 | 0 | 1 | 0 | 0010 & 1 | |||
0 | 0 | 0 | 0 | sll | 0010 & 0 | ||
0 | 0 | 0 | 0 | sll | 0010 & 0 | ||
0 | 0 | 1 | 0 | sll | 0010 & 1 | ||
0 | 0 | 1 | 0 | 0 | 1 | 0 | product |
✓ 여기서 한 번 수행할 때마다 Shift left logic(sll)을 수행해줘야 됩니다.
✓ bit-and 연산이 끝나면 bit를 세로로 하나씩 더해줍니다.
두 번째 방법은 아래와 같습니다.
Multiplicand | 0 | 0 | 1 | 0 | |||||
product | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | Add |
0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | Shift | |
0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | Shift | |
0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | Shift | |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | Add | |
0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | Shift | |
0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
✓ Product의 마지막 bit를 확인해서 1이면 add and shift,
✓ Product의 마지막 bit를 확인해서 0이면 shift만 수행합니다.
(srl - shift right logical)
아래와 같이 연산을 수행하면 됩니다.
Q) 음수 2진수 곱셈은 어떻게 하나요?
A) 우선 곱셈을 할 때 부호를 고려하지 않고 곱셈을 수행하고 마지막에
부호에 따라 - 를 붙여주면 됩니다.
(-7) X (3)의 경우 7X3을 해주고 결과에 -를 붙여줍니다.
◡̈
'Computer architectures' 카테고리의 다른 글
[MIPS] Floating point number in MIPS (0) | 2022.10.20 |
---|---|
[MIPS] Division in MIPS (0) | 2022.10.20 |
[MIPS] 1부터 N 사이의 3의 배수의 합을 구하는 assembly code (0) | 2022.10.20 |
[MIPS] While문 assembly (0) | 2022.10.19 |
[MIPS] Switch문 assembly code (0) | 2022.10.19 |