Flags bei bedingten Sprüngen
Hallo,
ich beschäftige mich aktuell mit dem Foliensatz „4 Hardwarenahe Programmierung in Assembler“.
Die Folie 23 bereitet mir einiges Kopfzerbrechen.
Hier gibt’s erst mal das PDF:
http://www3.informatik.uni-erlangen.de/Lehre/GRa/SS2014/Gra_Kap_4.pdf
Ich taste mich mal vorsichtig voran:
JUMP EQUAL: Auf der vorherige Folie steht : „Subtraktion ermittelt Flags für Vergleiche“.
Zero = 1 → Das heißt, das Ergebnis der Subtraktion war Null,
damit sind beide Zahlen gleich,
und damit ist es eben equal.
JUMP NOT EQUAL: Zero=0 → Das Ergebnis der Subtraktion war verschieden
von Null, damit sind die Zahlen ungleich
JUMP GREATER: Zero=0 & Overflow = Sign
Der erste Teil sorgt halt dafür, dass es nicht gleich ist, also echt
größer.
Der zweite Teil sorgt dafür dass es größer ist.
aber so ganz versteh ich es nicht. Sign ist das Vorzeichen des
Ergebnisses der Subtraktion.
Overflow ist der Überlauf bei der Addition. mit der Addition ist wohl die
Subtraktion gemeint,
denn diese wird ja auf eine Addition mit zweier Komplement abgebildet.
hmmm und wenn beides gleich ist, dann ist es größer?
Also wenn dann sign =1 ist, dann ist ja das Vorzeichen negativ, also das
Ergebnis negativ.
Und immer wenn das Ergebnis negativ ist, dann hat ein Überlauf statt
gefunden ??
Ich steh aufm Schlauch …
bei JLE hab ich vielleicht sogar einen Fehler gefunden:
es soll kleiner gleich sein.
dafür steht da sign!= overflow, das steht für kleiner.
dann steht noch da ODER Zero=0.
Wenn Zero=0 ist, dann sind sie aber UNGLEICH!
Und es ist eine ODER Verknüpfung,
das würde bedeuten sobald die Zahlen ungleich sind, sind sie kleiner
gleich
ABER DAS IST FALSCH!!!
Hier muss meiner Meinung nach stehen
Sign != Overflow | Zero =1
Denn wenn Zero=1 ist, war das Ergebnis 0 (Verwirrend ich weiß), dann sind
die Zahlen gleich,
und dann ist es automatisch auch kleiner gleich.
Das mit dem Carry irritiert mich auch noch etwas, aber belasse es mal fürs erste dabei.
Was meint ihr ?