Программирование на Ассемблере
Попытка освобождения
незарезервированной памяти неизбежно приводит к сбою или зависанию
компьютера. Приведем пример программы, освобождающей память: ExecBase = 4 ;(6.3.1C)
FreeMem = -$D2 ...
move.l #number,D0 ;размер освобождаемого блока
lea addreee,A0 ;адрес освобождаемого блока
move.l ExecBase,A6 ;базовый адрес EXEC
jsr FreeMem(A6) ;освобождаем память
tst.l D0 ;все OK?
beq.s error ;нет!
... Замечание из предыдущего пункта касается и работы с памятью: операционная
система НЕ освобождает память автоматически при завершении программ.
Поэтому никогда не забывайте использовать MemFree для освобождения всех
захваченных блоков памяти. 6.3.2. Создание простого окна ввода/вывода. В этом пункте мы рассмотрим простейшие средства для создания окон. Вообще,
как мы уже упоминали, для работы с окнами и меню используется специальная
библиотека - intuition, однако ее мы рассмотрим в следующем разделе.
Библиотека dos также имеет функцию для создания простых окон, которые
служат для обмена текстовой информацией с пользователем. Такие окна
называются окнами ввода/вывода операционной системы. Окна ввода/вывода, в
отличие от окон intuition, не имеют некоторых ресурсов (в частности,
отсутствует символ закрытия (close gadget) в левом верхнем углу окна).
Итак, для создания окна ввода/вывода необходимо использовать функцию Open
библиотеки dos.library. Вообще, эта функция используется настолько часто,
что ее вызов целесообразно поместить в отдельную подпрограмму: ;** Load the DOS library \'dos.library\' (6.3.2A) **
ExecBase = 4 ;ячейка, в которой содержится базовый
;адрес библиотеки exec
OpenLib = -552 ;смещение функции OpenLib
Open = -30 ;смещение функции Open
init:
move.l ExecBase,A6 ;базовый адрес exec - в A6
lea dosname(PC),A1 ;адрес строки названия библиотеки
moveq #0,D0 ;номер версии: не имеет значения
jsr OpenLib(A6) ;открываем dos.library
move.l D0,dosbase ;сохраняем ее базовый адрес
beq.s error ;ошибка открытия
...
|