"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора оверлей
2 2-байтный фактор привязки, который будет использоваться для привязки адресов в оверлее (привязка объясняется в [1.3.6]). В качестве номера параграфа надо использовать число, возвращаемое в AX, для номера параграфа отведенного блока памяти. Фактор привязки дает смещение, по которому могут быть вычислены адреса требующих привязки параметров в оверлее. Используйте номер параграфа, куда загружается оверлей. После того как он установлен, вызовите функцию и оверлей будет загружен. Просто изменяя путь к оверлейному файлу, можно вновь и вновь вызывать эту функцию, загружая все новые и новые оверлеи. Если при возврате установлен флаг переноса, то была ошибка и ее код будет возвращен в AX. 1 - если указан неверный номер функции 2 - если файл не найден 5 - при дисковых ошибках 8 - при отсутствии достаточной памяти. После того как оверлей загружен в память, к нему можно полу- чить доступ как к далекой (far) процедуре. В сегменте данных должен быть установлен двухсловный указатель, определяющий этот вызов. Сегментная часть указателя просто равна текущему кодовому разницы между сегментами кода и оверлея и умножением результата на 16 (переводя величину из параграфов в байты). В нижеприведен- ном примере две переменные OVERLAY_OFFSET и CODE_SEG помещены одна за другой для правильной установки указателя. Однажды загру- женный, оверелей затем можем вызываться инструкцией CALL DWORD PTR OVERLAY_OFFSET. Оверлей может быть полной программой со своими сегментами данных и стека, хотя как правило используется стековый сегмент вызывающей программы. При вызове оверлея значение сегмента его собственного сегмента данных должно быть помещено в DS. ;---завершаем программу фиктивным сегментом (см. [1.3.1]): ZSEG SEGMENT ZSEG ENDS ;---в сегменте данных OVERLAY_SEG DW ? OVERLAY_OFFSET DW ? ;смещение оверлея CODE_SEG DW ? ;сегмент оверлея - должен ;следовать за смещением PATH DB 'A:OVERLAY.EXE',0 BLOCK DD 0 ;4-байтный блок параметров ;---освобождаем память |
|
|