Конспект лекций Системное программирование (семестр 2) Возле названия каждой лекции написано число пар, в течение которых она будет читаться (+ ср обозначает

Вид материалаКонспект
Схема команды
См. также
Схема команды
Состояние флагов после выполнения команды
См. также
Подобный материал:
1   ...   27   28   29   30   31   32   33   34   ...   57

POPFD


(POP eFlags Double word register from the stack)

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

 

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

popfd 

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

Синтаксис

Алгоритм работы:
  • извлечь из вершины стека двойное слово и поместить его в регистр eflags;
  • увеличить значение указателя стека esp на 4.

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

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