6 svar
323 visningar
mekatronik är nöjd med hjälpen
mekatronik 614
Postad: 29 dec 2021 16:32

Flaggbitar från en binär subtraktion

Hej, jag har utfört den binära subtraktionen (i en ALU):

111110011+0010111001notera att 00101 är ett 1 komplement till 11010, 1:orna längst upp är carry bitarna.

Jag får svaret -7 från denna operation vilket är korrekt enligt facit, men nu ska jag även räkna ut flaggbitarna. N och Z flaggan vet jag redan de blir, däremot så skall C flaggan bli 1 här och jag förstår inte varför. Eftersom det är tal med tecken borde väl V flaggan vara 1 och inte C?

Rätt svar: NZVC=1001

Fermatrix 7841 – Fd. Medlem
Postad: 29 dec 2021 23:53

V-flaggan indikerar overflow medan C är carry. 

mekatronik 614
Postad: 30 dec 2021 08:09
Dracaena skrev:

V-flaggan indikerar overflow medan C är carry. 

C flaggan indikerar spill för tal utan tecken och V flaggan indikerar spill för tal med tecken enligt min lärobok. I detta fall får jag ju inget spill men ändå ändå är C flaggan 1, varför är den det? 

Programmeraren 3387
Postad: 30 dec 2021 10:15

Om ALU:n fungerar pss som den i FLISP så är V overflow vid 2-komplementsaddition.

Subtraktion görs som A+B'+1 (där B' är B med bitarna inverterade).

Vilka är de två talen? Det ser ut som 19-26.
Jag antar att ALU:n 8-bitars, du har räknat med 5 bitar vilket fungerar men jag fördrar att räkna med ALU:ns längd.

Du verkar göra ett osynligt "+1" vilket verkar riskfyllt.

A-B = A+B'+1
19-26 = (0001 0011)-(0001 1010)=(0001 0011)+(1110 0101)+1=(11111001)=-7

V=0 eftersom resultatet rymdes inom 2-komplement.
C=1 eftersom du "lånade", "C sätts till inversen av det C som additionen ger".

mekatronik 614
Postad: 30 dec 2021 10:33 Redigerad: 30 dec 2021 10:37
Programmeraren skrev:

Om ALU:n fungerar pss som den i FLISP så är V overflow vid 2-komplementsaddition.

Subtraktion görs som A+B'+1 (där B' är B med bitarna inverterade).

Vilka är de två talen? Det ser ut som 19-26.
Jag antar att ALU:n 8-bitars, du har räknat med 5 bitar vilket fungerar men jag fördrar att räkna med ALU:ns längd.

Du verkar göra ett osynligt "+1" vilket verkar riskfyllt.

A-B = A+B'+1
19-26 = (0001 0011)-(0001 1010)=(0001 0011)+(1110 0101)+1=(11111001)=-7

V=0 eftersom resultatet rymdes inom 2-komplement.
C=1 eftersom du "lånade", "C sätts till inversen av det C som additionen ger".

Tror jag misstolkar varför C=1, men är det eftersom vi gör om Y till två komplement? Då innebär det väl att det finns fall då C och V är =1 samtidigt? Eller är det för att vi får minnessiffror? (vid ex. 1+1 = 0 men en 1:a läggs över till nästa position)

edit: Tack för förklaringen med overflow, har verkligen letat efter en enkel metod för att beräkna den (och vår lärare visar bara den jobbiga formeln).

Programmeraren 3387
Postad: 30 dec 2021 11:13 Redigerad: 30 dec 2021 11:18

C är den som är lite konstig, i "Beskrivning" ovan för "SUBA" förklaras det.
Additionen ger C=0 så "inversen av det värde som kommer ut från ALU:n" är som jag förstår det förklaringen till C=1.

Om jag tänker rätt behövs C=1 för att en eventuell SUB av en byte med de övre 8 bitarna i ett 16-bitstal ska bli rätt.

V enligt FLISP:
Jag tolkar det som att man kan tänka logiskt, dvs att V sätta om resultatet helt enkelt inte ryms inom -128 till +127

mekatronik 614
Postad: 30 dec 2021 11:29
Programmeraren skrev:

C är den som är lite konstig, i "Beskrivning" ovan för "SUBA" förklaras det.
Additionen ger C=0 så "inversen av det värde som kommer ut från ALU:n" är som jag förstår det förklaringen till C=1.

Om jag tänker rätt behövs C=1 för att en eventuell SUB av en byte med de övre 8 bitarna i ett 16-bitstal ska bli rätt.

V enligt FLISP:
Jag tolkar det som att man kan tänka logiskt, dvs att V sätta om resultatet helt enkelt inte ryms inom -128 till +127

Nu förstår jag logiken, tack så hemskt mycket!

Svara Avbryt
Close