덧셈
먼저 덧셈입니다. 덧셈은 일반적인 10진수 간의 덧셈 처럼 수행합니다. 단, 이때 올림수는 버리게 됩니다.
이 덧셈과 뺄셈을 처리하는 H/W는 병렬 가산기가 처리합니다. 병렬 가산기는 비트 수만큼의 전가산기로 구성되고, 여러 비트들로 이루어진 두 개의 데이터에 대한 덧셈을 수행하는 회로입니다.
이때 병렬 가산기에 상태 비트 제어회로를 포함시켜, 덧셈 과정에서 상태를 저장합니다.
상태 비트는 4가지를 저장하는데, 덧셈을 수행했을 때, 마지막 발생 올림수, 그 한단계전 올림수의 XOR 연산으로 V Flag(Overflow 판단) 를 저장하고, 마지막 연산에서의 발생 올림수로 C Flag, 각 덧셈의 결과의 NOR 연산으로 Z Flag, 마지막 연산의 부호로 S Flag를 세트합니다.
뺄셈
뺄셈은 덧셈과 마찬가지로 같은 병렬 가산기를 통해 수행합니다. 단, 보수기를 추가하여 해당 연산이 덧셈인지 뺄셈인지 확인하고, 뺄셈일 때, A와 B 중 A를 병렬 가산기로, B는 보수기를 통해 2의 보수로 변환 된 후 병렬 가산기로 입력됩니다.
곱셈
곱셈은 일반적으로 10진수 곱셈과 같이 승수와 피승수를 곱하고, 나온 부분 적들의 합을 최종결과로 사용합니다.
- 승수와 피승수를 저장할 레지스터 M, Q에 각각 세트
- 결과값이 저장될 A 레지스터와 C 비트 0으로 초기화
- 승수의 최하위 비트를 검사
- 승수의 최하위 비트로 피승수와 곱(2진수 이므로, 피승수 그대로 내려오거나, 0으로 세트)
- Q, A는 우측 시프트. (승수의 최하위 비트는 검사가 끝났으므로)
- 위를 계산이 끝날때 까지 반복
2의 보수간 곱셈의 복잡함을 해결하기 위해 사용하는 특별한 알고리즘 중 하나인 Booth 알고리즘은 다음처럼 사용합니다.
- M 레지스터와 병렬 가산기 사이에 보수기 추가
- Q 레지스터 옆 Q-1 이라는 1bit 레지스터 추가
이때 Qi와 Qi-1의 값을 통해 Yi를 도출해내서 연산을 다르게합니다.
Qi | Qi-1 | Yi |
0 | 0 | 0 |
1 | 1 | 0 |
1 | 0 | 1' |
0 | 1 | 1 |
Yi가 0과 1일때는 기존의 곱셈처럼 진행하고, 1'가 나온경우 피승수를 2의 보수로 취하여 진행합니다.
나눗셈
나눗셈은 일반적인 10진수 나눗셈 처럼 수행합니다. 순서도는 다음과 같은 형태로 이어집니다.
- 결과값을 저장할 A 레지스터는 0으로 초기화, 각 레지스터의 길이가 n비트라면, 피제수는 2*n 비트 길이의 2의 보수 표현 피제수, 제수는 각각 Q,M 레지스터에 세트
- A와 Q를 좌측 시프트 1회
- M과 A의 부호를 검사하여, 같다면 A-M을 수행하여 A에 저장, 다르다면, A+M을 수행하여 A에 저장합니다.
- 연산 전과 후 A의 부호가 같다면, 연산이 성공한 케이스입니다. 이때, 연산이 성공이거나 A = 0이라면, Q0를 1로 세트합니다. 반대로 연산이 실패이고 A != 0이라면, Q0를 0으로 세트하고 A를 이전의 값으로 복구합니다.
- 계수 n을 1 뺍니다.
- n이 0이 아니라면 위 연산을 반복합니다.
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
제어 유닛 (0) | 2024.01.09 |
---|---|
컴퓨터의 실수표현 (1) | 2024.01.08 |
컴퓨터의 논리연산 (1) | 2024.01.08 |
컴퓨터의 수 표현 (0) | 2024.01.08 |
명령어 세트(Instruction Set) (1) | 2024.01.04 |