Wat is het verschil in carry- en overflow-vlag tijdens binaire vermenigvuldiging?


Beste antwoord

In het begin moeten we deze punten benadrukken:

  • ALU maakt het niet uit of je ondertekende of ongetekende wiskunde doet.
  • ALU doet gewoon het binaire bestand math en stelt de vlaggen op de juiste manier in.
  • In signed numbers het tekenbit is een bit dat het teken van het nummer aangeeft. en het bevindt zich in het meest significante bit.

– In unsigned rekenkunde, we moeten de carry-vlag bekijken om fouten te detecteren.

– In ondertekend rekenkunde, moeten we de overloopvlag bekijken om fouten te detecteren.

– De Carry Flag wordt ingesteld als:

  • de toevoeging van twee getallen veroorzaakt een uitvoering van de meest significante (meest linkse) bits toevoeging d.
  • 1111 + 0001 = 0000 => carry-vlag is ingeschakeld.
  • het aftrekken van twee getallen vereist een ontlening in de meest significante (meest linkse ) bits afgetrokken.
  • 0000 - 0001 = 1111 => carry-vlag is ingeschakeld.

– de Overloopvlag wordt ingesteld als:

  • de som van twee getallen met het tekenbit off een resultaat oplevert nummer met de tekenbit on.
  • 0100 + 0100 = 1000 => overloopvlag is ingeschakeld.
  • de som van twee getallen met het tekenbit on levert een resultaatnummer op met het tekenbit off.
  • 1000 + 1000 = 0000 => overloopvlag is ingeschakeld.
  • Merk op dat : gemengd teken toevoeging zet de overloopvlag nooit aan.

– om het duidelijker te maken, laten we eens kijken naar deze 2 voorbeelden:

1- neem aan dat de volgende binaire toevoeging `0111 + 0010 = 1001 `

– als we niet-ondertekende wiskunde doen

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

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

– als we wiskunde met handtekeningen doen

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

7 + 2 = -7 // error detected

2- ga uit van de volgende binaire toevoeging `1111 + 0001 = 0000`

– als we ongetekende wiskunde aan het doen zijn

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

15 + 1 = 0 // error detected

– als we wiskunde met handtekeningen doen

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.

tot slot kunt u hier meer informatie vinden: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt

Antwoord

Vanuit mechanistisch oogpunt wordt de carry-vlag ingesteld wanneer er een carry-out is van de meest significante bit. De overloopvlag wordt ingesteld wanneer er een carry naar het meest significante bit is.

Met niet-ondertekende rekenkunde hoeft u zich alleen zorgen te maken over de carry vlag. Als er iets wordt uitgevoerd uit de meest significante bit, is het resultaat te groot om in een enkel register te worden opgenomen.

Voor rekenkunde met teken is de situatie complexer. Overloop treedt op wanneer de draagvlag en de overloopvlag verschillend zijn. Hier zijn alle alternatieven voor optellen op twee 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

Merk op dat regels 2, 5 en 6 onjuiste resultaten opleveren als gevolg van overflow en dat dit ook gebeurt wanneer CF anders is dan OF.

Sommige processors kunnen die vergelijking voor u doen en de OF die u ziet, is mogelijk de resultaat van het vergelijken van een interne carry-in vlag met de carry (out) vlag. Het is nog steeds alleen geldig voor rekenkundige bewerkingen met teken.

Het werkt ook met andere rekenkundige bewerkingen, inclusief vermenigvuldiging.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *