TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Внешние программы в оверлеях 

             Аналогично обычным процедурам и функциям Borland Pascal  при
        использовании  внешних программ на языке ассемблера для обеспече-
        ния корректной работы подсистемы управления оверлеями должны соб-
        людаться определенные правила программирования.

             Если в  программе на языке ассемблера осуществляется обраще-
        ние к любой оверлейной процедуре или функции,  то в программе ас-
        семблера должен  использоваться  дальний тип вызова,  и с помощью
        регистра BP должны  быть  установлены  границы  стека.  Например,
        предположим,  что OtherProc является оверлейной процедурой в дру-
        гом модуле и ее вызывает программа ExternProc на языке  ассембле-
        ра.  Тогда программа ExternProc должна иметь дальний тип вызова и
        устанавливать границы стека следующим образом:

             ExternProc      PROC       FAR
                   PUSH      bp         ; сохранить регистр ВР
                   mov       bp,sp      ; установить границы стека
                   SUB       sp,LocalSize ; выделить локальные
                                        ;   переменные
                   ...
                   CALL      OtherProc  ; вызвать другой оверлейный
                                        ; модуль
                   ...
                   mov       sp,bp      ; отменить локальные переменные
                   pop       bp         ; восстановить регистр ВР
                   RET       ParamSize  ; возврат управления
             ExternProc      ENDP

        где LocalSize представляет собой размер локальных  переменных,  а
        ParamSize  - размер параметров.  Если значение LocalSize равно 0,
        то две строки,  в которых выделяются и уничтожаются локальные пе-
        ременные, можно опустить.

             Если в  программе  ExternProc  имеются  косвенные  ссылки на
        оверлейные процедуры и функции,  то эти требования остаются  теми
        же. Например, если процедура OtherProc вызывает оверлейные проце-

        дуры или функции,  но сама не является оверлейной,  то  программа
        ExternProc должна, тем не менее, иметь дальний тип вызова и уста-
        навливать границы стека.

             В том случае,  если в программе на языке ассемблера  отсутс-
        твуют  прямые  или  косвенные  ссылки на оверлейные процедуры или
        функции, то никаких специальных требований соблюдаться не должно:
        программа ассемблере может использовать ближний тип вызова  и  не
        устанавливать границ стека.

             Оверлейные программы на языке ассемблера не должны создавать
        переменных в  сегменте  кода,  поскольку при освобождении оверлея
        любые изменения,  внесенные в оверлейный сегмент кода,  теряются.
        Аналогично,  не  следует считать,  что указатели на размещенные в
        оверлейном сегменте кода объекты  останутся  действительными  при
        вызове других оверлеев, поскольку подсистема управления оверлеями
        может свободно перемещать и освобождать оверлейные сегменты кода.

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz