Das Problem ist buchstäblich die Fehlermeldung vom Assembler zur Verfügung gestellt: „ungültige Kombination von Opcode und Operanden“. Die POP
Anweisung hat keine POP r8
Kodierung möglich. Mit anderen Worten, können Sie nicht einen 8-Bit-Wert vom Stapel pop
Der nächste Äquivalent pop ax
wäre, die eine POP r16
Codierung verwendet einen 16-Bit-Wert vom Stapel in die ax
Register Pop. Dies ist jedoch nicht genau dasselbe wie Ihr Code, da er sowohl die untere 8-Bit-Hälfte (al
) als auch die obere 8-Bit-Hälfte (ah
) des 16-Bit-ax
-Registers modifiziert.
Eine andere Alternative ist, den Wert direkt vom Stapel zu laden, indem man etwa mov al, BYTE PTR [(r/e)sp]
verwendet. Da der Stapelzeiger nicht verändert wird, müssen Sie ihn manuell anpassen.
Beim nächsten Mal geben Sie bitte auch an, was Ihre Zielplattform ist. Dies ist wichtig, da der 16-Bit-Real-Modus im Gegensatz zum 32-Bit- und 64-Bit-Protected-Modus sehr eingeschränkte Möglichkeiten zur Adressierung von Modi bietet. Wenn Sie nicht angeben, auf welchen Modus Sie ausgerichtet sind, funktionieren die Antworten möglicherweise nicht für Sie. Wie hier, ich habe keine Ahnung, ob die mov
Anweisung rsp
(64-Bit), esp
(32-Bit) oder sp
(16-Bit) verwenden sollte.
Haben Sie das Handbuch gelesen? Nicht einmal der bescheidene 8086 (von "al" angenommen) kann ein 8-Bit-Register "drücken" oder "knallen". –
Ich würde vorschlagen, Sie googeln für "8086 Befehlssatz", und vor allem für "addressing Mods", und versuchen zu verstehen, was all diese 'r32, r/m32' etc Sachen bedeutet – Tommylee2k