최상의 답변
처음에는 이러한 점을 강조해야합니다.
-
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) 플래그를 비교 한 결과. 여전히 부호있는 산술에만 유효합니다.
곱하기를 포함한 다른 산술에서도 작동합니다.