Paras vastaus
Aluksi meidän on korostettava näitä kohtia:
-
ALU
ei välitä, harjoitteletko allekirjoitettua vai allekirjoittamatonta matematiikkaa. -
ALU
tekee vain binäärisen matematiikka ja asettaa liput asianmukaisesti. - Sisään
signed numbers
merkkibitti on bitti, joka osoittaa luvun merkin. Ja se sijaitsee merkittävimmässä bitissä.
– allekirjoittamaton aritmeettinen, meidän on tarkkailtava kantolippua virheiden havaitsemiseksi.
– allekirjoitettu aritmeettinen, meidän on tarkkailtava ylivuotolippua virheiden havaitsemiseksi.
– Kantolippu on asetettu, jos:
- Kahden numeron lisääminen aiheuttaa merkittävimmän (vasemmanpuoleisimman) bitin adden suorittamisen d.
-
1111 + 0001 = 0000
=> kantolippu on käytössä. - kahden numeron vähennys edellyttää lainaa merkittävimpään (vasemmanpuoleisin) ) bittiä vähennetty.
-
0000 - 0001 = 1111
=> kantolippu on käytössä.
– Ylivuotolippu asetetaan, jos:
- kahden merkkibitillä
off
olevan numeron summa tuottaa tuloksen numero, jolla on merkkibittion
. -
0100 + 0100 = 1000
=> ylivuotolippu on käytössä. - kahden merkkibitillä
on
olevan luvun summa tuottaa tulosnumeron merkkibitilläoff
. -
1000 + 1000 = 0000
=> ylivuotolippu on käytössä. - Huomaa : Sekamerkki lisäys ei koskaan kytke päälle ylivuotolippua.
– jotta se olisi selkeämpi, katsotaan nämä kaksi esimerkkiä:
1 – oletetaan seuraava binaarinen lisäys `0111 + 0010 = 1001 `
– jos teemme allekirjoittamatonta matematiikkaa
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = 9 // its ok, we only care about the carry flag
– jos teemme allekirjoitettua matematiikkaa
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = -7 // error detected
2- oletetaan seuraava binaarinen lisäys `1111 + 0001 = 0000`
– jos teemme allekirjoittamatonta matematiikkaa
1111 + 0001 = 0000 // carry flag is turned on.
15 + 1 = 0 // error detected
– jos teemme allekirjoitettua matematiikkaa
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.
lopuksi löydät lisätietoja täältä: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt
Vastaus
Mekanistisesta näkökulmasta kantolippu asetetaan, kun merkittävimmän bitin suoritus on suoritettu. Ylivuotolippu asetetaan, kun siirto tärkeimpään bittiin on .
Allekirjoittamattomalla laskutoimituksella sinun on huolehdittava vain siirtämisestä lippu. Jos jotain suoritetaan merkittävimmistä biteistä, tulos on liian suuri sisällytettäväksi yhteen rekisteriin.
Allekirjoitetussa laskutoimituksessa tilanne on monimutkaisempi. Ylivuoto tapahtuu, kun kantolippu ja ylivuotolippu ovat erilaiset. Tässä ovat kaikki vaihtoehdot kahden bitin lisäämiseen.
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
Huomaa, että rivit 2, 5 ja 6 tuottavat virheellisiä tuloksia ylivuodon takia ja että nämä ovat myös silloin, kun CF on erilainen kuin OF.
Jotkut prosessorit saattavat tehdä tämän vertailun sinulle ja näkeväsi OF voi olla tuloksen verrattaessa sisäistä siirtolippua harjoituslippuun. Se on edelleen voimassa vain allekirjoitetussa laskutoimituksessa.
Se toimii myös muun laskutoimituksen kanssa, mukaan lukien kertolasku.