Передача параметров
Стек также служит удобным местом для передачи информации в
подпрограммы и из них. Обычно программа передает параметры в
подпрограмму, помещая их в регистры, однако в некоторых случаях
число параметров превышает размеры регистрового пространства. В
таких случаях програииа может поместить параметры в стек до
выполнения команды CALL (вызов подпрограммы). Как мы увидим в
гл.10, стек является единственным средством передачи параметров в
подпрограммы, написанные на языке ассемблера, из языков высокого
уровня Бейсик и Фортран.
Подпрограмма может очень эффективно загружать эти параметры из
стека. В обычных случаях программа читает информацию из стека
единственным способом - извлекая ее оттуда. Вместо этого
подпрограмма может использовать регистр BP, как указатель на
область стека. Когда программа передает параметры через стек, одной
из первых команд в подпрограмме выполняется команда
MOV BP, SP
которая загружвет регистр BP текущим значением указателя стека.
Поскольку регистр BP - адресный регистр, подпрограмма может
использовать его при адресных вычислениях, а это означает, что все
параметры доступны как смещения относительно регистра BP.
Конструкторы микропроцессора 8088 определенно помнили об
описанном выше методе передачи параметров, так как при доступе к
данным регистр BP использует по умолчанию регистр стекового
сегмента SS в качестве сегментного регистра. Во всех других
нормальных случаях доступа к данным микропроцессор использует
регистр DS. Поскольку стек находится в стековом сегменте,
регистровую пару SS:BP очень естественно использовать для адресации
информации в стеке.
На Фиг. 4.7 изображен пример, демонстрирующий использование
регистра BP для доступа к параметрам, переданным через стек. В этом
примере головная программа перед выполнением команды CALL поместила
четыре слова в стек. Подпрограмма загружает в BP указатель данных в
Содержание Назад Вперед