Flaggbitar från en binär subtraktion
Hej, jag har utfört den binära subtraktionen (i en ALU):
notera 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
V-flaggan indikerar overflow medan C är carry.
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?
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".
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)=-7V=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).
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
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!