본문 바로가기
Computer Science/Computer Architecture

[Computer Architecture] Integer Arithmetic (정수 연산)

by __K.Jun__ 2024. 7. 11.

Integer Addtion

  컴퓨터의 덧셈은 이진수의 덧셈방식을 그대로 사용한다. 손으로 계산할 때 처럼 오른쪽에서 왼쪽으로 한 비트씩 더하고, 이때 생기는 carry는 바로 왼쪽 자리로 보낸다. 손으로 덧셈할 때와 같이 바로 왼쪽 자리에 carry를 보내준다.

 

Integer Subtraction

  뺄셈은 덧셈을 이용한다 뺄 값의 부호를 바꾸어 더하기만 하면 된다. 왼쪽 처럼 바로 이진수의 뺄셈방식으로 뺄셈을 하거나, 오른쪽 처럼 2의 보수법을 이용하여 -6을 더하는 방식으로 할 수도 있다.

 

Overflow

  연산 결과를 사용 가능한 하드웨어로 표현할 수 없을 때(가용한 비트 범위를 넘어설 때) 오버플로가 발생한다.

  덧셈은 부호가 서로 다른 수를 서로 더할 때는 오버플로가 발생하지 않는다. 왜냐하면 일단 피연산자들이 서로 가용한 비트 범위 내에서 표현 가능한 수일때는 서로 더했을 때 가용 비트 범위를 넘어서지 않기 때문이다.

  뺄셈의 경우에는 피연산자들의 부호가 같은 경우 오버플로가 발생하지 않는다. c - a = c + (-a)를 생각해보면 부호가 서로 다른 피연산자를 더하는 것으로 생각할 수 있기 때문이다.

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

 

Integer Multiplication

  Multipler는 Multiplicand, ALU, 그리고 이것들의 두배 사이즈인 Product를 필요로한다.

작동 과정은 다음과 같다.

1. Product의 LSB(최우측 비트)를 보고, control에게 이를 보낸다.

2. Control에 전달된 LSB가 1이라면 3~5번 과정을 실행하고 아니라면 5번 과정을 실행한다.

3. multiplicand와 product의 왼쪽 절반 비트를 ALU를 사용해서 더한다.

4. 3에서 더한 결과를 product 왼쪽 절반 비트에 덮어 쓴다.

5. product를 오른쪽으로 한번 shift한다.

6. 1~5번 과정을 multiplier의 비트 수 만큼 반복한다.

 

최종 결과인 Product는 Multiplicand에 Multiplier를 곱한 결과이다.

Integer Division

  Divider도 마찬가지로 Divisor, ALU, 그리고 이것들의 두배 사이즈인 Reminder를 필요로한다.

작동 과정은 Multiplier의 역순과 같다.

1. Remainder를 왼쪽으로 한번 shift한다.

2. Remainder의 왼쪽 절반과 Divisor를 ALU를 사용해서 뺀다.

3. 2에서 뺀 결과가 0보다 크거나 같다면 Remainder 왼쪽 절반 비트에 덮어 쓰고 LSB를 1로 설정한다. 결과가 0보다 작다면 왼쪽 절반 비트에 덮어 쓰지 않고 LSB을 0으로 설정한다.

4. 1~3번 과정을 Divisor의 비트 수 만큼 반복한다.

 

최종 결과인 Reminder의 왼쪽 절반 비트는 원본 Remainder를 Divisor로 나눈 나머지, 오른쪽은 몫이다.

728x90