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
risposta
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.
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
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
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
http://en.wikipedia.org/wiki/Trap_flag –
@DCoder hai mai trovato uno pseudo-codice per tale cosa nei manuali Intel prima di pubblicare un commento ?! –