Interrupts, Anweisungszeiger und Anweisungswarteschlange in 8086

Angenommen, eine externe Interrupt-Anforderung wird an 8086 gesendet. Der Prozessor verarbeitet den Interrupt, nachdem der aktuelle Befehl ausgeführt wurde (falls vorhanden). Vor der Behandlung des Interrupts wird auch der Status des Programms gespeichert (PSW-Flag, Register usw.), indem Daten auf das Stapelsegment geschoben werden.

In den meisten Tutorials / Dokumenten wird nun beschrieben, dass der Befehlszeiger auch auf das Stapelsegment verschoben wird. Dies ist in Ordnung, da er auf das nächste Befehlsbyte im Codesegment zeigt (kurz bevor eine Unterbrechungsanforderung gestellt wurde).

Aber was passiert mit der Anweisungswarteschlange? Wird es auch auf das Stack-Segment geschoben, wenn eine Interrupt-Anfrage bearbeitet wird? Oder ist es, dass sein Inhalt auf Null gelöscht wird? Sollte in diesem Fall der Befehlszeiger nicht dekrementiert werden, damit er auf die vorherigen Befehle im Codesegment (nachdem der Interrupt ausgeführt wurde) zurückverweisen kann?

Hier,Nach Interruptanforderung heißt eigentlichNach Interrupt-Anfrage wurde zugestellt. Dieses Diagramm zeigt, dass die Anweisungen vor dem Eintreffen der Interrupt-Anforderung zwischengespeichert wurden.wobei IP auf die Adresse des nächsten Befehlsbytes im CS-Speichersegment zeigt. Um der Unterbrechungsanforderung zu dienen, wird der Inhalt der Register (inkl. IP und Flags) auf das Stapelsegment aufgeschoben werden. Nachdem die Anfrage zugestellt wurde, wird der vorherige Inhalt zurückgeladen.IP zeigt immer noch auf den Speicherort des 7. Bytes (of instruction), wobei die Warteschlange (cache) leer ist. Das ist, woran ich zweifle.Wird die IP dekrementiert, um auf i1 zurückzukehren?? Zweitens müssen wir die IP-Adresse manuell verarbeiten (z. B. bei einem Interrupt auf den Stack legen) oder übernimmt die Interrupt-Service-Routine dies für uns? Bitte, jede Hilfe wird geschätzt, danke!

Hinweis:Anweisungswarteschlange - Die 8086-Architektur verfügt über eine 6-Byte-Vorauslesebefehlspipeline. Während die Ausführungseinheit den aktuellen Befehl ausführt, liest die Busschnittstelleneinheit im Voraus bis zu sechs Byte Opcodes aus dem Speicher.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage