"Роберт Джордайн. Справочное пособие программиста - 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 не нуждаются в привязке, поскольку они хранятся в |
|
|