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/ |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |