Ich bin gekommen, um zu erfahren, dass Sie ein Byte nicht direkt auf den Intel Pentium-Stack schieben können, kann mir das bitte jemand erklären?Warum ist es nicht möglich, ein Byte auf einen Stapel auf Pentium IA-32 zu schieben?
Der Grund, der mir gegeben wurde, ist, weil das ESP-Register wortadressierbar ist (oder, das ist die Annahme in unserem Modell) und es muss eine "gerade Adresse" sein. Ich hätte angenommen, dass die Dekrementierung des Wertes einer 32-Bit-Binärzahl nicht mit der Ausrichtung des Registers verwechselt werden würde, aber anscheinend verstehe ich nicht genug.
Ich habe einige NASM-Tests versucht und komme, dass, wenn ich eine Variable deklariere (Bite db 123) und es auf den Stapel schieben, ESP um 4 dekrementiert wird (anzeigend, dass es 32-Bits geschoben?). Aber "Push-Byte-Biss" (sorry für meine Wahl der Variablennamen) wird in einer Art Fehler führen:
test.asm: 10: Fehler: Nicht unterstützen Nicht-32-Bit-ELF Verlagerung
Jedes Wort von Weisheit würde in dieser unruhigen Zeit sehr geschätzt werden. Ich bin Student im ersten Studienjahr so leid für meine Naivität in diesem Fall.
Sehr informativ, aber leider immer noch über dem, was ich mit meinem derzeitigen Wissen erfassen kann. –
@Tim - verständlich. Vielleicht noch eine kurze Lektüre wert. –
Warte, warte. Jeder Speicherplatz ist 32 Bit breit. Wenn Sie also einen Wert drücken, wird der Stapel um 4 Byte dekrementiert, weil 4 * 8 32 Bit ist und wenn er um 2 dekrementiert wird, würde er versuchen, einen nicht ausgerichteten Wert zu erreichen lesen, das Universum implodieren? Ist das richtig? Wenn ja, bekommst du die Punkte, dass PDF super war (2.). –