2012-11-17 9 views
5

Czy są jakieś instrukcje dotyczące montażu, które pozwolą nam bezpośrednio "ustawić" lub "wyczyścić" flagi "OF" i "TF" w 16-bitowym rejestrze Intel 8086 firmy Intel? Jeśli nie, to jakiego pseudo kodu powinniśmy użyć?Instrukcja montażu ustawienia, czyszczenia flag OF i TF

+0

Czy przeczytałeś [Instrukcje Intel] (http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html) zanim zadasz to pytanie? – DCoder

+0

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

+0

@DCoder czy kiedykolwiek znalazłeś pseudo kod na coś takiego w podręcznikach Intela przed opublikowaniem komentarza?! –

Odpowiedz

6

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

8086 ma dyspozycję bezpośrednio ustawić lub wyzerować flagę pułapkę. Operacje te są wykonywane poprzez naciśnięcie rejestru flag na stosie, zmianę bitu flagi pułapki na to, co programista chce, a następnie ponowne otwarcie rejestru flag z powrotem ze stosu. Instrukcje, aby ustawić flagę pułapki są:

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 

Aby wyzerować flagę pułapki, wystarczy wymienić lub instrukcja w poprzednim sekwencji z instrukcją:

AND WORD PTR[BP+0],0FEFFH 

Aby ustawić i wyczyść flagę przepełnienia, można zrobić to samo, zastępując 0100H z 0800H i 0FEFFh z 0F7FFh.

Pamiętaj, aby wiedzieć, co robi TF przed ustawieniem. To pułapka.

+1

Jaki jest powód robienia 'mov bp, sp' i korzystania z * bp * rejestru, kiedy możesz po prostu zrobić' lub słowo [sp], 0100h' używając wyłącznie * sp * register? – golem

+1

ponieważ 8086 działa w 16-bitowym trybie rzeczywistym, nie ma takiego sposobu na wprowadzenie słowa [sp], ponieważ jedynymi możliwymi rejestrami bazowymi w operand pamięci są BX, BP, SI i DI. – hlide