Программирование на Ассемблере


         

Особенности использования внешних функций


     Внешняя функция транслируется отдельно  от  вызывающей программы. Это позволяет не транслировать каждый раз модули, в которых не было изменений. Упрощается изолированная от всей системы отладка отдельных модулей, что допускает участие в разработке системы группы программистов. Не следует заботиться  о  локальных именах программы, например метках, которые  могут  совпадать для различных модулей. И,  наконец,  появляется  возможность стыковки разноязыковых модулей.

    Чтобы объединить несколько  модулей  (эту  функцию  выполняет компоновщик) в одну программу, необходима специальная  информация для вызывающей и вызываемой программ. Рассмотрим эту информацию.

            В Ы З Ы В А Ю Щ А Я   П Р О Г Р А М М А .

    1.  Необходимо знать, что вызываемый модуль является внешним. Для задания этого этого используется директива:

             extrn  имя функции :  proc

.Директива записывается вне сегментов,  в этом случае компоновщик будет искать определение этого  имени  во всех сегментах, пока не найдет. 

    2.  Если вызывающая программа резервирует память под  данные, которые должны использоваться в функции,  адреса  этих данных должны быть определены как адреса типа public,  т.е.  доступные(известные)  другим сегментам.

    Общий вид директивы public:

                    public  имя1, имя2, ....

    Директива public, если она необходима, задается в том сегменте, где определено  это  имя.  Директиву  можно  использовать  не только для переменных, но и для меток.

            В Ы З Ы В А Е М А Я    П Р О Г Р А М М А

     1. Имя функции должно  быть  задано  в  директиве public

                 public  имя_ функции

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

              extrn  определение1, определение2,...

     Общий вид определения для передаваемых данных:

                  имя : тип : количество ,

где

     имя - имя данного, память под которое выделена в другом  модуле;



Содержание  Назад  Вперед