Welche Werte kann das carry-flag halten, und wie Sie seinen status überprüfen, in x86 Assembler?
-
Welche Werte kann das carry-flag halten? Ist es nur 0x00 und 0x01 (boolean) oder ist es 16 (oder 32/64) bit wie der rest der CPU-Register?
-
Wie kann ich seinen status zu überprüfen? Kann ich es einfach verwenden, wie ein normaler CPU-register wie
cmp cf, 0x00
dannjg <jump destination>
? -
Schreibe ich ein mini-OS. Ist es gute Praxis, um es für meine eigenen Zwecke, oder sollte es vorbehalten sein, für exklusive schreib-Berechtigungen für die CPU, und alles, was ich Tue, ist Lesen?
- Was passiert ist, die CPU-Handbüchern und Montage tutorials? Haben Sie auf mysteriöse Weise verschwunden? Oder ist die google-web-Suche in den Urlaub? Im ernst, man könnte die Antwort finden Sie ganz einfach selber.
- Ich habe 30 Minuten Suche, und ich kann nicht finden, alles, was darüber hinaus ist es Existenz, und das war auf Wikipedia über int 13h.
- Diesem Wiki-Artikel führt zu dieses offizielle Dokument, das die Intel 64-und IA-32 Architectures Software Developer ' s Manual, vol 1, wo in Abschnitt
3.4.3 EFLAGS
Sie erhalten genügend Informationen, um Ihre Frage zu beantworten oder nicht genug Anhaltspunkte für weitere Suche und das Lesen in das Dokument. - Ok, vielen Dank für zeigt mir, wie man dort bekommen. Ich denke ich bekomme ein wenig frustriert mit Google, wenn meine Antwort ist nicht eines der unmittelbaren Ergebnisse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist eine Flagge, es kann nur true oder false (technisch 1 oder 0, aber effektiv die Wahrheit, die Werte wie gezeigt).
In Bezug auf die Verwendung von es-Nein, musst du nicht vergleichen, es zu etwas, und dann verwenden Sie
jg
. Es ist an der gleichen Ebene der Abstraktion als andere flags, so können Sie einfach verwenden:Ist es automatisch durch bestimmte Anweisungen, so dass, zum Beispiel, fügen Sie zwei Werte erkennen und tragen, können Sie etwas wie:
- Und zwar meistens, indem Sie die Anweisungen, können Sie es auch manuell tun, mit
stc
(set),clc
(klar) undcmc
(Ergänzung). Zum Beispiel, ist es oft nützlich, um es zu deaktivieren, bevor die hand, wenn Sie die Eingabe einer Schleife, wo der Wert wird vorgetragen, um die nächste iteration.push
undpopf
Anweisungen.lahf
/sahf
(load / store AH von/bis-flags). Ein Intel uop mit 1-Zyklus-Latenz, vs.pushf
unter 3, undpopf
unter 9 uops, mit one-pro-18-Zyklen Durchsatz. Ebenso langsam auf AMD.es war dieses kleine Buch, das kam einmal mit borland turbo assembler, dass alle x86-Anweisungen, zusammen mit der Anzahl der cpu-Zyklen und Fahnen betroffenen für jedes Modell der Prozessor individuell... ich schlage vor, Sie finden eines dieser Bücher und Lesen...
2: Nein, Sie können nicht verwenden, cmp etc. direkt auf die Fahnen zu REGISTRIEREN, da es nicht den Speicher, sondern ein register in der cpu, Sie können jedoch ein paar der benannten Ergebnisse oder verschieben Sie die ganze Sache zunächst auf den Stapel und dann in den ram oder den anderen Weg, um mit den Anweisungen unten,
CLC (clear (0) carry-bit)
STC (set carry-flag auf 1)
JC (branch if carry set)
JNC (verzweigen, wenn carry nicht gesetzt)
PUSHF pop (flags auf stack)
POPF (verschieben neueste Eintrag auf den stack in register flags)
wenn ich mich Recht erinnere... wahrscheinlich gibt es einige mehr Möglichkeiten, Dinge zu tun.