Beste svaret
I begynnelsen må vi understreke disse punktene:
-
ALU
bryr seg ikke om du gjør signert eller usignert matematikk. -
ALU
gjør bare binær matematikk og setter flaggene riktig. - I
signed numbers
tegnbiten er en bit som indikerer tegnet på nummeret. og det ligger i den viktigste biten.
– I usignert aritmetikk, vi må se bæreflagget for å oppdage feil.
– I signert aritmetikk, vi må se på overløpsflagget for å oppdage feil.
– Bæreflagg er satt hvis:
- tillegg av to tall fører til en utføring av de viktigste (lengst til venstre) bitene d.
-
1111 + 0001 = 0000
=> bæreflagg er slått på. - subtraksjonen av to tall krever et lån til det mest betydningsfulle (lengst til venstre ) biter trukket.
-
0000 - 0001 = 1111
=> bæreflagg er slått på.
– Overløpsflagg angis hvis:
- summen av to tall med tegnbiten
off
gir et resultat nummer med skiltbitenon
. -
0100 + 0100 = 1000
=> overløpsflagg er slått på. - summen av to tall med tegnbiten
on
gir et resultatnummer med tegnbitenoff
. -
1000 + 1000 = 0000
=> overløpsflagg er slått på. - Merk at : Blandet tegn tillegg slår aldri på overløpsflagget.
– for å gjøre det mer tydelig, la oss se de 2 eksemplene:
1- anta følgende binære tillegg `0111 + 0010 = 1001 `
– hvis vi gjør usignert matematikk
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = 9 // its ok, we only care about the carry flag
– hvis vi gjør signert matematikk
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = -7 // error detected
2- anta følgende binære tillegg `1111 + 0001 = 0000`
– hvis vi gjør usignert matematikk
1111 + 0001 = 0000 // carry flag is turned on.
15 + 1 = 0 // error detected
– hvis vi gjør signert matematikk
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.
til slutt kan du finne mer info her: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt
Svar
Fra et mekanistisk synspunkt settes bæreflagget når det er en gjennomføring av den mest betydningsfulle biten. Overløpsflagget settes når det er en til den viktigste biten.
Med usignert aritmetikk trenger du bare å bekymre deg for å bære flagg. Hvis noe blir utført av den mest betydningsfulle biten, er resultatet for stort til å være inneholdt i et enkelt register.
For signert aritmetikk er situasjonen mer kompleks. Overflyt oppstår når bæreflagget og overløpsflagget er forskjellige. Her er alle alternativene for tillegg på to biter.
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
Merk at linjene 2, 5 og 6 gir feil resultater på grunn av overløp, og at disse også er når CF er forskjellig fra OF.
Noen prosessorer kan gjøre den sammenligningen for deg og OF du ser kan være den resultat av å sammenligne et internt innføringsflagg med gjennomføringsflagget. Den vil fortsatt bare være gyldig for signert regning.
Den fungerer også med annen regning, inkludert multiplikasjon.