TURBO PASCAL |
|
Новости
|
Вложенные процедуры и функции
Процедура или функция считается вложенной, когда она описы-
вается внутри другой процедуры или функции. По умолчанию вложен-
ные процедуры и функции всегда используют ближний тип вызова
(NEAR), поскольку они доступны только внутри определенной проце-
дуры или функции в том же сегменте кода. Однако в оверлейных за-
дачах обычно для того, чтобы обеспечить для всех процедур и функ-
ций дальний тип вызова (FAR), используется директива {$F+}.
При вызове вложенной процедуры или функции компилятор непос-
редственно перед инструкцией CALL генерирует инструкцию PUSH BP,
фактически передавая регистр BP вызывающей программы в качестве
дополнительного параметра. После того, как вызываемая процедура
установит свой собственный регистр BP, регистр ВР вызывающей про-
цедуры доступен, как слово, сохраненное в [BP+4] или в [BP+6]
(если процедура имеет дальний тип вызова). Используя связь через
[BP+4] и [BP+6], вызываемая процедура может получить доступ к ло-
B.Pascal 7 & Objects/LR - 392 -
кальным переменным в границах стека вызывающей процедуры. Следую-
щий пример показывает, как можно получить доступ к локальным пе-
ременным из оператора inline во вложенной процедуре:
procedure A; near;
var IntA: integer;
procedure B; far;
var IntB: integer;
procedure C; near;
var IntC: integer;
begin
inline(
$8B/$46/
|
|
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |