엔지니어가 되고 싶은 공돌이

08. Arithmetic Operations 본문

Computer Science/Computer Architecture

08. Arithmetic Operations

Geca 2025. 4. 29. 16:42

 

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에는 RemainderLo에는 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
Comments