"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора

OVERLAY PROC FAR ;всегда "далекая" процедура
ASSUME CS:CSEG,DS:DSEG
PUSH DS ;храним DS вызывающей программы
MOV AX,DSEG ;устанавливаем DS оверлея
MOV DS,AX
.
.
POP DS ;восстанавливаем DS при завершении
RET
OVERLAY ENDP
CSEG ENDS
END


.h3 1.3.6 Преобразование программ из типа .EXE в тип .COM.
----------------------------------------------------------

Программисты на ассемблере имеют возможность преобразовать
свои программы из обычного формата EXE в формат COM. Файлы EXE
имеют заголовок, содержащий информацию для привязки; DOS привязы-
вает некоторые адреса программы при загрузке. С другой стороны,
файлы COM существуют в таком виде, что привязка не требуется -
они хранятся уже в том виде, в котором загружаемая программа
должна быть в памяти машины. По этой причине файлы EXE по меньшей
мере на 768 байтов больше на диске, чем их COM эквиваленты (хотя
при загрузке в память они будут занимать одинаковое место). Файлы
COM также быстрее загружаются, поскольку не требуется привязки.
Других преимуществ у них нет, а некоторые программы слишком слож-
ны и слишком велики, чтобы их можно было преобразовать в тип COM.
Привязка - это процесс установки адресов, связанных с сегмент-
ным регистром. Например, программа может указывать на начало
области данных следующим кодом:

MOV DX,OFFSET DATA_AREA
MOV AX,SEG DATA_AREA
MOV DS,AX

Смещение в DX связано с установкой сегментного регистра DS. Но
какое значение должен принимать сам DS? Программа требует абсо-
лютный адрес, но номер параграфа, в котором будет располагаться
DATA_AREA зависит от того, в какое место в памяти будет загружена
программа - а это зависит от версии MS DOS, а также от того,
какие резидентные программы будут находиться в младших адресах
памяти. По этой причине во время компоновки программы можно толь-
ко установить некоторые сегментные значения через смещения отно-
сительно начала программы. Затем, когда DOS осуществляет привяз-
ку, значение начального адреса программы прибавляется к сегмент-
ным значениям, давая абсолютные адреса, требуемые в сегментном
регистре. На рис. 1-6 показан процесс привязки.
Файлы COM не нуждаются в привязке, поскольку они хранятся в