엔지니어가 되고 싶은 공돌이
08. Arithmetic Operations 본문
8. 1. Addition and Subtraction
- 컴퓨터에서의 덧셈과 뺄셈은 2진수로 진행되며, 복잡한 절차 없이 간단히 더하고 빼기만 하면 됩니다.
- 덧셈에서는 같은 부호 끼리 더할 때 Overflow가 발생 할 수 있으며,
뺄셈에서는 다른 부호 끼리 뺄 때 Overflow가 발생할 수 있습니다.
Operation | Operand A | Operand B | Result Indicating Overflow |
A + B | ≥ 0 | ≥ 0 | < 0 |
A + B | < 0 | < 0 | ≥ 0 |
A - B | ≥ 0 | < 0 | < 0 |
A - B | < 0 | ≥ 0 | ≥ 0 |
- add, addi, sub와 같은 signed operator는 Overflow가 발생하면 Exception을 발생시킵니다.
addu, addiu, subu와 같은 unsigned operator는 Overflow가 발생하면 Exception을 발생시키지 않습니다.
- C Language는 Overflow를 무시하기 때문에,
MIPS C Compiler는 변수의 형에 상관없이 항상 addu, subu… 와 같은 명령어를 생성합니다.
- MIPS에는 EPC(Exception Program Counter)가 있어서 Exception이나 Interrupt가 발생하면 그 걸린 명령어의 주소를 기억하고, 컴퓨터는 적절한 처리를 하기 위해서 특정 루틴으로 점프하게 됩니다.
8. 2. Multiplication
- 곱셈에서 첫 번째 피연산자를 Multiplicand(피승수),
두 번째 피연산자를 승수(Multiplier)라고 부르며,
최종 결과를 Product라고 부릅니다.
- Multiplication Algorithm.
1) Initial Values를 세팅합니다. Product는 0으로 초기화, Multiplicand와 Multiplier에 값 넣기.
2 - 1) Multiplier의 LSB가 1이면 Product = Product + Multiplicand.
2 - 2) Multiplier의 LSB가 0이면 No Operation.
3) Shift the Multiplicand register left 1 bit.
4) Shift the Multiplier register right 1 bit.
5) 2) ~ 4) 과정을 32번 반복하고 종료합니다. (64bit Computer는 64번 반복)
- Negative Number가 포함된 곱셈을 계산할 때는 원래의 부호를 기억한 뒤,
음수를 양수로 변환한 후 알고리즘을 적용시키면 됩니다.
이후 Multiplicand와 Multiplier의 부호가 서로 다르면 결과에 -를 붙입니다.
- 32bit X 32bit = 64bit이므로 Product는 64bit Register를 필요로 합니다.
또한 shift left를 하기 위해서 Multiplicand도 64bit Register가 필요합니다.
MIPS는 64bit 값을 저장할 수 있도록, Hi, Lo라는 32bit Register 2개를 제공합니다.
- 곱셈을 더 빠르게 하기 위해서 덧셈기 여러 개를 사용하여 병렬 트리 구조를 만들 수 도 있습니다.
- mult, multu 모두 Overflow를 무시합니다.
8. 3. Division
- 나눗셈에서 나눔을 당하는 수를 Dividend(피제수),
나누는 수를 Divisor(제수),
결과 2개를 각각 Quotient(몫), Remainder(나머지) 라고 부릅니다.
- Dividend = Quotient X Divisor + Remainder.
- Division Algorithm.
1) Quotient Register 32bit를 0으로 초기화하고, Divisor를 64bit Register 왼쪽 절반에 넣고 시작합니다.
Remainder는 64bit Register에 Dividend를 넣습니다.
2) Remainder = Remainder – Divisor
3 - 1) Remainder < 0 이면 Remainder + Divisor, shift left Quotient, Quotient LSB = 0.
3 - 2) Remainder ≥ 0 이면 shift left Quotient, Quotient LSB = 1.
4) Shift Right Divisor.
5) 2) ~ 4) 과정을 33번 반복합니다. (64bit Computer는 65번 반복)
- Negative Number가 포함된 나눗셈을 계산할 때는 원래의 부호를 기억한 뒤, 음수를 양수로 변환한 후 알고리즘을 적용시킨 뒤 Dividend, Divisor의 부호가 다르면 Quotient의 부호를 음수로 하고, Remainder가 0이 아니면 Dividend의 부호를 붙입니다.
- MIPS는 같은 하드웨어로 곱셈과 나눗셈을 동시에 지원하고,
나눗셈 명령이 완료된 뒤 Hi에는 Remainder를 Lo에는 Quotient를 저장합니다.
- 나눗셈을 더 빠르게 하기 위해서 하드웨어를 추가해서 여러 개의 몫 비트를 동시에 예측하고,
예측이 틀렸으면 나중에 바로잡는 방법으로 나눗셈을 수행합니다.
'Computer Science > Computer Architecture' 카테고리의 다른 글
10. Datapath (0) | 2025.04.29 |
---|---|
09. Floating Point Number (0) | 2025.04.29 |
07. Compiler (0) | 2025.04.25 |
06. Procedure and Jumping (0) | 2025.04.24 |
05. Logical Operation and Branch (0) | 2025.04.24 |