Bedste svar
I starten skal vi understrege disse punkter:
-
ALU
er ligeglad med, om du laver signeret eller usigneret matematik. -
ALU
gør bare det binære matematik og indstiller flagene passende. - I
signed numbers
tegnbit er en bit, der angiver tegnet på nummeret. Og det er placeret i den mest betydningsfulde bit.
– I usigneret aritmetik, vi skal se bæreflagget for at opdage fejl.
– I underskrevet aritmetik, vi skal se overløbsflagget for at opdage fejl.
– Carry Flag er indstillet, hvis:
- tilføjelsen af to tal forårsager en udførelse af de mest betydningsfulde (venstre) bits adde d.
-
1111 + 0001 = 0000
=> bæreflag er slået til. - subtraktion af to tal kræver et lån til det mest betydningsfulde (længst til venstre ) bits trukket.
-
0000 - 0001 = 1111
=> bæreflag er slået til.
– Overflow Flag indstilles, hvis:
- summen af to tal med tegnbiten
off
giver et resultat nummer med tegnbitenon
. -
0100 + 0100 = 1000
=> overløbsflag er slået til. - summen af to tal med tegnbiten
on
giver et resultattal med tegnbitenoff
. -
1000 + 1000 = 0000
=> overløbsflag er slået til. - Bemærk, at : blandet tegn tilføjelse tænder aldrig overløbsflagget.
– for at gøre det mere klart, lad os se de 2 eksempler:
1- antag følgende binære tilføjelse `0111 + 0010 = 1001 `
– hvis vi laver usigneret matematik
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = 9 // its ok, we only care about the carry flag
– hvis vi laver signeret matematik
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = -7 // error detected
2- antag følgende binære tilføjelse `1111 + 0001 = 0000`
– hvis vi laver usigneret matematik
1111 + 0001 = 0000 // carry flag is turned on.
15 + 1 = 0 // error detected
– hvis vi laver signeret 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.
endelig kan du finde mere info her: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt
Svar
Fra et mekanistisk synspunkt indstilles bæreflagget, når der er en udførelse af den mest betydningsfulde bit. Overløbsflaget indstilles, når der er en bære til den mest betydningsfulde bit.
Med usigneret aritmetik behøver du kun bekymre dig om bæringen flag. Hvis der udføres noget af den mest betydningsfulde bit, er resultatet for stort til at blive indeholdt i et enkelt register.
For signeret aritmetik er situationen mere kompleks. Overløb opstår, når bæreflagget og overstrømsflagget er forskellige. Her er alle alternativer til tilføjelse på to bits.
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
Bemærk, at linie 2, 5 og 6 giver forkerte resultater på grund af overløb, og at disse også er, når CF er forskellig fra OF.
Nogle processorer kan gøre denne sammenligning for dig og OF du ser kan være resultat af sammenligning af et internt indførselsflag med udførelsesflaget. Det er stadig kun gyldigt for underskrevet aritmetik.
Det fungerer også med anden aritmetik, herunder multiplikation.