이진 곱셈 중 carry 및 overflow 플래그의 차이점은 무엇입니까?


최상의 답변

처음에는 이러한 점을 강조해야합니다.

  • ALU는 부호있는 수학을하든 부호없는 수학을하든 상관하지 않습니다.
  • ALU는 바이너리 만 수행합니다. 수학 및 플래그를 적절하게 설정합니다.
  • In signed numbers 부호 비트 는 숫자의 부호를 나타내는 비트이며 최상위 비트에 위치합니다.

-In unsigned 산술, 오류 감지를 위해 carry 플래그를 관찰해야합니다.

서명 됨 산술, 오류를 감지하려면 오버플로 플래그를 관찰해야합니다.

Carry Flag 는 다음과 같은 경우에 설정됩니다.

  • 두 숫자를 더하면 최상위 (가장 왼쪽) 비트가 실행됩니다. d.
  • 1111 + 0001 = 0000 => 캐리 플래그가 켜져 있습니다.
  • 두 숫자를 빼려면 최상위 (가장 왼쪽 ) 비트를 뺍니다.
  • 0000 - 0001 = 1111 => 캐리 플래그가 켜져 있습니다.

오버플로 플래그 는 다음과 같은 경우 설정됩니다.

  • 부호 비트가 off 인 두 숫자의 합이 결과를 생성합니다. 부호 비트가있는 숫자 on.
  • 0100 + 0100 = 1000 => 오버플로 플래그가 켜져 있습니다.
  • 부호 비트가 on 인 두 숫자의 합은 부호 비트가 off 인 결과 숫자를 생성합니다.
  • 1000 + 1000 = 0000 => 오버플로 플래그가 켜져 있습니다.
  • 참고 : 혼합 기호 추가는 오버플로 플래그를 절대로 켜지 않습니다.

-더 명확하게하기 위해 두 가지 예를 보겠습니다.

1- 다음 이진 추가를 가정합니다`0111 + 0010 = 1001 `

-부호없는 수학을하는 경우

0111 + 0010 = 1001 // overflow flag is turned on.

7 + 2 = 9 // its ok, we only care about the carry flag

-부호있는 수학을하는 경우

0111 + 0010 = 1001 // overflow flag is turned on.

7 + 2 = -7 // error detected

2- 다음 이진 더하기`1111 + 0001 = 0000`을 가정합니다

-부호없는 수학을 수행하는 경우

1111 + 0001 = 0000 // carry flag is turned on.

15 + 1 = 0 // error detected

-부호있는 수학을 수행하는 경우

1111 + 0001 = 0000 // carry flag is turned on.

-1 + 1 = 0 // its ok we only care about the overflow flag

// remember: Mixed-sign addition never turns on the overflow flag.

마지막으로 여기에서 자세한 정보를 찾을 수 있습니다. http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt

답변

기계적 관점에서 캐리 플래그는 최상위 비트의 수행이있을 때 설정됩니다. 오버플로 플래그는 최상위 비트로 이동 이있을 때 설정됩니다.

부호없는 산술에서는 캐리에 대해서만 걱정하면됩니다. 깃발. 가장 중요한 비트에서 무언가를 수행하면 결과가 너무 커서 단일 레지스터에 포함 할 수 없습니다.

부호있는 산술의 경우 상황이 더 복잡합니다. 오버플로는 캐리 플래그와 오버플로 플래그가 다를 때 발생합니다. 다음은 2 비트 추가에 대한 모든 대안입니다.

00 + 00 = 00, (0 + 0 = 0 decimal), CF = 0, OF = 0

01 + 01 = 10, (1 + 1 = -2 decimal) CF = 0, OF = 1 overflow

01 + 10 = 11, ( 1 + -2 = -1 decimal), CF = 0, OF = 0

01 + 11 = 00, ( 1 + -1 = 0 decimal), CF = 1, OF = 1

10 + 10 = 00, ( -2 + -2 = 0 decimal), CF = 1, OF = 0 overflow

10 + 11 = 01, ( -2 + -1 = 1 decimal), CF = 1, OF = 0 overflow

11 + 11 = 10, (-1 + -1 = -2 decimal), CF = 1, OF = 1

줄 2, 5 및 6은 오버플로로 인해 잘못된 결과를 생성하고 CF가 OF와 다른 경우에도 마찬가지입니다.

일부 프로세서는 이러한 비교를 수행 할 수 있으며 OF는 다음과 같을 수 있습니다. 내부 반입 플래그와 carry (out) 플래그를 비교 한 결과. 여전히 부호있는 산술에만 유효합니다.

곱하기를 포함한 다른 산술에서도 작동합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다