2012-11-17 14 views
5

Gibt es Montageanweisungen, um die "OF" - und "TF" -Flags im Intels 8086 16-Bit Flags-Register direkt zu setzen oder zu löschen? Wenn nicht, welchen Pseudocode sollten wir verwenden?Montageanweisung zum Setzen, Löschen von OF- und TF-Flags

+0

Haben Sie die [Intel-Handbücher] (http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html) gelesen, bevor Sie diese Frage gestellt haben? – DCoder

+0

http://en.wikipedia.org/wiki/Trap_flag –

+0

@DCoder haben Sie jemals einen Pseudo-Code für solche Dinge in Intel-Handbüchern gefunden, bevor Sie einen Kommentar abgeben?! –

Antwort

6

http://en.wikipedia.org/wiki/Trap_flag

Die 8086 hat keine Anweisung direkt eingestellt oder den Trap-Flag zurückgesetzt. Diese Operationen werden ausgeführt, indem das Flag-Register auf den Stapel geschoben wird, das Trap-Flag-Bit auf das geändert wird, was der Programmierer wünscht, und dann das Flag-Register wieder vom Stapel entfernt wird. Die Anweisungen, die Trap-Flag zu setzen, sind:

PUSHF ; Push flags on stack 
MOV BP,SP ; Copy SP to BP for use as index 
OR WORD PTR[BP+0],0100H ; Set TF flag 
POPF ; Restore flag Register 

die Trap-Flag zurückzusetzen, einfach ersetzen die OR-Befehl in der vorhergehenden Sequenz mit der Anweisung:

AND WORD PTR[BP+0],0FEFFH 

einzustellen und löschen Sie das Überlauf-Flag, können Sie das gleiche tun, ersetzen 0100H mit 0800H und 0FEFFh mit 0F7FFh.

Achten Sie darauf, was TF tut, bevor Sie es einstellen. Es ist eine Falle.

+1

Was ist der Grund dafür, 'mov bp, sp' zu machen und * bp * register zu verwenden, wenn man' 'oder word [sp], 0100h' nur mit * sp * register benutzen kann? – golem

+1

Da 8086 im 16-Bit-Real-Modus läuft, gibt es keine Möglichkeit, word [sp] zu machen, da die einzigen möglichen Basisregister in einem Speicheroperanden BX, BP, SI und DI sind. – hlide