{img1} |
перевод с русского на английский |
|
|
|-----------------------|
| Старшие адреса памяти |
|/\/\/\/\/\/\/\/\/\/\/\/
Рис.3-15. Взаимосвязь адреса сегмента и адреса загрузки
для оверлея формата .COM
Так как файлы формата .EXE имеют нулевое начало, то какую
инструкцию CALL или JMP использовать для перехода к адресу заг-
рузки? Это будет зависеть от того, как написана программа. |
немецко русский словарь |
|
|
Для
файлов типа .EXE, созданных из одного исходного файла, компонов-
щик LINK и MS-DOS загружают сегменты в память в том же самом по-
- 3-54 -
рядке, в котором они появляются в исходной программе! Общим по-
рядком для определения сегментов является следующий: стековый
сегмент, затем сегмент данных, затем программный сегмент. (По
причине минимизации ссылок вперед в программном сегменте). |
русско английский словарь |
|
|
Для
возможности вызова программ формата .EXE по инструкции CALL по
адресу их загрузки, программный сегмент должен быть первым сег-
ментом в файле .ASM, а точка входа должна быть первой инструкцией
в программном сегменте. Макроассемблер MASM и компоновщик LINK не
имеют с этим никаких проблем, хотя в некоторых случаях для MASM
может появиться необходимость использования директив замещения
для разрешения ссылок вперед.
Листинг 3-10 показывает как должна появляться последователь-
ность загрузки и вызова, когда используется функция загрузки
оверлея для файлов формата .COM. |
asplinux deluxe |
|
|
ad aware, утилиты резервного копирования, norton, avast 4.7, резервное копирование, .
програмное обеспечение
|
коды этих файлов начинаются с адреса 100
относительно их сегментов. Все ссылки, содержащиеся в программе,
являются относительными к этому адресу. Т.к. файл .COM загружает-
ся прямо по адресу загрузки, можно некорректно использовать адрес
загрузки в качестве значения сегмента для оверлея. Рис.3-15 пока-
зывает, что если адрес загрузки используется в качестве адреса
сегмента, то значения смещений в программном коде смещаются на
100 (шестнадцатиричное значение). Правильный адрес сегмента для
использования есть адрес загрузки минус 10 (шестнадцатиричное
значение), который перемещает смещения программного кода на 100
(шестнадцатиричное значение).
Для программных файлов формата .EXE существуют другие пробле-
мы. Когда файл формата .EXE загружается для выполнения, MS-DOS
инициализирует программный и стековый сегменты для указания на
надлежащий сегмент и указатель инструкции для указания на первую
инструкцию программы. Когда файл формата .EXE загружается как
оверлей, MS-DOS не обеспечивает эти значения. Как тогда порождаю-
щая программа узнает, куда вводить программу?
/\/\/\/\/\/\/\/\/\/\/\/\
| Младшие адреса памяти | АДРЕС СЕГМЕНТА
|-----------------------|<--- ОВЕРЛЕЯ
| ^ | Segment:CS_RUN
| | | CS_LOAD:10(hex)
| 100 (hex) |
| | |
АДРЕС ЗАГРУЗКИ | V | АДРЕСА ПАМЯТИ
Segment:CS_LOAD---->|-----------------------|<---
|Программный код оверлея| CS_LOAD:0000(hex)
| ... | CS_RUN: 0100(hex)
|-----------------------|
| Данные оверлея |
| ...
|
|
|