Курс лекций - Микропроцессоры



Использование сегментов в языке программирования ассемблер


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

Рисунок 1. Разбиение памяти программ и памяти данных на сегменты.

Перечисленные выше причины приводят к тому, что желательно явным образом выделить по крайней мере три сегмента:

  1. программу;
  2. переменные;
  3. константы.

Наиболее простой способ определения сегментов это использование абсолютных сегментов памяти. При этом способе распределение памяти ведётся вручную точно также, как это делалось при использовании директивы . В этом случае начальный адрес сегмента жёстко задаётся программистом и он же следит за тем, чтобы сегменты не перекрывались друг с другом в . Использование абсолютных сегментов позволяет более гибко работать с памятью данных, так как теперь байтовые переменные в памяти данных могут быть назначены при помощи директивы резервирования памяти DS, а битовые переменные при помощи директивы резервирования битов DBIT.

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

  1. - абсолютный сегмент в области
  2. - абсолютный сегмент в области
  3. - абсолютный сегмент в области
  4. - абсолютный сегмент в области
  5. - абсолютный сегмент в области

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


Содержание  Назад  Вперед