Модульное программирование на ассемблере. Перемещаемость.



Модульное программирование заключается в том, что основную программу разбивают на функционально самостоятельные блоки, обычно подпрограммы. После транслирования, тестирования, отслеживания проверенный блок включают в общую программу.

                Модульное программирование на языке ассемблера и других обеспечивается по схеме DOS 1800 – ОС для управляющих 8-разрядных ЭВМ.

Объектный модуль – файл с фрагментом машинной программы, рассчитанный на объединение с такими же фрагментами в общую исполняемую программу.

    Форма объектного модуля стандартна для всех языков компиляторов данной машины. Позволяет объединять фрагменты, написанные на разных языках. Проблема – согласование адресов взаимных обращений. Имена, метки используемые только внутри модуля – локальные. Имена, метки объявленные в данном модуле (отведена память) и доступные для обращения из других модулей – глобальные (PUBLIC). Имена, метки объявленные в других модулях, используемые в данном – внешние (EXTRN).

    Имена, метки локальных и глобальных переменных ассемблер преобразует к условным адресам. Адресация в абсолютном модуле условная и ведется относительно начала модуля. Первый байт модуля имеет условный адрес 0.

    Команды обращения (ссылки) к внешним переменным преобразуются в промежуточную форму: под них отводиться память, формируется КОП, а значение адресов уточняются на стадии компоновки.

    Глобальные и внешние имена сохраняются в объектном модуле в символическом виде для использования при компоновки.

 

1. Ассемблирование (раздельное) трех модулей. Результат:

MAIN (основная программа), MODULE1, MODULE2 – имена файлов.

 SUBR1, SUBR2 – подпрограммы, определенные в теле MOD1, MOD2 и MAIN.

2. Компоновка. Результат: перемещаемый загрузочный модуль. Коды модулей объединены в один экстент.

 

Компоновка: совмещение нескольких объектных модулей в один непрерывный объектных модуль, согласование всех адресов (разрешение всех внешних ссылок) межмодульных ссылок. Внутри модуля процедуры получают свои адреса. Эти адреса будут подставлены в команды (условные, отчитанные от начала модуля адреса) и обращения (ссылки).

    Исходные объектные модули располагаются в загрузочном модуле по усмотрению программиста (относительно начальных адресов) или на свободное место памяти.

    В зависимости от типа отводимой памяти в ассемблерных программах следует выделять:

CSEG – сегмент кодов – область памяти ПЗУ для команд (инструкции) и констант. Допускаются перемещения.

DSEG – сегмент данных, для размещения в памяти RAM, допускает перемещение.

ASEG – абсолютный сегмент, где располагаются команды и константы не допускающие перемещения и привязанные к конкретным физическим адресам. Например, старт системы в ячейки 0, начальные адреса обработки прерываний по команде RST i.

    В ассемблере для каждого из сегментов отведен отдельный счетчик адресов. Директивы управления счетчиками адреса ASEG, DSEG, CSEG все последующие записи будут добавлять к соответствующему сегменту до очередной (следующей) директивы смены счетчика ASEG.

    При компоновке одноименные сегменты модули объединяются. При настройки адресов каждому сегменту задается свой начальный адрес, то есть физическая область памяти.

 

Вопрос 21


Дата добавления: 2018-04-15; просмотров: 584; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!