was ist der diffrence zwischen null-flag und carry-flag ?
Was ist der Unterschied zwischen dem zero-flag und carry-flag?
Für zero-flag hieß es
mov ax , 0FFFF ;
inc ax ; AX= 0 , ZF=1
Für carry-flag hieß es
mov al , 0FFh
add al , 1 ; CF=1,AL=00
Den Wert AL
ist gleich null, also warum ist das zero-flag nicht gesetzt 1?
InformationsquelleAutor Osama Al-far | 2012-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie Sie verstehen, was die flags bedeuten/machen, nur für den Fall:
das zero-flag ist ganz einfach, wenn das Ergebnis der operation ist eine null das zero-flag wird gesetzt, anderenfalls wird es klar sein,
Das carry-flag wird verwendet, eine Reihe von Möglichkeiten, aber in diesem Fall mit einem Vorgang hinzufügen, es ist das carry-out-bit, unsigned overflow.
Sagen, Sie waren das hinzufügen der zwei dezimale zahlen 92 und 5 erhalten Sie 97, kein problem, wenn Sie hinzufügen, 92 und 12, Sie erhalten 104, aber was, wenn Sie hatte eine Dezimalzahl computer oder hatte einen kleinen Fetzen Papier, und Sie konnte nur halten Sie zwei Ziffern mit einem Ergebnis, dann ist die Antwort 04 nicht 104, die Antwort als falsch je nachdem, was Sie wollen zu tun. Als Sie Taten, dass Mathematik Sie waren sich selbst sagen 2+2 = 4, dann ist 9 + 1 = 0, tragen 1. das ist, wo tragen kommt, die Sie tragen, in die nächste Spalte, aber der Prozessor hat eine begrenzte Anzahl von Spalten.
Das hinzufügen von Logik (sub verwendet eine add) nicht wissen, oder kümmern uns um unterzeichnet (zweier-Komplement) vs zahlen ohne Vorzeichen (das ist die Schönheit der zweier-Komplement), füttern Sie den Operanden in der gleichen Logik, dass Sie die gleiche Antwort erhalten. Wo Sie sich unterscheiden, ist in den überlauf, unsigned überlauf ist das carry-out-bit. Signed-überlauf, wenn der Prozessor hat es (ich spreche jetzt allgemein, nicht speziell auf einen bestimmten Prozessor) erkennt, wenn das Ergebnis nicht genügend Informationen enthalten, um zu speichern ist die Antwort. 0x80 + 0x80 = 0x00 zum Beispiel. unsigned 128 + 128 und Sie erhalten eine signierte überlauf, unsigniert es ist -128 + das Ergebnis ist -128 -256. Sie haben addiert zwei negative zahlen, minus plus minus gleich minus, aber Sie endete mit 0x00, was eine positive Zahl, overflow. so 0x80 + 0x80 für 8-bit-Systeme unterstützen beide überläufe geben sowohl überläufe (plus die zero-flag als bonus).
Egal, was der Befehlssatz, wenn Sie mit den flags, die Sie brauchen, zu suchen und zu oder merken Sie sich die flags beeinflusst durch die einzelnen Anweisungen (Sie verwenden, um Markierungen zu setzen). Jeder Befehlssatz hat verschiedene flag-Regeln, nicht jedes alu Unterricht wirkt sich auf alle Fahnen, etc. Fälle, wo Sie eine inc-Anweisung getrennt von add mit (kleinen) unverzügliche Belehrung, welche könnte verwendet werden, um eine inc. es ist im Grund, dass der Designer hätte einen Einfluss auf flags, und die anderen nicht. Für ein Fall wie dieser vor allem, wo Sie diese aufteilen Definitionen der gleichen register EAX, AX, AH, AL, wo Sie tun können, Operationen auf Brüche der register-tun Sie deklarieren eine AH-Betrieb zu null, auch wenn der rest des Registers ist nicht null? Ist es eine definition basierend auf dem Umfang der operation oder das gesamte register außerhalb des Abschnitts, den Sie betrieben? Jeder hier vielleicht die Antwort wissen, aber sobald Sie sah register-Definitionen, wenn Sie zuerst anfangen zu lernen, dieser Prozessor hätte ein Erster Gedanke. Und bis Sie Aussehen die Antwort, und es auswendig zu lernen, sollten Sie schauen Sie jedes mal, wenn Sie erhalten möchten flags aus einer Anweisung. Designer absichtlich Vorgänge in diesem dont mess with flags zu speichern, auf Anweisungen benötigt, um einen Vorgang auszuführen. Einige können nicht etwas erzwingen, werden die Flaggen immer die Anleitung vor der Filiale an der Entscheidung, einige (mips) der Branche selbst ist der alu-operation und die Entscheidung (keine flags).
Die Antwort auf Ihre Frage schauen Sie in die Dokumentation, machen Sie eine Gewohnheit, es bis. Dont davon ausgehen, dass alle alu-Operationen wirken sich auf alle flags, schauen Sie es sich für den Unterricht und Register in Frage. Die Antwort auf die Frage "warum" ist, weil das ist, was Sie fühlten, wie zu tun, es ist, was es ist, es sei denn, Sie sind in einem team die Konzeption eines neuen Prozessors, als Programmierer, Sie bekommen, was Sie bekommen, mit ihm zu arbeiten...Deine Frage selbst führt zu Erwartungen, die von unterschiedlichen Antworten, Sie wechseln von 16 bit auf 8 bit-Operationen, und Sie wechseln von einer add, inc, entweder eine oder beide gilt perfekt für die Designer ändern Sie die Definitionen für die, von Ihnen erwarten.
InformationsquelleAutor old_timer
Nein, das null-flag wird gesetzt, in beiden Fällen. Der Beweis ist in den pudding:
Der INC-Instruktion keinen Einfluss auf das carry-flag. Bisschen eine Macke in der x86-Befehlssatz, aber fast sicher absichtlich getan, um zu ermöglichen, Inkrementieren, einen Zeiger oder index bei der Berechnung einer beliebigen Präzision zusätzlich mit ADC.
InformationsquelleAutor Hans Passant