Опешите состав и назначение команд работы со стеком

PUSH (PUSH operand onto stack) - Размещение операнда в стеке.

Формат команды:
push источник

Ист может быть – регистр, память, непосредственное значение.

Размещает содержимое операнда в стеке. При этом уменьшает значение указателя стека esp/sp на 4/2 (в зависимости от значения атрибута размера адреса - use16 или use32); и записывает источник в вершину стека (адресуемую парой ss:esp/sp). Команда push используется совместно с командой pop для записи значений в стек и извлечения их из стека.

POP (POP operand from the stack) - Извлечение операнда из стека.

Формат команды:
pop приемник

Осуществляет извлечение слова или двойного слова из стека. Команда применяется для восстановления содержимого из вершины стека в регистр, ячейку памяти или сегментный регистр. Но недопустимо восстановление значения в сегментный регистр cs.

PUSHA (PUSH All general registers onto stack) Размещение всех регистров общего назначения в стеке

Команда pusha используется совместно с командой popa для сохранения и восстановления всех регистров общего назначения(ax, cx, dx, bx, sp, bp, si, di.). Эти команды удобно использовать при работе с процедурами, программами обработки прерываний, а также в других случаях для сохранения и восстановления регистров общего назначения как части контекста некоторого вычислительного процесса.

POPA (POP All general registers from the stack) Извлечение всех регистров общего назначения из стека

Команда popa явл обратной команде pusha и используется для восстановления содержимого всех регистров общего(di, si, bp, sp, bx, dx, cx, ax) назначения значениями из стека. Эту команду можно использовать в процедурах и программах обработки прерываний для восстановления регистров общего назначения прерванной программы.

PUSHAD (PUSH All general Double word registers onto stack) Размещение всех регистров общего назначения в стеке

Команда pushad используется совместно с командой popad для сохранения и восстановления всех регистров общего назначения(edx, ebx, esp, ebp, esi, edi). Эти команды используются аналогично командам popa и pusha.

POPAD (POP All general Double word registers from the stack) Извлечение всех 32-разрядных регистров общего назначения из стека

Команда popad явл обратной команде pushad и используется для восстановления всех 32-разрядных регистров общего назначения(edi, esi, ebp, esp, ebx, edx, ecx, eax). Эту команду можно использовать в процедурах и программах обработки прерываний для восстановления регистров общего назначения прерванной программы.

PUSHF (PUSH Flags register onto stack) Размещение регистра флагов в стеке

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

POPF (POP Flags register from the stack) Извлечение регистра флагов из стека

Команда popf явл обратной команде pushf и используется для восстановления из стека содержимого регистра флагов eflags. Возможным вариантом использования этой команды явл программы обработки прерываний или др случаи, в которых необходимо сохранять некоторый локальный контекст процесса вычисления. Из-за того, что регистр eflags/flags непосредственно недоступен, команда popf явл одной из немногих возможностей влияния на его содержимое.

PUSHFD (PUSH eFlags Double word register onto stack) Размещение расширенного регистра флагов в стеке

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

POPFD (POP eFlags Double word register from the stack) Извлечение расширенного регистра флагов из стека

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



Опишите состав и назначение системных команд.

Системные команды предназначены для использования, главным образом, в модулях ОС (в модулях ядра ОС, в драйверах и т.д.). Некоторые из перечисленных ниже команд полезны и при разработке прикладных программ, работающих в защищённом режиме. Как правило, системные команды могут использовать только те программы, которые выполняются в нулевом привилегированном кольце.

ARPL - Коррекция поля привилегий инициатора запроса в селекторе

Синтаксис:
Arpl операнд1, операнд2

Эта команда используется системными модулями для проверки уровня запрашиваемых привилегий в передаваемых им в качестве параметров селекторов. Прикладная программа не должна запрашивать привилегии, превышающие её собственные.

Операнд1 может быть - 16-разрядный регистр или слово памяти, содержащие значение проверяемого селектора. Операнд2 - регистр, в который записано содержимое CS прикладной программы.

Если команда не изменяла уровень привилегий, в регистре FLAGS / EFLAGS устанавливается флаг нуля. В противном случае этот флаг сбрасывается.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: