Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Принципы разработки модулей




Разработка многомодульных программ

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

 

 
 

 


Рис. 29. Трансляция и компоновка многомодульной программы.

 

 

Например, если программа состоит из двух объектных модулей M1.OBJ и M2.OBJ, то команда компоновки будет следующей:

 

TLINK M1+M2, M

 

В первом параметре через символ «+» перечисляются имена всех объектных модулей (если расширение OBJ, его можно не указывать), а второй параметр указывает имя исполняемого файла.

Каждый модуль многомодульной программы представляет последовательность предложений, с последней директивой END:

 

< предложение >

...

< предложение >

END [< точка входа >]

 

Среди модулей должен быть выделен основной (главный), с которого начинается выполнение программы и который передает управление остальным модулям. Главный модуль отличается наличием точки входа. Если точка входа определена и в других модулей, главным модулем будет считаться тот, что был указан первым в параметрах компоновщика.

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

Для возможности использования идентификаторов, меток и подпрограмм в других модулях они должны быть экспортированы. Для этого существует специальная директива:

 

PUBLIC < имя >,..., < имя >

 

Директива может быть указана в любом месте модуля любое число раз. Однако обычно для удобства ее помещают в самом начале модуля.

С другой стороны, модуль, импортирующий идентификаторы, метки и подпрограммы, должен продекларировать их с помощью директивы:

 

EXTRN < имя >: < тип >,..., < имя >: < тип >

 

где < тип > – тип данных BYTE, WORD, DWORD, ABS, NEAR или FAR.

 

Директива также может быть указана в любом месте модуля любое число раз. Типы BYTE, WORD и DWORD используются для имен переменных, тип ABS – для имен констант, NEAR и FAR – для меток или имен процедур.

Рассмотрим применение директив PUBLICи EXTRN. Следующий модуль экспортирует процедуру PRC и переменную IDW:

 

PUBLIC PRC, ID

 

DATASG SEGMENT

IDW DW 200h

DATASG ENDS

 

CODESG SEGMENT

ASSUME CS: CODESG, DS: DATASG

PRC PROC FAR

...

PRC ENDP

CODESG ENDS

 

END

 

Второй модуль является главным. Он импортирует объявления первого модуля. Для доступа к переменной IDW необходимо настроиться на программный сегмент DATASG. Однако напрямую обратиться к DATASG невозможно, т.к. имена сегментов запрещено описывать в разделе PUBLIC. Поэтому здесь используется следующий прием.

Вспомним, что оператор SEG позволяет получить адрес сегмента, в котором определен указанный в качестве параметра идентификатор. В нашем примере таким идентификатором будет IDW. С помощью вспомогательного регистра сохраним адрес сегмента данных в дополнительном сегментном регистре ES. Теперь для обращения к переменной IDW необходимо использовать сегментирование по ES:

 

EXTRN PRC: FAR, IDW: WORD

 

CODE SEGMENT

ASSUME CS: CODE

S: MOV AX, SEG IDW

MOV ES, AX

...

MOV BX, ES:IDW

...

CODE ENDS

 

END S




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


Дата добавления: 2014-11-16; Просмотров: 811; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.