logo

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

Система команд 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

ENTER

Создать кадр стека для параметров процедуры

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

OF

DF

IF

TF

SF

ZF

AF

PF

CF

                 

 

Код

Команда

Описание

Проц.

Пример

C8 iw 00

ENTER imm16,0

Создать кадр стека для процедуры

Intel286

enter 4,0

C8 iw 01

ENTER imm16,1

Создать вложенный кадр стека для процедуры

Intel286

enter 5,1

C8 iw ib

ENTER imm16,imm8

Создать вложенный кадр стека для процедуры

Intel286

enter 9,6

Описание:

Команда ENTER создает кадр стека, необходимый большинству блочно-структурных языков программирования высокого уровня. Первый операнд указывает, какое количество байт памяти выделяется в стеке для процедуры, в которую осуществляется вход. Второй операнд дает лексический уровень вложенности (от 0 до 31) процедуры внутри исходного кода. Он определяет количество указателей кадра стека, скопированных в новый кадр стека из предыдущего кадра.

Атрибут размера операнда и атрибут размера стека используются, чтобы определить: BP или EBP используется для указателя кадра, и SP или ESP — для указателя стека.

Если атрибут размера операнда равен 16 бит, то процессор использует регистр BP в качестве указателя кадров, если только атрибут размера стека не равен 32 бита, тогда он использует EBP для указателя кадра и ESP для указателя стека. Если атрибут размера операнда равен 32 бита, то процессор использует регистр EBP в качестве указателя кадров и регистр ESP в качестве указателя стека, если только атрибут размера стека не равен 16 бит, тогда он использует BP для указателя кадра и SP для указателя стека.

Если второй операнд равен нулю, тогда команда ENTER помещает в стек указатель кадра (регистр BP или EBP), затем команда ENTER вычитает первый операнд из указателя стека и устанавливает указатель кадра равным текущему значению указателя стека.

Например, подпрограмма, имеющая 12 байт локальных переменных, должна иметь в своей точке входа команду ENTER 12,0 и команду LEAVE перед каждой командой RET. 12 локальных байт будут адресоваться отрицательными смещениями от указателя кадра.

Операция:

level = level MOD 32

2ndOperand = 2ndOperand MOD 32

IF OperandSize = 16 THEN Push(BP); ELSE Push(EBP); FI;

IF StackAddrSize = 16 THEN FramePtr = SP; ELSE FramePtr = ESP; FI;

 

FOR i = 1 TO (2ndOperand - 1)

DO

   IF OperandSize = 16

   THEN

      IF StackAddrSize = 16

      THEN

         BP = BP - 2;

         Push([BP]); (* Помещает слово в стек *)

      ELSE (* StackAddrSize = 32 *)

         EBP = EBP - 2;

         Push([EBP]); (* Помещает слово в стек *)

      FI;

   ELSE (* OperandSize = 32 *)

      IF StackAddrSize = 16

      THEN

         BP = BP - 2;

         Pushd([BP]); (* Помещает двойное слово в стек *)

      ELSE (* StkSize = 32 *)

         EBP = EBP - 2;

         Pushd([EBP]); (* Помещает двойное слово в стек *)

      FI;

   FI;

OD;

 

IF StackAddrSize = 16

THEN

   Push(FramePtr); (* Помещает слово в стек *)

ELSE

   Pushd(FramePtr); (* Помещает двойное слово в стек *)

FI;

 

IF StackAddrSize = 16

THEN

   BP = FramePtr;

   SP = SP - 1stOperand;

ELSE

   EBP = FramePtr;

   ESP = ESP - 1stOperand;

FI;

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

#SS(0), если значение SP или ESP превысит предел стека в любой точке во время выполнения команды.
#PF(Код ошибки), при страничной ошибке.

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

#SS, если значение SP или ESP превысит предел стека в любой точке во время выполнения команды.

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

#SS(0), если значение SP или ESP превысит предел стека в любой точке во время выполнения команды.
#PF(Код ошибки), при страничной ошибке.


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




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

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

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