Bästa svaret
I början måste vi betona dessa punkter:
-
ALU
bryr sig inte om du gör signerad eller osignerad matematik. -
ALU
gör bara det binära matematik och ställer in flaggorna på lämpligt sätt. - I
signed numbers
teckenbiten är en bit som indikerar numret och det ligger i den viktigaste biten.
– I osignerad aritmetik, vi måste titta på bärflaggan för att upptäcka fel.
– I signerad aritmetik, vi måste se överflödesflaggan för att upptäcka fel.
– Carry Flag är inställd om:
- tillägget av två nummer orsakar en utförande av de viktigaste (längst till vänster) bitarna d.
-
1111 + 0001 = 0000
=> bärflagga är påslagen. - subtraheringen av två nummer kräver ett lån till det mest betydelsefulla (längst till vänster ) bitar subtraherade.
-
0000 - 0001 = 1111
=> bärflagga är påslagen.
– Överflödesflagga ställs in om:
- summan av två siffror med teckenbiten
off
ger ett resultat nummer med skyltbitenon
. -
0100 + 0100 = 1000
=> överflödesflaggan är påslagen. - summan av två siffror med teckenbiten
on
ger ett resultatnummer med teckenbitenoff
. -
1000 + 1000 = 0000
=> överflödsflaggan är aktiverad. - Observera att : Mixed-sign tillägg slår aldrig på överflödesflaggan.
– för att göra det mer tydligt, låt oss se de två exemplen:
1- anta följande binära tillägg `0111 + 0010 = 1001 `
– om vi gör osignerad matematik
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = 9 // its ok, we only care about the carry flag
– om vi gör signerad matematik
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = -7 // error detected
2- antag följande binära tillägg `1111 + 0001 = 0000`
– om vi gör osignerad matematik
1111 + 0001 = 0000 // carry flag is turned on.
15 + 1 = 0 // error detected
– om vi gör signerad matematik
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.
slutligen kan du hitta mer info här: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt
Svar
Ur mekanisk synvinkel ställs bärflaggan in när det finns en utförande av den mest betydelsefulla biten. Överströmningsflaggan ställs in när det finns en till den viktigaste biten.
Med osignerad aritmetik behöver du bara oroa dig för bäringen flagga. Om något utförs av den mest betydelsefulla biten är resultatet för stort för att ingå i ett enda register.
För signerad aritmetik är situationen mer komplex. Överflöde inträffar när bärflaggan och överflödesflaggan är olika. Här är alla alternativ för tillägg på två bitar.
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
Observera att raderna 2, 5 och 6 ger felaktiga resultat på grund av överflöd och att dessa också är när CF skiljer sig från OF.
Vissa processorer kan göra den jämförelsen för dig och OF du ser kan vara resultat av att jämföra en intern inmatningsflagga med utfärgsflaggan. Det är fortfarande endast giltigt för signerad aritmetik.
Det fungerar även med annan aritmetik, inklusive multiplikation.