<<
>>

Использование директив EXTRN и PUBLIC

Директивы EXTRN и PUBLIC мы уже упоминали, когда рассматривали варианты вза- имного расположения вызывающей программы и вызываемой процедуры. Ко все- му сказанному добавим, что директивы EXTRN и PUBLIC также можно использовать для обмена информацией между модулями.
Назначение и форматы этих директив остаются теми же, поэтому сейчас опишем только порядок их использования для обмена данными. Возможны несколько вариантов их применения: Я оба модуля используют сегмент данных вызывающей программы; * у каждого из модулей есть собственный сегмент данных; И модули используют атрибут комбинирования (объединения) сегментов private в директиве сегментации SEGMENT. Рассмотрим эти варианты на примере программы, которая определяет в сег- менте данных две символьные переменные и вызывает процедуру, выводящую эти символы на экран. В первом варианте, в котором два модуля используют только сегмент данных вызывающей программы, не требуется переопределения сегмента данных в вызы- ваемой процедуре. В листинге 15.6 в вызывающей программе определены две пе- ременные, вывод на экран которых осуществляет вызываемая программа (лис- тинг 15.7). Листинг 15.6. Первый вариант использования директив EXTRN и PUBLIC (модуль 1) продолжение -∑У^ Сборка программы из двух модулей для этого и следующих вариантов осуще- ствляется так же, как было показано в листингах 15.4 и 15.5. Во втором варианте у каждого из модулей есть свой собственный сегмент дан- ных. В этом случае для доступа к разделяемым переменным из другого модуля требуется переопределение сегмента данных в вызываемой процедуре (строки 17- 19 и 23-24 листинга 15.8).
Листинг 15.8.
Второй вариант использования директив extrn и public

my_proc2 endp code ends end Рассмотрим улучшенный второй вариант программы (листинг 15.9). В преды- дущем случае мы использовали для адресации данных в разных сегментах данных один регистр DS, а теперь для доступа к разделяемым переменным из другого мо- дуля задействуем один из дополнительных сегментных регистров данных, к при- меру ES. Заметьте, что обращение к данным другого сегмента осуществляется с по- мощью префикса замены сегмента (строки 18 и 20).

Листинг 15.9.Улучшенный второй вариант использованиядиректив extrn и public

Третий вариант предполагает использование атрибута комбинирования (объ- единения) сегментов public в директиве сегментации SEGMENT для сегментов дан- ных модулей (листинги 15.10и15.11).Это значение атрибута комбинирования за- ставляет компоновщик объединить последовательно сегменты с одинаковыми именами. Все адреса и смещения будут вычисляться относительно начала этого нового сегмента. Тогда не понадобится производить дополнительной настройки сегментных регистров (как было в двух предыдущих случаях). Листинг 15.10. Третий вариант использования директив extrn и public (модуль 1) ;рrgl5_lθ.asm ;Вызывающий модуль include mac.inc extrn mуjrос2:fаr,реrО:bуtе public реrl,реr2 stk segment stack db 256 dup (0) stk ends продолжение Листинг 15.10 (продолжение) data segment para public "data" perl db "1" per2 db "2" data ends code segment main procfar assume cs.-code,ds:data,ss : stk mov ax,data mov ds,ах mov dl ,реrθ OutChar call mу_рrос2 exi t main endp code ends end main Листинг 15.11. Третий вариант использования директивехtrп и public (модуль 2) ; рrgl5_ll.asm ;Вызываемый модуль include mас.iпс extrn реrl:byte,реr2:byte public mу_рrос2,реrθ data segment para public "data" реrθ db "0" data ends code segment mу_рrос2 proc far assume cs:code,ds:data ;ds загружать не надо, так как компоновщик его присоединит ;к сегменту данных первого модуля ;вывод символов на экран mоv dl,реrθ ОutСhаr mоv dl,реrl ' OutChar mov dl,per2 ОutСhаr mоv dt,реrθ OutChar rеt mу_рrос2 епdр . code ends end

<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Использование директив EXTRN и PUBLIC:

  1. Раздел III Использование достижений криминалистической психологии при собирании, оценке, использовании личностной информации
  2. Статья 231. Незаконный сбор с целью использования или использование сведений, составляющих коммерческую или банковскую тайну
  3. V, 1. 4. Использование средних.
  4. Использование тестов
  5. Статья 441. Использование произведения
  6. 4. Особенности использования секретных изобретений
  7. 8.1.4. Использование языка
  8. § 5. Обязательства по расчетам с использованием аккредитива
  9. Прием использования всехречевых средств.
  10. Статья 453. Использование исполнения
  11. § 4. Свободное использование произведений
  12. Этичное использование типа
  13. 1.2. Использование фокусированного интервью
  14. 2.6. Свободное использование произведений
  15. Тест «Необычное использование»
  16. 5. Использование биоэнергетики в Украине
  17. Использование вопросов-суждений.