Директивы сегментации. Напомним, что микропроцессор имеет шесть сегментных регистров, посредством которых может одновременно работать:
Напомним, что микропроцессор имеет шесть сегментных регистров, посредством которых может одновременно работать:
•с одним сегментом кода;
•с одним сегментом стека;
•с одним сегментом данных;
•с тремя дополнительными сегментами данных.
Еще раз напомним, что физически сегмент представляет собой область памяти, занятую командами и (или) данными, адреса которых вычисляются относительно значения в соответствующем сегментном регистре.
Важно отметить, что функциональное назначение сегмента несколько шире, чем простое разбиение программы на блоки кода, данных и стека. Сегментация является частью более общего механизма, связанного с концепцией модульного программирования. Она предполагает унификацию оформления объектных модулей, создаваемых компилятором, в том числе с разных языков программирования. Это позволяет объединять программы, написанные на разных языках.
Сегменты на ассемблере описываются с помощью директивы SEGMENT.
Синтаксическое описание сегмента представляет собой следующую конструкцию
<имя сегмента> SEGMENT [тип выравнивания] [ тип комбинирования]
[класс сегмента] [ тип размера сегмента]
<тело сегмента>
<имя сегмента> ENDS
У параметров много возможных значений.
А с помощью директивы ASSUME можно сообщить транслятору какой сегмент, к какому сегментному регистру привязан.
Формат директивы:
ASSUME <сегментный регистр>: <имя сегмента>
Директивы SEGMENT и ASSUME - стандартные директивы сегментации.
Описание этих директив достаточно сложное и требует серьезного знания ассемблера и архитектуры, поэтому
для простых программ, содержащих по одному сегменту для кода, данных и стека обычно используются упрощенные описания соответствующих сегментов.
Трансляторы MASM и TASM предоставляют возможность использования упрощенных директив сегментации (вместо SEGMENT).
! Стандартные и упрощенные директивы сегментации не исключают друг друга.
! Стандартные директивы используются, когда программист желает получить полный контроль над размещением сегментов в памяти и их комбинированием с сегментами других модулей.
! Упрощенные директивы целесообразно использовать
1) для простых программ
2) программ, предназначенных для связывания с программными модулями, написанными на языках высокого уровня (это позволяет компоновщику эффективно связывать модули разных языков за счет стандартизации связей и управления).
Дата добавления: 2016-02-20; просмотров: 1128;