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


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


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

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

  •  data      –  размещает сегмент во внутренней памяти данных с прямой адресацией;

  •  idata     –  размещает сегмент во внутренней памяти данных с косвенной адресацией;

  •  bit         –  размещает сегмент во внутренней памяти данных с битовой адресацией;

  •  xdata     –  размещает сегмент во внешней памяти данных;

  •  code     –  размещает сегмент в памяти программ;

После определения имени сегмента можно использовать этот сегмент при помощи директивы rseg. Использование сегмента зависит от области памяти, для которой он предназначен. Если это память данных, то в сегменте объявляются байтовые или битовые переменные. Если это память программ, то в сегменте размещаются константы или участки кода программы. Пример использования директив segment и  rseg для объявления битовых переменных приведен на рисунке 8.31.

 

_data segment idata

  public VershSteka

 

;Определение переменных----------------------------

rseg _data

buferKlav:  ds 8

VershSteka:

  End

Рис. 8.31. Пример использования директив segment и rseg для объявления байтовых переменных

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

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

Еще один пример использования директив segment и  rseg приведен на рисунке 8.32. В этом примере директива  segment используется для объявления сегмента битовых переменных.

 

_bits segment bit

  public knIzm,strVv

 

;Определение битовых переменных -------------------------------------

  rseg _bits

knIzm: dbit 1

strVv: dbit 1

  end

Рис. 8.32. Пример использования директив segment и rseg для объявления битовых переменных

 

[ ] [ ]




- Начало -  - Назад -  - Вперед -