JG, JGE, JL, JLE - CMP



  • Kann wer die Sprungbefehle die nach einem vergleich
    mit vorzeichenbehafteten Zahlen folgen erklären.

    Oder besser gesagt kann wer CMP mit vorzeichenbehafteten
    Zahlen erklären.

    Wann und warum wird "Overflow" und "Sign" gesetzt?

    Bitte so erklären, dass man es leicht durchschaut.

    Danke.



  • Hi.

    Leicht durchschauen ist gut... 😃
    Kommt nun darauf an, wozu du diese jumps im Zusammenhang mit cmp missbrauchen willst. Ansonsten braucht es dich normalerweise schliesslich nicht interessieren, wann bei einem cmp nun genau welches Flag gesetzt wird.
    Von ihren Namen her sind die bedingten Spruenge schliesslich selbsterklaerend...
    zB.:
    jg : jump if greater
    jge : jump if greater or equal
    jl : jump if less
    jle : jump if less or equal
    Die Gegenstuecke dazu bei vorzeichenlosen Ganzzahlen sind dann:
    ja, jae, jb, jbe

    Wenn dich die Flags beim cmp nun wirklich so brennend interessieren:
    Halte dir vor Augen, dass cmp im Grunde genommen so wie "sub" funktioniert, nur dass eben nur die Flags gesetzt werden und das Ergebnis der Rechnung verworfen wird. Die Flags werden den Eigenschaften des Ergebnisses/Problemen bei der Rechnung entsprechend gesetzt.


  • Mod

    sign ist einfach nur das vorzeichen eines ergebnisses, entspricht also immer dem höchstwertigen bit. overflow wird bei befehlen mit zwei operanden gesetzt, wenn das exakte ergebnis nicht in einen signed integer der entsprechenden grösse passt.
    overflow signalisiert also wrap-around am min(signed)/max(signed) ende des wertebereichs während carry bei einem wrap-around am 0/max(unsigned) ende gesetzt ist. für die reine sprungsyntax muss dich das allerdings nicht interessieren, die namen der bedingten sprünge sind eigentlich selbsterklärend (wenn einmal den unterschied zwischen less and below erkannt hat 😉 ).


Anmelden zum Antworten