Jaký je rozdíl v příznaku carry a overflow během binárního násobení?


Nejlepší odpověď

Na začátku musíme tyto body zdůraznit:

  • ALU se nestará o to, jestli děláte podepsanou nebo nepodepsanou matematiku.
  • ALU dělá pouze binární matematiku a vhodně nastaví příznaky.
  • v signed numbers bit znaménka je bit, který označuje znaménko čísla. Je umístěn v nejvýznamnějším bitu.

– V nepodepsaná aritmetika, je třeba sledovat příznak přenášení, aby se zjistily chyby.

– V podepsáno arithmetic, musíme sledovat příznak přetečení, abychom zjistili chyby.

Carry Flag je nastaven, pokud:

  • přidání dvou čísel způsobí provedení nejvýznamnějších (nejvíce vlevo) bitů adde d.
  • 1111 + 0001 = 0000 => příznak nošení je zapnutý.
  • odčítání dvou čísel vyžaduje výpůjčku na nejvýznamnější (úplně vlevo) ) odečtené bity.
  • 0000 - 0001 = 1111 => příznak přenosu je zapnutý.

Příznak přetečení je nastaven, pokud:

  • součet dvou čísel se znaménkovým bitem off přinese výsledek číslo se znaménkovým bitem on.
  • 0100 + 0100 = 1000 => příznak přetečení je zapnutý.
  • součet dvou čísel se znaménkovým bitem on získá výsledné číslo se znaménkovým bitem off.
  • 1000 + 1000 = 0000 => příznak přetečení je zapnutý.
  • Všimněte si, že : smíšený znak doplněk nikdy nezapne příznak přetečení.

– aby bylo jasnější, podívejme se na tyto 2 příklady:

1- předpokládejme následující binární doplněk `0111 + 0010 = 1001 `

– pokud děláme nepodepsanou matematiku

0111 + 0010 = 1001 // overflow flag is turned on.

7 + 2 = 9 // its ok, we only care about the carry flag

– pokud děláme podepsanou matematiku

0111 + 0010 = 1001 // overflow flag is turned on.

7 + 2 = -7 // error detected

2- předpokládejme následující binární sčítání `1111 + 0001 = 0000`

– pokud děláme nepodepsanou matematiku

1111 + 0001 = 0000 // carry flag is turned on.

15 + 1 = 0 // error detected

– pokud děláme podepsanou matematiku

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.

konečně najdete další informace zde: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt

Odpověď

Z mechanistického hlediska je příznak carry nastaven, když je proveden nejvýznamnější bit. Příznak přetečení je nastaven, když je do nejvýznamnějšího bitu.

S nepodepsanou aritmetikou si musíte dělat starosti pouze s carry vlajka. Pokud se něco provádí z nejvýznamnějšího bitu, pak je výsledek příliš velký na to, aby byl obsažen v jediném registru.

U aritmetiky se znaménkem je situace složitější. Přetečení nastane, když se příznak přenášení a příznak přetečení liší. Zde jsou všechny alternativy přidání na dva bity.

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

Všimněte si, že řádky 2, 5 a 6 produkují nesprávné výsledky kvůli přetečení a že jsou také tehdy, když se CF liší od OF.

Některé procesory mohou provést toto srovnání pro vás a OF, který vidíte, může být výsledek porovnání interního příznaku odbavení s příznakem provedení (vynesení). Stále bude platit pouze pro aritmetiku se znaménkem.

Funguje také s jinou aritmetikou, včetně násobení.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *