домашняя библиотека
Поиск в библиотеке
Навигация по предметам
Последние добавленные новости
Реклама

Архитектура и организация ЭВМЛекции по дисциплине - Архитектура и организация ЭВМ

Тема 6. Требования к оформлению исходных модулей

Так как существует два основных типа загрузочных модулей: формат .EXE и формат .COM, то и исходные модули для создания программ в этих форматах имеют некоторые отличия.

Требования к оформлению исходного модуля для создания EXE-программы.

1) Необходимо указать Ассемблеру, какие сегментные регистры каким сегментам должны соответствовать. Для этого используется директива ASSUME.

2) Перед началом выполнения программы необходимо сохранить содержимое регистра DS в стеке. Для этого применяется команда PUSH.

3) Записать в стек нулевое число. Для этого применяется команда PUSH.

4) Загрузить в регистр DS начальный адрес сегмента данных. Для этого применяется команда MOV.

Пример построения исходного модуля для EXE-программы:

Лекции по дисциплине - Архитектура и организация ЭВМ

Программа содержит 3 сегмента: сегмент стека, сегмент данных и сегмент команд. Каждый сегмент открывается директивой SEGMENT а закрывается директивой ENDS.

Директива ASSUME устанавливает для Ассемблера соответствие между конкретными сегментами и сегментными регистрами.

Для любого загрузочного модуля в оперативной памяти выделяется специальная область размером в 256 Байт. Эта область выделяется перед размещением программы, обозначается PSP и называется префикс программного сегмента. Начальный адрес области PSP загружается в регистр DS при запуске загрузочного модуля.

Так как программа будет использовать регистр DS для своих целей, то она должна сохранить начальный адрес PSP в стековой памяти. Эту операцию выполняет команда PUSH DS.

Команда SUB AX,AX выполняет вычитание AX – AX = 0. Это позволяет получить число 0 в регистре AX.

Команда PUSH AX записывает число 0 из регистра AX в стековую память.

Следующая команда MOV AX,DATASG записывает начальный адрес сегмента данных в регистр AX.

Команда MOV DS,AX переписывает начальный адрес сегмента данных из регистра AX в регистр DS.

Начальный адрес сегмента команд и начальный адрес сегмента стека автоматически загружаются в регистры CS и SS соответственно при запуске загрузочного модуля.

Таким образом, в исходном модуле программа всегда должна начинаться с 5 перечисленных команд для определения сегмента данных.

Последней командой программы должна быть команда RET, которая восстанавливает начальный адрес PSP в регистре DS из стека и обеспечивает выход из программы.

Далее директива ENDP закрывает основную процедуру, а директива ENDS закрывает сегмент команд.

Последняя директива END закрывает программу.

Требования к оформлению исходного модуля для создания COM-программы.

1) Программа должна содержать только один сегмент – сегмент команд и размер программы не должен превышать 64 кБ.

2) Сегмент стека в программе не создается, т.к. он создается автоматически в области PSP при загрузке программы.

3) Сегмент данных в программе не создается. Исходные данные и константы, необходимые для работы программы, определяются в начальной части сегмента команд.

4) Директивой ASSUME все сегментные регистры связываются с сегментом команд. Начальный адрес сегмента команд смещается директивой ORG на величину 100H, т.к. в диапазоне ячеек 0-100H будет размещаться область PSP со стековой памятью.

Пример построения исходного модуля для COM-программы:

Лекции по дисциплине - Архитектура и организация ЭВМ

Директива ASSUME связывает регистры CS, DS и SS с одним сегментом – сегментом команд.

Программа BEGIN начинается командой безусловного перехода на процедуру MAIN – JMP MAIN.

Процедура MAIN имеет не тип FAR а тип NEAR, это означает, что процедура MAIN не является началом программы. Началом программы является команда JMP MAIN.

Директива ENDP закрывает процедуру MAIN.

Директива ENDS закрывает сегмент команд.

Директива END закрывает всю программу.

   
 
  • Добавлен: 30-06-2011, 23:18 | Просмотров: 11881

    support: admin@sdb.su