Pushfd und Pushad: Was ist der Punkt?
Ich weiß, dass pushad drückt alle 32-bit-Register auf dem stack, sondern nur registrieren, dass die enden, die oben auf dem stack gespeichert werden, ist EDI. Flag-Werte sind nicht betroffen, also was ist der Punkt, der mit pushad? Außerdem weiß ich, dass pushfd drückt alle flag-Werte im double-format. Also, wenn flag-Werte sind in der Regel nur 0 oder 1 wie funktioniert die pushfd operation push einen Wert wie 00000A46 dem stack?
- "die nur registrieren, dass die enden, die oben auf dem stack gespeichert werden, ist EDI" - Wie kam es zu dieser Schlussfolgerung?
- Nicht sicher, wo Sie bekommen, dass. Sie verwenden pusha und pushf in 16-bit-code, pushad und pushfd in 32-bit-code. A46 hat 12 bit.
- Diese Frage macht keinen Sinn. Die EDI-bit ist nicht wahr, bitte geben Sie eine Erklärung von tha Teil. Flags sind nicht betroffen, was? Was ist ein "double-format"? Sprechen Sie über flags oder EFLAGS-register? Auch sind wir in der 32-oder 16-bit-code? Etc.
- EDI ist das Letzte register geladen, auf den Stapel und wenn Sie diese in x86-assembly an alle, es ist nur der Wert auf dem stack gespeichert werden.
- Ihr Missverständnis rührt aus der Tatsache, dass
pusha
verringertesp
zwischen jedem schreiben auf den stack, damit alle die geschoben Register am Ende auf unterschiedliche Adressen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Die PUSHAD Unterricht immer schiebt alle 8 general purpose Register auf den stack. Eine einzelne PUSHAD Anweisung ist äquivalent zu schreiben:
POPAD knallt die Werte wieder vom stack in umgekehrter Reihenfolge, also der Wiederherstellung aller register Werte.
PUSHAD und POPAD sind nützlich für das durchführen einer einfachen speichern und wiederherstellen von die general purpose Register, ohne PUSH-und POP-jeder einzelne register in der Reihe.
Ähnlich, PUSHFD und POPFD werden verwendet, um zu speichern und das wiederherstellen des EFLAGS-register. Obwohl nicht wirklich, dass viel in die gewöhnlichen Programme, die Anweisungen sind nützlich, wenn (zum Beispiel) ein Prozess-Kontextwechsel durchgeführt wird (oder überall sonst, wo der Wert des flags-Registers wiederhergestellt werden müssen).
Es ist nur, wie die Daten interpretiert werden. Das EFLAGS-register ist eine Gruppe von 32 bits. Teilt man die bits in 8 Gruppen von 4 (8*4=32), können Sie die Zuordnung der einzelnen 4-bit-chunk eine hexadezimale Zeichen (0..9,A-F). Ebenso können Sie konvertieren die hexadezimalen Werte wieder zu einem Satz der bits:
00000A46 = 0000(0) 0000(0) 0000(0) 0000(0) 0000(0) 1010(EIN) 0100(4) 0110(6)
Diese sind die Werte der bits, die gespeichert wurden, in das EFLAGS-register.