Передача аргументов через общую область памяти — КиберПедия 

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Передача аргументов через общую область памяти

2017-09-01 244
Передача аргументов через общую область памяти 0.00 из 5.00 0 оценок
Заказать работу

 

Этот вариант передачи аргументов предполагает, что вызывающая и вызываемая программы условились использовать некоторую область памяти как общую. Транслятор предоставляет специальное средство для организации такой области памяти. Ранее мы разбирали директивы сегментации и их атрибуты. Один из них — атрибут комбинирования сегментов. Наличие этого атрибута указывает компоновщику TLINK, как нужно комбинировать сегменты, имеющие одно имя. Значение common означает, что все сегменты, имеющие одинаковое имя в объединяемых модулях, будут располагаться компоновщиком, начиная с одного адреса оперативной памяти. Это значит, что они будут просто перекрываться в памяти и, следовательно, совместно использовать выделенную память.

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

Рассмотрим листинг 14.4 с примером использования общей области памяти для обмена данными между модулями. На этот раз программа состоит уже из двух независимых модулей, находящихся в разных файлах, и поэтому они представляют собой отдельные единицы трансляции. Функционально эти модули реализуют несложную задачу, которая заключается в том, что вызываемые процедуры формируют строку символов и передают ее через общую область, а вызывающая их процедура main выводит строку на экран.

 

Листинг 14.4. Передача аргументов через общую область памяти (модуль 1);

 

 

 

Вызываемые процедуры находятся в другом модуле (листинг 14.5).

 

Листинг 14.5. Передача аргументов через общую область памяти (модуль 2)

 

 

 

 

 

Обратите внимание, что совсем не обязательно, чтобы данные в сегментах common имели одинаковые имена. Главное, и за этим нужно следить с особой тщательностью, — структура общих сегментов. Она должна быть абсолютно идентична во всех модулях данной программы, использующих обмен данными через общую память.

Так как в данном примере программа состоит уже из двух модулей, то наверняка возникнет вопрос, как собрать ее в один исполняемый модуль. Можно предложить следующую последовательность шагов:

 

1. Выполнить трансляцию модуля prg14_4.asm и получить объектный модуль prg14_4.obj.

2. Выполнить трансляцию модуля prg14_5.asm и получить объектный модуль prg14_5.obj.

3. Скомпоновать программу утилитой TLINK командной строкой вида

tlink /v prg14_4.obj + prg14_5.obj

В итоге будет создан исполняемый модуль prg14_4.exe. Вы можете исследовать этот модуль, используя отладчик, но имейте в виду следующее. В окне MODULE вы увидите только исходный текст программы prg14_4.asm. Для того чтобы войти по команде call в вызываемую процедуру, необходимо нажимать клавишу F7. Обработка этой команды приведет к открытию второго окна, в котором будет выведен текст вызванной процедуры.

 

 


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

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.007 с.