티스토리 뷰

카테고리 없음

정수의 산술 연산

chelss25 2022. 8. 16. 21:21

기본적인 산술 연산들

A  A'+ 1 ; 보수화(2의 보수 변환)

A  A + B ; 덧셈

A  A - B ; 뺄셈

A  A x B ; 곱셈

A  A / B ; 나눗셈

A  A + 1 ; 증가(increment)

A  A - 1 ; 감소(decrement)

2의 보수로 표현된 수들의 덧셈 방법

두 수를 더하고, 만약 올림수가 발생하면 버림

병렬 가산기(parallel adder)

덧셈을 수행하는 하드웨어 모듈

비트 수만큼의 전가산기(full-adder)들로 구성

덧셈 연산 결과에 따라 해당 조건 플래그들(condition flags)을 세트

C 플래그 : 올림수(carry)

S 플래그 : 부호(sign)

Z 플래그 : 0(zero)

V 플래그 : 오버플로우(overflow)

4-비트 병렬 가산기와 상태 비트 제어회로

덧셈 오버플로우

덧셈 결과가 그 범위를 초과하여 결과값이 틀리게 되는 상태

검출 방법

두 올림수(carry)들 간의 exclusive-OR를 이용

V = C4  C5

덧셈에서 오버플로우가 발생하는 예

뺄셈

덧셈을 이용하여 수행

A - (+B) = A + (-B)

A - (-B) = A + (+B)

단, A : 피감수(minuend), B : 감수(subtrahend)

덧셈과 뺄셈 겸용 하드웨어의 블록 구성도

뺄셈 오버플로우

뺄셈 결과가 그 범위를 초과하여 결과값이 틀리게 되는 상태.

검출 방법 : 덧셈과 동일 (V = C4  C5 )

부호 없는 정수의 곱셈

각 비트에 대하여 부분 적(partial product) 계산

부분적들을 모두 더하여 최종 결과를 얻음

부호 없는 정수 승산기의 하드웨어 구성도

M 레지스터 : 피승수(multiplicand) 저장

Q 레지스터 : 승수(multiplier) 저장

두 배 길이의 결과값은 A 레지스터와 Q 레지스터에 저장

곱셈이 수행되는 과정에서의 레지스터 내용들

2의 보수들 간의 곱셈

Booth 알고리즘(Booth's algorithm) 사용

하드웨어 구성

부호 없는 정수 승산기의 하드웨어에 다음 부분을 추가

M 레지스터와 병렬 가산기 사이에 보수기(complementer) 추가

Q 레지스터의 우측에 Q-1 이라고 부르는 1-비트 레지스터를 추가하고, 출력을 Q0와 함께 제어 회로로 입력

Booth 알고리즘의 흐름도

Booth 알고리즘을 이용한 곱셈의 예 (-7x3)

나눗셈

나눗셈의 수식 표현

D ÷ V = Q --- R

단, D = 피젯수(dividend), V = 젯수(divisor), Q = 몫(quotient)

V = 젯수(divisor), R = 나머지 수(remainder)

부호 없는 2진 나눗셈

부호 없는 2진 나눗셈 알고리즘의 흐름도

2의 보수 나눗셈 과정

[초기 상태] 젯수는 M 레지스터에, 피젯수는 A와 Q 레지스터에 저장 각 레지스터가 n 비트일 때, 피젯수는 2n 비트 길이의 2의 보수로 표시

[사이클 1] A와 Q 레지스터를 좌측으로 한 비트씩 쉬프트

[사이클 2] 만약 M과 A의 부호가 같으면 A  A - M, 다르면 A  A + M을 수행한다.

[사이클 3] 연산 전과 후의 A의 부호가 같으면 위의 연산은 성공

연산이 성공이거나 A = 0 이면, Q0  1로 세트

연산이 실패이고 A ≠ 0 이면, Q0  0으로 하고 A를 이전의 값으로 복구

[사이클 4] Q에 비트 자리 수가 남아있다면, 단계 2에서 4까지를 반복

[사이클 5] 나머지 수는 A. 만약 젯수와 피젯수의 부호가 같으면 몫은 Q의 값이고, 그렇지 않으면 Q의 2의 보수가 몫

2의 보수 나눗셈의 예 (7 ÷ (-3))

댓글