logo

Главная Система команд x86 Базовая система команд CPU PUSHAD

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

PUSHAD

Поместить в стек значения всех 32-битных регистров общего назначения

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

 

 

 

 

 

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

60

PUSHA

Сохранить в стеке регистры AX, CX, DX, BX, исходный SP, BP, SI и DI

Intel286

pusha

60

PUSHAD

Сохранить в стеке регистры EAX, ECX, EDX, EBX, исходный ESP, EBP, ESI и EDI

Intel386

pushad

Описание:

Команда PUSHA/PUSHAD сохраняет в стеке содержимое восьми 16-битных (PUSHA) или 32-битных (PUSHAD) регистров общего назначения. Команда PUSHA уменьшает указатель стека на 16. Команда PUSHAD уменьшает указатель стека на 32. Последний помещаемый в стек регистр — регистр (E)DI.

Мнемоники PUSHA и PUSHAD имеют один код операции. Конкретная выполняемая команда определяется атрибутом размера операнда. Некоторые ассемблеры могут вставлять соответствующий префикс размера операнда перед кодом операции при преобразовании мнемоник PUSHA и PUSHAD, другие же ассемблеры воспринимают эти мнемоники одинаково и программируют только код операции, работа команды в этом случае определяется текущей установкой размера операнда для кодового сегмента (бит D дескриптора). Размерность адреса при обращении к стеку (используется либо SS:SP при 16-битной адресации, либо SS:ESP при 32-битной адресации) определяется текущей разрядностью стекового сегмента (бит B соответствующего дескриптора) и не может быть переопределена префиксом размера адреса перед кодом операции.

В реальном режиме, если значение eSP равно 1, 3 или 5 перед исполнением команды PUSHA/PUSHAD, процессор сбрасывается из-за отсутствия места в стеке. Такое поведение процессора документируется для процессоров Intel и вероятно возможно и при некоторых других значениях в eSP, однако, некоторые модели процессоров (впервую очередь это касается клонов производства других фирм) могут вести себя совершенно непредсказуемо в данной ситуации.

Операция:

IF OperandSize = 16 (* Команда PUSHA *)

THEN

  Temp = SP;

  Push(AX);

  Push(CX);

  Push(DX);

  Push(BX);

  Push(Temp);

  Push(BP);

  Push(SI);

  Push(DI);

ELSE (* OperandSize = 32, команда PUSHAD *)

  Temp = ESP;

  Push(EAX);

  Push(ECX);

  Push(EDX);

  Push(EBX);

  Push(Temp);

  Push(EBP);

  Push(ESI);

  Push(EDI);

FI;

Особые ситуации защищенного режима:

#SS(0), если в процессе исполнения команды вершина стека выходит из пределов стекового сегмента.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.

Особые ситуации режима реальной адресации:

#GP, если регистр (E)SP равен 7, 9 ... 15.

Особые ситуации режима V86:

#GP, если регистр (E)SP равен 7, 9 ... 15.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.


Входит в группу команд: Базовая система команд CPU




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники