| Справочник программиста на персональном компьютере фирмы IBM | 62 |
число, возвращаемое в AX, для номера параграфа отведенного блока
памяти. Фактор привязки дает смещение, по которому могут быть
вычислены адреса требующих привязки параметров в оверлее. Исполь-
зуйте номер параграфа, куда загружается оверлей. После того как
он установлен, вызовите функцию и оверлей будет загружен. Просто
изменяя путь к оверлейному файлу, можно вновь и вновь вызывать
эту функцию, загружая все новые и новые оверлеи. Если при возвра-
те установлен флаг переноса, то была ошибка и ее код будет возв-
ращен в AX. Код равен 1, если указан неверный номер функции, 2 -
если файл не найден, 5 - при дисковых ошибках и 8 - при отсутст-
вии достаточной памяти.
После того как оверлей загружен в память, к нему можно полу-
чить доступ как к далекой (far) процедуре. В сегменте данных
должен быть установлен двухсловный указатель, определяющий этот
вызов. Сегментная часть указателя просто равна текущему кодовому
сегменту. Смещение оверлея должно быть вычислено нахождением
разницы между сегментами кода и оверлея и умножением результата
на 16 (переводя величину из параграфов в байты). В нижеприведен-
ном примере две переменные OVERLAY_OFFSET и CODE_SEG помещены
одна за другой для правильной установки указателя. Однажды загру-
женный, оверелей затем можем вызываться инструкцией CALL DWORD
PTR OVERLAY_OFFSET.
Оверлей может быть полной программой со своими сегментами
данных и стека, хотя как правило используется стековый сегмент
вызывающей программы. При вызове оверлея значение сегмента его
собственного сегмента данных должно быть помещено в DS.
;-завершаем программу фиктивным сегментом (см. [1.3.1]):
Предыдущая страница 62 Следующая страница
1401708186
|