2012-11-17 32 views
5

Esistono istruzioni di assemblaggio che ci consentono di "impostare" o "cancellare" correttamente i flag "OF" e "TF" nel registro Flags Intel 8086 a 16 bit? In caso contrario, quale pseudo-codice dovremmo usare?Istruzioni di montaggio per l'impostazione, cancellazione di flag OF e TF

+0

Hai letto i [Intel Manuals] (http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html) prima di fare questa domanda? – DCoder

+0

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

+0

@DCoder hai mai trovato uno pseudo-codice per tale cosa nei manuali Intel prima di pubblicare un commento ?! –

risposta

6

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

Il 8086 non ha istruzioni per impostare o reimpostare il flag trappola direttamente. Queste operazioni vengono eseguite spingendo il registro flag sullo stack, modificando il bit del flag di trap su ciò che il programmatore vuole che sia, e quindi facendo scattare nuovamente il registro flag fuori dallo stack. Le istruzioni per impostare il flag trap sono:

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 

Per ripristinare il flag trappola, è sufficiente sostituire l'OR istruzioni nella sequenza precedente con l'istruzione:

AND WORD PTR[BP+0],0FEFFH 

Per impostare e deselezionare il flag di overflow, è possibile fare lo stesso, sostituendo 0100H con 0800H e 0FEFFh con 0F7FFh.

Assicurarsi di sapere cosa fa TF prima di impostarlo. È una trappola.

+1

Qual è la ragione per fare 'mov bp, sp' e usando * bp * register quando puoi semplicemente fare 'or word [sp], 0100h' usando esclusivamente * sp * register? – golem

+1

perché 8086 è in esecuzione in modalità reale a 16 bit, non esiste un modo tale per rendere word [sp] come gli unici registri di base possibili in un operando di memoria sono BX, BP, SI e DI. – hlide