Об ассемблере



страница29/52
Дата14.08.2018
Размер3.59 Mb.
#43964
ТипЛекция
1   ...   25   26   27   28   29   30   31   32   ...   52

POPFD


(POP eFlags Double word register from the stack)

Извлечение расширенного регистра флагов из стека

 


Схема команды: 

popfd 

Назначение: извлечение из стека двойного слова и восстановление его в регистр флагов eflags.

Синтаксис

Алгоритм работы:

Состояние флагов после выполнения команды:

17

16

14

1312

11

10

09

08

07

06

04

02

00

VM

RF

NT

IOPL

OF

DF

IF

TF

SF

ZF

AF

PF

CF

0

r

r

r

r

r

r

r

r

r

r

r

r

Применение:

Команда popfd по принципу работы является обратной командой команде pushfd и используется для восстановления из стека содержимого регистра флагов eflags. Необходимо отметить, что команда popfd не влияет на состояние флагов vm и rf.



.386

;установить значение регистра eflags в 03h

        mov     eax,3h

        push    eax

        popfd   eax     ;установить новое значение eflags

        


См. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popa, popad, popf, push, pusha, pushad, pushf, pushfd

PUSH


(PUSH operand onto stack)

Размещение операнда в стеке

 


Схема команды: 

push источник 

Назначение: размещение содержимого операнда источник в стеке.

Синтаксис

Алгоритм работы:

  • уменьшить значение указателя стека esp/sp на 4/2 (в зависимости от значения атрибута размера адреса — use16 или use32);

  • записать источник в вершину стека (адресуемую парой ss:esp/sp).

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

Команда push используется совместно с командой pop для записи значений в стек и извлечения их из стека. Размер записываемых значений — слово или двойное слово. Также в стек можно записывать непосредственные значения. Заметьте, что в отличие от команды pop в стек можно включать значение сегментного регистра cs. Другой интересный момент связан с регистром sp. Команда push esp/sp записывает в стек значение esp/sp по состоянию до выдачи этой команды. В микропроцессоре i8086 по этой команде записывалось скорректированное значение sp. При записи в стек 8-битных значений для них все равно выделяется слово или двойное слово (в зависимости от use16 или use32).



my_proc proc    near

        push    ax

        push    bx

;тело процедуры, в которой изменяется содержимое

;регистров ax и bx

...


        pop     bx

        pop     ax

        ret

        endp

        


См. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popa, popad, popf, popfd, pusha, pushad, pushf, pushfd




Поделитесь с Вашими друзьями:
1   ...   25   26   27   28   29   30   31   32   ...   52




База данных защищена авторским правом ©vossta.ru 2022
обратиться к администрации

    Главная страница