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

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

PUSHA


(PUSH All general registers onto stack)

Размещение всех регистров общего назначения в стеке

 

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

pusha 

Назначение: размещение в стеке регистров общего назначения в следующей последовательности: ax, cx, dx, bx, sp, bp, si, di.

Синтаксис

Алгоритм работы:
  • уменьшить значение указателя стека esp/sp на 32/16 (в зависимости от значения атрибута размера адреса — use16 или use32);
  • включить в стек последовательно значения регистров общего назначения ax, cx, dx, bx, sp, bp, si, di.

Содержимое di при этом будет на вершине стека. В стек помещается содержимое sp по состоянию до выполнения команды.

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

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

Применение:

Команда pusha используется совместно с командой popa для сохранения и восстановления всех регистров общего назначения. Эти команды удобно использовать при работе с процедурами, программами обработки прерываний, а также в других случаях для сохранения и восстановления регистров общего назначения как части контекста некоторого вычислительного процесса.

my_proc proc    near

        pusha

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

;содержимое регистров общего назначения

...

        popa

        ret

        endp

        

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

PUSHAD


(PUSH All general Double word registers onto stack)

Размещение всех регистров общего назначения в стеке

 

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

pushad 

Назначение: размещение в стеке регистров общего назначения в следующей последовательности: eax, ecx, edx, ebx, esp, ebp, esi, edi.

Синтаксис

Алгоритм работы:
  • уменьшить значение указателя стека esp на 32;
  • включить в стек последовательно значения регистров общего назначения eax, ecx, edx, ebx, esp, ebp, esi, edi. Содержимое edi при этом будет на вершине стека. Содержимое esp включается по состоянию на момент, предшествовавший выполнению данной команды.

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

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

Применение:

Команда pushad используется совместно с командой popad для сохранения и восстановления всех регистров общего назначения. Эти команды используются аналогично командам popa и pusha.

.386

my_proc proc    near

        pushad

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

;содержимое регистров общего назначения

...

        popad

        ret

        endp

        

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

PUSHF


(PUSH Flags register onto stack)

Размещение регистра флагов в стеке

 

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

pushf 

Назначение: размещение в вершине стека (ss:sp) содержимого регистра флагов flags.

Синтаксис

Алгоритм работы:
  • уменьшить значение указателя стека sp на 2;
  • поместить в вершину стека содержимое регистра flags.

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

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

Применение:

Команда pushf может использоваться для получения содержимого регистра флагов. Как известно, прямой доступ к регистру флагов невозможен, поэтому данная команда является одной из немногих команд, позволяющих получить доступ к регистру флагов как к содержимому обычного регистра. Обратное действие, то есть восстановление — возможно измененного слова — в регистр флагов, осуществляется командой popf. Эта команда может использоваться в программах обработки прерываний и в других случаях, когда необходимо сохранить локальный контекст процесса вычисления.

;извлечь значение регистра flags и изменить

;значение флага cf на обратное

        pushf

        pop     ax

        xor     ax,01h

        push    ax

        popf

        

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