Символические имена в языке ассемблера - Команда DS

Когда мы составляем программу для обработки некоторой информации, хранящейся в памяти, то нам нужно позаботиться о резервировании места для этой информации. Одним из способов резервирования памяти является использование команды DS (Define Storage — определить память).

DS-команда является командой ассемблеру на резервирование указанного количества памяти и присвоение адресу этой области памяти символического имени, если таковое было указано. DS является псевдокомандой и не имеет эквивалента на машинном языке, это просто информация для самого ассемблера. Однако ее использование оказывает воздействие на выдачу ассемблера. DS-предложение вызывает резервирование места непосредственно в программе на машинном языке. В адресные части команд, использующих имя DS-команды, будет помещен адрес памяти, соответствующий этому имени.

В качестве примера рассмотрим предложение

WORDS DS 3F

Символ DS располагается в поле операции. Это предложение запрашивает резервирование трех полных слов (3F) и присвоение имени WORDS адресу первого из зарезервированных 12 байтов. Поскольку выделение памяти мы запросили полными словами, будет произведено выравнивание по границе полного слова, т.е. в качестве адреса WORDS будет выбрано значение, кратное 4.

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

WORDS

LR

AR

DS

MR

3,8

4,6

3F

2,6

Некоторое количество памяти может быть пропущено ассемблером для осуществления выравнивания. Ассемблирование первых двух предложений даст результат

18381А46

Если следующий байт является первым байтом полного слова, то память будет выделена так:

18381А4612 байтов зарезервировано 1С26

Если следующий после команды AR байт не является байтом полного слова, то для выравнивания будут пропущены 2 байта:

18381А46  2 байта пропущено  12 байтов зарезервировано  1С26

В рассмотренном примере для иллюстрации принципа выполнения команды DS ассемблером она была помещена между некоторыми машинными командами. Но при выполнении написанной программы машина будет интерпретировать то, что внесено в поле WORDS, как команды со всеми вытекающими отсюда последствиями. Поэтому никогда не следует резервировать память там, где информация, записанная в ней, может быть воспринята как часть выполняемой программы. К вопросу о том, куда же на самом деле следует помещать команды DS и DC, мы вернемся позднее.

Общей формой DS-предложения является

Имя DS КолТип

Поле имени может содержать любое имя, допустимое в языке ассемблера, а также может быть оставлено пустым. Сокращение «Кол» (количество) означает коэффициент повторения, т. е. число единиц памяти определенного типа, которое должно быть зарезервировано. Значения в поле «Тип» могу? быть следующими:

F: Полное слово

Н: Полуслово

D: Двойное слово

С: Байт

Результатом выполнения команды DS будет:

1. Резервирование стольких единиц памяти типа, указанного в поле «Тип», сколько задано полем «Кол» с выравниванием границ, если это необходимо.

2. Присвоение символического имени, указанного в поле имени

команды, адресу первого байта зарезервированной области. Например, предложение

HALVES DS 5Н

резервирует пять полуслов и присваивает имя HALVES первому зарезервированному байту. Аналогично предложение

DOUBLE DS D

резервирует одно двойное слово (единица, соответствующая значению поля «Кол», может быть опущена), которое получает имя DOUBLE.

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



 
Статьи раздела