Описание системы команд (1110646), страница 11
Текст из файла (страница 11)
Заметим, что недопустимо восстановление значения всегментный регистр cs.my_proc procnearpushaxpushbx;тело процедуры, в которой изменяетсясодержимое;регистров ax и bx...popbxpopaxretendpСм. также: уроки 7, 10, 14, 15, 16, 17 и команды popa, popad, popf, popfd, push, pusha,pushad, pushf, pushfdPOPA(POP All general registers from the stack)Извлечение всех регистров общего назначения из стекаpopaСхема команды:Назначение: извлечение из стека регистров общего назначения di, si, bp, sp, bx, dx, cx, ax.СинтаксисАлгоритм работы:••извлечь из стека последовательно значения и загрузить ими регистры общегоназначения di, si, bp, sp, bx, dx, cx, ax.
Содержимое di восстанавливается первым.Содержимое sp извлекается, но не восстанавливается;увеличить значение указателя стека esp/sp на 16.Состояние флагов после выполнения команды:выполнение команды не влияет на флагиПрименение:Команда popa по принципу работы является обратной команде pusha и используется длявосстановления содержимого всех регистров общего назначения значениями из стека. Этукоманду можно использовать в процедурах и программах обработки прерываний длявосстановления регистров общего назначения прерванной программы..386my_proc procnearpusha;тело процедуры, в которой изменяется;содержимое регистров общего назначения...poparetendpСм. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popad, popf, popfd, push, pusha,pushad, pushf, pushfdPOPAD(POP All general Double word registers from the stack)Извлечение всех 32-разрядных регистров общего назначения из стекаpopadСхема команды:Назначение: извлечение из стека регистров общего назначения edi, esi, ebp, esp, ebx, edx,ecx, eax.СинтаксисАлгоритм работы:••извлечь из стека последовательно значения и загрузить ими 32-разрядные регистрыобщего назначения edi, esi, ebp, esp, ebx, edx, ecx, eax.
Содержимое ediвосстанавливается первым. Содержимое esp извлекается но не восстанавливается;увеличить значение указателя стека esp на 32.Состояние флагов после выполнения команды:выполнение команды не влияет на флагиПрименение:Команда popad по принципу работы является обратной команде pushad и используется длявосстановления всех 32-разрядных регистров общего назначения.
Эту команду можноиспользовать в процедурах и программах обработки прерываний для восстановлениярегистров общего назначения прерванной программы..386my_proc procnearpushad;тело процедуры, в которой изменяется;содержимое регистров общего назначения...popadretendpСм. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popa, popf, popfd, push, pusha,pushad, pushf, pushfdPOPF(POP Flags register from the stack)Извлечение регистра флагов из стекаpopfСхема команды:Назначение: извлечение из стека слова и восстановление его в регистр флагов flags.СинтаксисАлгоритм работы:••извлечь из вершины стека слово и поместить его в регистр flags;увеличить значение указателя стека esp на 2.Состояние флагов после выполнения команды:14 1312 11 10 09 08 07 06 04 02 00NT IOPL OF DF IF TF SF ZF AF PF CFrrrrrrrrrrrПрименение:Команда popf по принципу работы является обратной команде pushf и используется длявосстановления из стека содержимого регистра флагов eflags. Возможным вариантомиспользования этой команды являются программы обработки прерываний или другиеслучаи, в которых необходимо сохранять некоторый локальный контекст процессавычисления.
Из-за того, что регистр eflags/flags непосредственно недоступен, командаpopf является одной из немногих возможностей влияния на его содержимое.;установить значение регистра flags в03hmovax,3hpushaxpopfСм. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popa, popad, popfd, push, pusha,pushad, pushf, pushfdPOPFD(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 00VM RF NT IOPL OF DF IF TF SF ZF AF PF CF0rrrrrrrrrrrrПрименение:Команда popfd по принципу работы является обратной командой команде pushfd ииспользуется для восстановления из стека содержимого регистра флагов eflags.Необходимо отметить, что команда popfd не влияет на состояние флагов vm и rf..386;установить значение регистра eflags в03hmoveax,3hpusheaxpopfdeax;установитьновое значение eflagsСм.
также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popa, popad, popf, push, pusha,pushad, pushf, pushfdPUSH(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 procnearpushaxpushbx;тело процедуры, в которой изменяетсясодержимое;регистров ax и bx...popbxpopaxretendpСм. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popa, popad, popf, popfd, pusha,pushad, pushf, pushfdPUSHA(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 procnearpusha;тело процедуры, в которой изменяется;содержимое регистров общего назначения...poparetendpСм.
также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popad, popf, popfd, push, popa,pushad, pushf, pushfdPUSHAD(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..386my_proc procnearpushad;тело процедуры, в которой изменяется;содержимое регистров общего назначения...popadretendpСм. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popa, popf, popfd, push, pusha, popad,pushf, pushfdPUSHF(PUSH Flags register onto stack)Размещение регистра флагов в стекеpushfСхема команды:Назначение: размещение в вершине стека (ss:sp) содержимого регистра флагов flags.СинтаксисАлгоритм работы:••уменьшить значение указателя стека sp на 2;поместить в вершину стека содержимое регистра flags.Состояние флагов после выполнения команды:выполнение команды не влияет на флагиПрименение:Команда pushf может использоваться для получения содержимого регистра флагов.