Legjobb válasz
Az elején ki kell emelnünk ezeket a pontokat:
-
ALU
nem érdekli, hogy aláírt vagy aláíratlan matematikát folytatsz. -
ALU
csak a bináris matematika és megfelelően beállítja a zászlókat. - In
signed numbers
a jel bit olyan bit, amely a szám előjelét jelzi. És ez található a legjelentősebb bitben.
– A aláíratlan számtan, a hibák észleléséhez figyelnünk kell a carry flagre.
– A aláírt aritmetika, figyelnünk kell a túlcsordulási jelzőt a hibák észleléséhez.
– A Carry Flag be van állítva, ha:
- két szám összeadása a legjelentősebb (bal oldali) bit adde végrehajtását eredményezi d.
-
1111 + 0001 = 0000
=> carry flag be van kapcsolva. - két szám kivonásához kölcsön szükséges a legjelentősebb (bal szélső) ) biteket kivontuk.
-
0000 - 0001 = 1111
=> carry flag be van kapcsolva.
– a Túlcsordulási zászló akkor van beállítva, ha:
- két szám összege a
off
előjelű bitgel eredményt ad szám előjel biton
. -
0100 + 0100 = 1000
=> túlcsordulás jelző be van kapcsolva. - két szám összegével előjel bit
on
eredménysorozatot kap, amelynek előjelének számaoff
. -
1000 + 1000 = 0000
=> a túlcsordulás jelző be van kapcsolva. - Vegye figyelembe, hogy : vegyes előjel Az addíció soha nem kapcsolja be a túlcsordulási jelzőt.
– hogy világosabb legyen, nézzük meg ezt a 2 példát:
1- tegyük fel a következő bináris kiegészítést: “0111 + 0010 = 1001 `
– ha aláíratlan matematikát folytatunk
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = 9 // its ok, we only care about the carry flag
– ha aláírt matematikát folytatunk
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = -7 // error detected
2- tegyük fel a következő bináris kiegészítést: “1111 + 0001 = 0000”
– ha aláíratlan matematikát folytatunk
1111 + 0001 = 0000 // carry flag is turned on.
15 + 1 = 0 // error detected
– ha aláírt matematikát folytatunk
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.
végül itt talál további információkat: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt
Válasz
Mechanisztikus szempontból a carry flag akkor van beállítva, ha a legjelentősebb bit végrehajtása van. A túlcsordulás jelző akkor kerül beállításra, ha van egy hordozás a legjelentősebb bitbe.
Aláíratlan aritmetikával csak a hordozás miatt kell aggódnia. zászló. Ha valamit a legjelentősebb bitből hajtanak végre, akkor az eredmény túl nagy ahhoz, hogy egyetlen regiszterbe kerüljön.
Az aláírt számtan esetében a helyzet összetettebb. Túlcsordulás akkor következik be, ha a carry flag és a overflow flag különbözik. Itt találhatók a két bit összesítésének alternatívái.
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
Ne feledje, hogy a 2., 5. és 6. sor hibás eredményeket produkál a túlcsordulás miatt, és ezek akkor is előfordulnak, amikor a CF eltér az OF-tól.
Egyes processzorok elvégezhetik ezt az összehasonlítást az Ön számára, és az Ön által látott OF lehet az egy belső carry-flag és a carry (out) zászló összehasonlításának eredménye. Ez továbbra is csak az előírt számtanra lesz érvényes.
Más számtannal is működik, beleértve a szorzást is.