- LiTime Speicher und Akkus         
Ergebnis 1 bis 6 von 6

Thema: Verständnisfrage zu V Flag

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236

    Verständnisfrage zu V Flag

    Anzeige

    Powerstation Test
    Hallo, ich analysiere ein bischen den V Flag im SREG und weiß nicht so recht wovon der abhängig ist
    Daß er Zweierkomplementüberlauf signalisiert weiß ich schon, aber verstehen tue ich das noch lange nicht...

    Nach einer gründlichen Analyse im Debugger hab ich festgestellt, daß er nur dann gesetzt wird, wenn das Ergebnis einer Operation genau 0x80 oder binär 10000000 ist
    Wird der nur in diesem Fall gesetzt oder hab ich irgendwas übersehen

    Ich meine, ich brauch diesen Flag bis jetzt ziemlich selten bis nie, aber wissen möchte ich schon wie er funktioniert \/
    Software is like s e x: its better when its free.
    Linus Torvald

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.02.2006
    Alter
    54
    Beiträge
    781
    Zum ersten ist die Funktion der Flags je nach Operation sehr unterschiedlich.

    Zum zweiten: Nein, es wird nicht nur gesetzt, wenn das Ergebnis 0x80 ist.
    Bei Addieren, Subtrahieren und sowas wird das gesetzt, wenn ein Überlauf über die Grenzen +127 in positiver Richtung oder -128 in negativer Richtung erfolgt.
    Es erfüllt damit bei Signed-Werten in etwa die Funktion des Carry-Bits bei Unsigned-Werten.
    Beim INC-Befehl ist es so wie von dir beschrieben, denn dann findet beim Sprung von 0x7F nach 0x80 eine Überlauf über +127 statt.

    Ich finde jetzt auf die Schnelle keine Operation, bei der das V-Flag eine andere Funktion hat. Schau dir am besten mal das Instruction-Set an. Da steht drin was bei welcher Operation mit welchem Flag passiert. Am besten gleich auf die Festplatte damit und in greifbarer Nähe aufbewahren, das kann man immer gebrauchen Dieser Artikel im Wiki beschreibt das Verhalten der Status-Bits ausführlich und DAU-geeignet

    Mir kommt übrigens gerade eine Idee: Könnte man nicht im Wiki einen Artikel anlegen, der grundlegende Rechenoperationen aufführt? Damit meine ich neben ein paar einfachen Sachen wie 8bit-Additionen auch so Sachen wie 16bit Unsigned + 16 Bit Signed = 16bit Unsigned Saturating und sowas.
    (Saturating: So dass 50000 + 20000 nicht 4464 ergibt sondern 65535 und 10000 - 20000 nicht 55536 sondern 0.)

    Gruß,
    Dennis

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo Dennis,
    Ich hab es mir schon gedacht... das wäre zu schön gewesen,
    Aber danke für den Link zu Wiki, es sieht wirklich gut aus

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    ..einen Artikel anlegen, der grundlegende Rechenoperationen aufführt
    Muttu gucken, da haben wir schon was:
    https://www.roboternetz.de/wissen/in...hafteten_8_Bit
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.02.2006
    Alter
    54
    Beiträge
    781
    Das würde ich zu den grundlegenden Sachen zählen...
    Bei dem angesprochenen "16bit Unsigned + 16 Bit Signed => 16bit Unsigned Saturating" muss man schon mit zwei Status-Bits jonglieren. (Es sei denn ich hab beim Proggen mal wieder zu kompliziert gedacht...)

    Edit: Hab mich vertan. Es muss heißen "16bit Unsigned - 16 Bit Unsigned => 16bit Signed Saturating"

    (Edit2: Gibt natürlich keien Garantie auf Funktionsfähigkeit, hab's noch nicht ausführlich getestet)

    Code:
    sub low1, low2
    sbc high1, high2
    
    brcs carrySet
      brpl end
        ldi low1, 0xFF
        ldi high1, 0x7F
        rjmp end
    carrySet:
      brmi end
        ldi low1, 0x00
        ldi high1, 0x80
    end
    Erklärung: Am Anfang wird erstmal einfach eine 16bit-Subtraktion ausgeführt. Der zweite Teil prüft erstmal über das Carry-Bit, ob ein positiver oder ein negativer Wert rauskommen müsste (Carry gesetzt => Wert 2 größer als Wert 1 => negativer Wert müsste rauskommen, andersrum das gleiche). Je nachdem ob das Carry-Bit gesetzt ist oder nicht, wird entweder im oberen Teil weitergemacht oder es wird zum unteren Teil gesprungen. Da wird jeweils getestet, welches Vorzeichen das Ergebnis hat. Wenn das Carry nicht gesetzt ist und das Negative-Flag gesetzt ist, dann fand ein Überlauf in positiver Richtung statt und das Ergebnis wird auf 0x7FFF gesetzt. Wenn das Carry gesetzt ist, aber das Negative-Flag nicht gesetzt ist, fand ein Überlauf in negativer Richtung statt, und das Ergebnis wird auf 0x8000 gesetzt.

    Sowas meinte ich halt.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Ich hab mich bis jetzt um das vorzeichenbehaftete Rechnen gekonnt gedrückt

    Es ist aber immer gut die zusammenhänge zu verstehen...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test