Программирование на Ассемблере
Для вызова любой функции нам нужно знать ее смещение. Функция OpenLib
библиотеки \"exec.library\" имеет смещение -552 (значения смещений для
некоторых функций приведены в приложении в конце книги).
Функция OpenLib требует в качестве параметра адрес ASCII-строки, содержащей
имя открываемой библиотеки (в нашем случае \"dos.library\"). Также нам
потребуется ячейка памяти для хранения базового адреса открываемой
библиотеки, который возвращается функцией OpenLib. Помните, что имена
библиотек должны записываться строчными буквами (dos.library). Итак, приведем текст программы, открывающей dos.library: ;** Load the DOS library \'dos.library\' (6.2A) **
ExecBase = 4 ;ячейка, содержащая базовый адрес
;библиотеки \"exec.library\"
OpenLib = -552 ;смещение для функции OpenLib в
;таблице библиотеки exec init:
move.l ExecBase,A6 ;базовый адрес библиотеки exec - в A6
lea dosname,A1 ;адрес строки с именем библиотеки dos
moveq #0,D0 ;номер версии (0 - любая версия)
jsr OpenLib(A6) ;вызываем OpenLib
move.l D0,dosbase ;сохраняем возвращенный базовый адрес
;библиотеки dos
beq.s error ;если он равен нулю, то произошла
;ошибка ... ;Ваша программа
... ; error: ;обработка ошибок
...
... dosname: dc.b \'dos.library\',0 ;имя библиотеки
align ;even в случае SEKA
dosbase: blk.l 1 ;для хранения адреса открытой
;библиотеки end Таким же образом происходит вызов и других библиотечных функций. Параметры
и результаты функций обычно передаются в регистрах, а в случае ошибки в D0
возвращается нулевое значение.
|