-----------------------------------------------------------------|Код Команда Число Описание ||операции тактовых || циклов || ||C8 iw 00 ENTER imm16,0 14 Создание кадра стека || процедуры ||C8 iw 01 ENTER imm16,1 17 Создание кадра стека || для параметров процедуры ||C8 iw ib ENTER imm16, 17+3n Создание кадра стека || imm8 для параметров процедуры |----------------------------------------------------------------- Работа команды уровень <- уровень MOD 32IF OperandSize = 16 THEN Push(BP) ELSE Push(EBP) FI; (* Сохранить указатель стека *)указатель-стека <- eSPIF уровень > 0THEN (* уровень это крайний правый параметр *) FOR i <- 1 TO уровень - 1 DO IF OperandSize = 16 THEN BP <- BP -2; Push[BP] ELSE (* OperandSize = 32 *) EBP <- EBP - 4; Push[EBP]; FI; OD; Push(указатель-стека)FI;IF OperandSize = 16 THEN BP <- указатель-стека ELSE EBP <- указатель-стека; FI;IF StackAddrSize = 16 (* Размер адреса стека = 16 *)THEN SP <- SP - Первый операнд;ELSE ESP <- ESP - ZeroExtend(Первый операнд); (* Расширение нулем*)FI; ОписаниеКоманда ENTER создает кадр стека, требуемый для большинства языковвысокого уровня блочной структуры. Первый операнд задает число байтовдинамической памяти, распределяемой в стеке при вхождении в подпрограмму.Второй операнд задает уровень лексической вложенности ( от 0 до 31)подпрограммы в исходном коде языка высокого уровня. Он определяет числоуказателей кадра стека, копируемых в новый кадра стека из предыдущего.Регистр BP (или EBP, если атрибут размера операнда равен 32 битам) этоуказатель текущего кадра стека. Если атрибут размера операнда равен 16 битам, процессор использует регистрBP в качестве указателя кадра и регистр SP в качестве указателя стека.Если атрибут размера операнда равен 32 битам, то процессор используетрегистр EBP в качестве указателя кадра и регистр ESP в качестве указателястека.Если второй операнд равен 0, то команда ENTER помещает в стек указателькадра (регистр BP или EBP); затем команда ENTER вычитает первый операнд изуказателя стека и устанавливает указатель кадра равным текущему значениюуказателя стека.Например, процедура с 12 байтами локальных переменных в точке входа должнаиметь команду ENTER 12,0 и команду LEAVE перед каждой командой RET. 12локальных байтов должны адресоваться как негативные смещения относительноуказателя кадра. Изменяемые флагиОтсутствуют Исключения защищенного режима#SS(0), если значение SP или ESP превысит границу стека в любой точкевыполнения команды; #PF(код сбоя) в случае страничного сбоя; Исключения режима реальных адресовОтсутствуют Исключения виртуального режима 8086Отсутствует