Frage

Ich versuche, meinen Kopf um Überlauf zu wickeln und Flaggen in x86 zu tragen.

So wie ich es verstehe, können die Flags zum Hinzufügen von vorzeichenbehafteten 2er-Komplementnummern nur auf eine von vier Arten generiert werden (meine Beispiele sind 4-Bit-Zahlen):

  1. pos+pos = neg (Überlauf)
    • 0111 + 0001 = 1000 (7 + 1 = -8)
  2. pos + neg = pos (tragen)
    • 0011 + 1110 = 0001 (3 + -2 = 1)
  3. neg+neg = neg (übertrag)
    • 1111 + 1111 = 1110 (-1 + -1 = -2)
  4. neg + neg = pos (Überlauf & Übertrag)
    • 1000 + 1001 = 0001 (-8 + -7 = 1)

Erzeugt das Subtrahieren von B von A in der x86-Assembly also dieselben Flags wie das Hinzufügen von A und -B ?

War es hilfreich?

Lösung

Hier ist eine Referenztabelle, die helfen könnte.Dies zeigt ein Beispiel für eine mögliche Kombination von in jeder möglichen Kombination der 4 arithmetischen Flags, die sich aus den Hinzufügen- und Unteranweisungen auf X86 ergeben können.'H' ud 'und' d 'Stand für Hex, vorzeichenlose Dezimal- und Unterzeichnung Dezimalrepräsentationen jedes Werts.Beispielsweise sagt die erste Zeile für Sub 0xFF - 0xFE= 0x1 ohne eingestellte Flaggen.

Aber ich denke, die Kurzgeschichte ist, dass Alexs Antwort richtig ist. generasacodicetagpre.

Andere Tipps

Beim Addieren oder Subtrahieren sind alle 4 Kombinationen der Übertrag- und Überlaufwerte möglich.Weitere Beispiele finden Sie in diese Antwort.

Diese Antwort enthält einen Beweis dafür, dass der Übertrag, den Sie erhalten, von A-B ist die Umkehrung des Übertrags, von dem Sie erhalten A+(-B).Der Code durch den ersten Link nutzt diese Eigenschaft aus, um ADC in SBB.

Der vorzeichenbehaftete Überlaufkennzeichenwert muss jedoch für beide gleich sein A-B und A+(-B) denn es hängt davon ab, ob das Ergebnis das richtige Vorzeichenbit hat oder nicht und in beiden Fällen ist das Vorzeichenbit gleich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top