이론/컴퓨터구조
정수, 부동소수점 연산
ohojee
2024. 1. 6. 00:43
정수 덧셈
덧셈 ∙ 뺄셈 장치

- 𝑋 − 𝑌 = 𝑋 + (−𝑌) = 𝑋 + (𝑌′ + 1)
- 두개 더한 값 계산 ⇒ adder
- but 한 자리수에 계산되는 값은 캐리까지 해서 3bit ⇒ 만들어지는 값은 그 자릿값과 캐라값 해서 2bit <= 이걸 full adder가 해줌
- xor비트 추가해서 뺄셈까지 계산 가능
- 덧셈에는 s가 0이라 y 값이 그대로 전달
- s가 1이면 y를 반전시키는 셈 ⇒ y’이 adder에 들어감, 그럼 1을 어디서 더하냐? 캐리에 1 전달됨
- (𝑌′ + 1) <= 2의보수 방식으로 변환
오버플로우

- 두 수가 다른 부호일 경우, 오버플로우 발생 x
- 두 수가 동일한 부호일 경우, 오버플로우 발생 가능
- 마지막에 발생하는 두개의 캐리가 다른 값 ⇒ 오버플로우 발생
- 같은 부호를 더했는데 다른 부호가 나온다 ⇒ 오버플로우 발생
- 이걸 xor로 연결하면 됨
덧셈연산

- 부호 값에 따라 그 값으로 확장
- imm은 6비트
정수 곱셈
- hw로 지원, but 안된다면 sw로 해결
종이-연필 방식

시프트-덧셈 방식
부분 곱 발생 시 덧셈 연산

- 누적 부분곱의 초기 값은 0
- 단계만 나눠놓고 종이 연필 방식이랑 똑같음
누적곱 시프트

- hw 구현에 적합
- 항상 4bit만 더하면 됨 ⇒ 연산장치 짧아질 수 o
하드웨어 곱셈장치

단점
- 항상 승수의 비트수의 2배에 해당하는 덧셈 장치 필요
- 유부호 정수의 경우 절대값으로 계산 후 부호 변환 필요
Booth 알고리즘

- 1은 시프트 연산 6번, 덧셈 연산 6번이 필요
- 2는 시프트 연산 2번, 덧셈/뺄셈 연산 2번 ⇒ 효율적
- 피승수 𝐴(= 𝑎𝑛−1 ⋯ 𝑎2𝑎1𝑎0) × 승수 𝐵(= 𝑏𝑛−1 ⋯ 𝑏2𝑏1𝑏0)에서
- 승수의LSB인𝑏0 오른쪽에값이0인비트𝑏−1을추가
- 오른쪽 추가 비트 𝑏−1부터 1비트씩 왼쪽으로 이동 ⇒ 2개의 비트를 묶어 점검
- 승수의 비트 구성이 연속된 1이나 0이 많을 때 덧셈/뺄셈 연산 회수가 줄어들어 효과적
예
부동소수점 연산
덧셈
- 가수의 길이를 3bit라 가정
곱셈
- 가수의 길이를 3bit라 가정
가드 디지트(가드 비트)
- 가수의 유효자리 오른쪽에 추가로 제공하는 자리
- 정규화 과정에서 가수가 오른쪽으로 시프트 될 때 발생하는 손실 방지
Uploaded by N2T