7. Директивы определения сегментов, закрепления сегментных регистров. Общая структура программы.

Директивы определения сегментов

имя_сегмента SEGMENT [тип_выравнивания] [тип_комбинирования] [класс_сегмента] [тип_размера_сегмента]

Имена сегментов формируются по правилу формирования имен.

Типы выравнивания бывают: byte ,word :2, dword :4, para :16, page :256, mempage :4кб
Сообщает компоновщику с какого адреса нужно размещать сегмент. По умолчанию – para.

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

  • private – по умолчанию – сегменты разных модулей с одинаковыми именами не будут объединяться вместе
  • public – все сегменты с одинаковыми именами объединяются. Новый сегмент будет непрерывным, его размер равен сумме всех сегментов
  • common – сегменты с одинаковым именем будут располагаться по одному и тому же адресу. Размер нового сегмента равен размеру максимального.
  • at (xxxx)16 – указывает компоновщику адрес расположения сегмента
  • stack – объединяет сегменты так же, как и в public, при этом смещения внутри этого сегмента считаются смещениями относительно сегментного регистра SS

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

    Тип размера сегмента:

  • USE16 – по-умолчанию используются 16-разрядные регистры
  • USE32 – 32-разрядные регистры

Директивы закрепления сегментных регистров сообщают транслятору о функциональном назначении сегментов:

  • ASSUME имя_сегм_регистра : имя_сегмента
  • ASSUME имя_сегм_регистра :NOTHING – разрывает связь сегмента и регистра
  • ASSUME NOTHING – разрывает связь всех сегментов

Загрузка начального значения в

  • CS происходит автоматически
  • SS происходит автоматически, если указан тип комбинирования stack
  • DS и дополнительные регистры адрес начала сегмента заносится программистом



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

  • команды или инструкции, представляющие собой символические аналоги машинных команд. В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды системы команд микропроцессора;
  • макрокоманды — оформляемые определенным образом предложения текста программы, замещаемые во время трансляции другими предложениями;
  • директивы, являющиеся указанием транслятору ассемблера на выполнение некоторых действий. У директив нет аналогов в машинном представлении;
  • строки комментариев, содержащие любые символы, в том числе и буквы русского алфавита. Комментарии игнорируются транслятором.

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

  • поля метки;
  • поля операции;
  • поля операндов;
  • поля комментариев.
17.07.2015