Оперативная память
04d1509c

В 6 Варианты оформления начала подпрограммы



Пример В.6. Варианты оформления начала подпрограммы

; Вариант 1 — использование трех команд
push bp ; сохранение содержимого bp
mov bp, sp ; запись в bpдреса верхушки стека
sub sp, N ; резервирование N байтов в стеке
; Вариант 2 — специальная команда enter
enter N, 0 ; заменяет три команды варианта 1

В первом варианте примера В.6 показано, как резервируется пространство размером N байтов с помощью обычных команд. Начиная с модели Intel 80286, у микропроцессоров появилась специальная команда enter. Она сохраняет в стеке содержимое регистра bp, копирует в bpдрес верхушки стека и уменьшает на N содержимое sp, т. е. по результату эквивалентна трем командам варианта 1. При использовании во внешних процедурах второй параметр команды enter равен нулю.

Важно
Ни при каких обстоятельствах значение указателя стека не может быть нечетным числом. Поэтому количество байтов, отводимых для размещения промежуточных переменных, обязательно должно быть четным. Однако это не означает, что в пространстве стека нельзя размещать байты и работать с ними.

После выполнения любого из вариантов примера В.6 регистр bpспользуется для прямого доступа к параметрам и промежуточным переменным. Параметры расположены выше, а промежуточные переменные — ниже находящейся в bpточки отсчета. Обозначим смещение параметра или переменной как хх. В таком случае, при обращении к параметрам содержимое в bpувеличивается на величину смещения ([bp+хх]), а при обращении к промежуточным переменным оно уменьшается на величину смещения ([bp-хх]).

Прежде чем использовать переменные в командах, надо вычислить смещение каждой из них относительно регистра bp. Оно зависит от размеров предыдущих и данной переменной и не может быть равно нулю. Например, первая по порядку переменная может быть байтом, словом или двойным словом, ее адрес будет соответственно равен [bp-i], [bp-2] или [bp-4].



Содержание раздела