Программирование на Ассемблере
Сама библиотека
\"exec.library\" находится в системном ПЗУ (ROM) и открывать ее не надо.
Если открываемая библиотека уже находится в памяти, то она повторно не
загружается, обеспечивая таким образом дополнительную экономию памяти и
времени. Это означает, что несколько программ могут одновременно использовать
одну и ту же библиотеку. Пакет AssemPro имеет все необходимые файлы для работы с библиотеками,
которые содержат, в частности, некоторые полезные макроопределения и
символьные константы. Однако, в примерах программ мы не будем использовать
эти определения для облегчения переносимости на другие ассемблеры (SEKA,
итд.). Правда, в некоторых примерах Вы встретите специфические для AssemPro
макросы INIT_AMIGA и EXIT_AMIGA (для обеспечения запуска программ из
desktop\'а), и если Вы используете другой ассемблер, изучите для начала
соответствующую документацию по компоновке программ.
Если Ваша система \"ругается\" на макросы AssemPro (ILABEL, INIT_AMIGA,
EXIT_AMIGA), то уберите их из программы - обычно это помогает. 6.2. Вызов библиотечных функций. Для начала опишем механизм вызовов функций библиотек, а затем приведем
небольшой пример. Итак, любая библиотека содержит специальную таблицу,
которая состоит из команд JMP. Каждая из этих команд осуществляет переход
на какую-либо подпрограмму библиотеки. Таким образом, для того, чтобы
вызвать n-ную функцию, Вам достаточно вызвать подпрограмму по адресу
TABLE + n*SIZE, где TABLE - начало таблицы переходов, а SIZE - размер
элементов этой таблицы. Для этого обычно используют команду JSR с нужным
смещением. Заметим, что при работе с библиотеками используется адрес конца
таблицы переходов, поэтому все смещения имеют отрицательный знак.
Для примера, попробуем открыть библиотеку \"dos.library\". Для этого мы
должны использовать функцию библиотеки \"exec.library\", базовый адрес
которой записан в фиксированной ячейке $000004. Базовый адрес - это адрес
таблицы переходов, о которой мы только что говорили.
|