1 서론

 

캐리(Carry)와 오버플로우(Overflow)는 종종 혼돈되기도 하는데 그 차이점을 알아보자. 간략화를 위해 8비트의 이진수만을 고려한다. 나타낼 수 있는 수의 범위는 -128부터 +127 까지가 된다.

 

캐리는 최상위 비트(MSB)에서 그 위의 비트로 자리올림이 발생하는 것을 의미한다. 캐리 자체로는 오류 발생과 관련 없다.

 

반면 오버플로우는 연산 결과 값이 주어진 비트 수로 표현될 수 있는 범위를 넘긴 것을 의미한다. 수의 범위를 넘었기 때문에 오버플로우는 오류 발생을 의미한다.

 

다음 예제들을 살펴보자.

 

가) 1 + (-1) = 0

 

이진수로 계산하면 00000001 + 11111111 = 1 00000000 이 된다. MSB 에서 그 위의 비트로 자리 올림, 즉 캐리가 발생했다. 그러나 이 캐리는 무시된다. 하위 8비트는 올바른 답인 0 을 나타내고 있다.

 

나) 1 + 127 = 128

 

이진수로 계산하면 00000001 + 01111111 = 10000000 이 된다. 캐리는 발생하지 않았다. 그러나 결과 값인 이진수 10000000 은 십진수 -128 이며 올바른 답인 +128 이 아니다. +128 은 8비트 이진수로 나타낼 수 없는 값이다. 이 경우는 오버플로우가 발생했다.

 

위의 예제에서 보듯이 캐리는 단지 MSB 에서 그 위 비트로 자리 올림이 발생했음을 의미하는 것이며, 오버플로우는 연산 결과 값이 나타낼 수 있는 숫자 범위를 넘어선 것을 의미하는 것이다.

 

 

2 오버플로우의 판단

 

아래 그림처럼 8비트 이진수에서 LSB(최하위 비트)부터 MSB (최상위 비트) 까지 각각 0번부터 7번까지의 번호를 부여했다. C1, C2 는 각각 상위 비트로의 올림수를 의미하는데, C1 은 6번째 비트에서 7번째, 즉 MSB 로의 올림수이며, C2 는 7번째, 즉 MSB 에서 그 다음  위 비트로의 올림수를 의미한다. 일반적으로 캐리는 C2 를 의미한다.

 

 

C1 과 C2 의 값을 보면 오버플로우 여부를 알 수 있다. 즉 C1, C2 가 서로 다른 값이면 오버플로우가 일어난 것이다. 같은 값이면 오버플로우가 아니다. 다음 예제를 보자.

 

가) 1 + (-1) = 0

 

이진수로 계산하면 00000001 + 11111111 = 1 00000000 이 된다. 캐리는 발생했지만 C1 = 1, C2 = 1 의 같은 값이므로 오버플로우는 아니다.

 

 

나) 1 + 127 = 128

 

이진수로 계산하면 00000001 + 01111111 = 10000000 이 된다. 캐리는 발생하지 않았지만 C1 = 1, C2 = 0 의 다른 값이므로 오버플로우이다.

 

다) 1 + 1 = 2

 

이진수로 계산하면 00000001 + 00000001 = 00000010 이 된다. 캐리는 발생하지 않았으며 C1 = 0, C2 = 0 의 같은 값이므로 오버플로우가 아니다.

 

라) -128 + (-128) = -256

 

이진수로 계산하면 10000000 + 10000000 = 1 00000000 이 된다. 캐리가 발생했으며 C1 = 0, C2 = 1 의 다른 값이므로 오버플로우이다.

 

위 내용을 표로 정리하면 다음과 같다. C1, C2 가 같은 값이면 오버플로우가 아니며 다른 값이면 오버플로우이므로 오버플로우 여부는 C1 과 C2 의 exclusive-OR을 구하면 된다.

 

C1

C2

Example

Overflow

0

0

1 + 1 = 2

×

0

1

-128 + (-128) = 256

1

0

1 + 127 = 128

1

1

1 + (-1) = 0

×


'마이크로프로세서' 카테고리의 다른 글

501 ARM Mode와 PSR..너희들은 누구냐?  (0) 2014.04.08
lab4_data processing instruction  (0) 2014.04.01
Hexadecimal Subtraction and Multiplication  (0) 2014.04.01
assembly format  (0) 2014.03.18
하버드 vs 폰노이만  (0) 2014.03.18
Posted by bogus919
,