2011-09-22 7 views
2

캐리 플래그 (CF)와 오버플로 플래그 (OF)를 이해하는데 약간의 문제가 있습니다. 여기 이진 가감/감산

내가 일하고 몇 가지 예제 문제입니다

1. 1011 1111 2. 1111 0111 3. 0111 1110 --> 0111 1110 
    + 1011 0111  + 1101 1101  - 1011 0000 --> + 0100 1111 
    ___________  ___________  ___________  +   1 
    0111 0110  1101 0100      ___________ 
                 1100 1110 
  1. 부호 위치의 carryout가 1이고 부호 위치에서 캐리 = 1의 있도록, 0?
  2. 부호 위치의 carryout은 1이고 부호 위치로의 carry in은 1이므로 OF = 0입니까?
  3. 부호 위치의 carryout은 0이고 부호 위치로의 carry in은 1이므로 OF = 1?

부호없는 오버플로와 적절한 CF 값을 이해하는 데 어려움이 있습니다.

답변

2

면책 조항 : 저는 전문가가 아니며,이 코드의 사용자도 아닙니다.).

나는 carry-flag가 부호없는 데이터에 대해 의미가 있으며, overflow-flag는 서명 된 데이터에 대해 의미가 있다고 생각합니다.

둘 다 항상 생성되지만 서명되지 않은 값 또는 2의 보수가 고려되는지 결정하는 것은 사용자가 결정합니다. 따라서주의해야 할 플래그가 결정됩니다. 에서

: http://en.wikipedia.org/wiki/Overflow_flag

내부적으로 오버 플로우 플래그는 보통 단독으로 또는에와 부호 비트 중 내부 캐리의 생성됩니다. 부호 비트는 부호없는 것으로 간주되는 숫자의 최상위 비트와 같기 때문에 오버 플로우 플래그는 "무의미"하며 일반적으로 이러한 숫자가 더 해지거나 뺄 때 무시됩니다.

부호 비트는 최상위 비트 (맨 왼쪽)입니다.

배타적 OR (XOR)를이다

  • 어느 경우 0
  • 어느 경우 1
  • 두 경우 : 부호 비트 때 0

반입에 두 번째 최상위 비트는 추가 될 때 다음 열로 넘겨 질 값을 생성합니다.

캐리 아웃은 최상위 비트 (부호 비트, 2의 보수 인 경우)를 더할 때 수행되어야하는지 여부입니다.

이러한 두 값을 XOR하고 주어진 추가 후 오버플로 플래그의 값으로 끝내야합니다.

+0

기사에서 알아낼 수 없지만 캐리 플래그는 더 간단합니다. "캐리 아웃"으로 결정한 값으로 설정됩니다. (음수를 더하는 것이 아니라) 명시적인 작업을 수행하는 경우가 아니라면 값은 아키텍처에 따라 다릅니다. 일부는 빌려주는 플래그를 설정하고 다른 플래그는 지울 것입니다. –