Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВС сети и телекомм-практикум.doc
Скачиваний:
45
Добавлен:
01.07.2025
Размер:
614 Кб
Скачать
☆

6. Директивы распределения памяти

Любая программа работает с памятью, поэтому возникает необходимость работать с ее распределением. Для подобной работы используются специальные директивы, а именно псевдокоманды и структуры.

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

имя переменной D* значение

Под D* имеем в виду одну из следующих псевдокоманд:

- DB – определить байт;

- DW – определить слово (2 байта);

- DD – определить двойное слово (4 байта);

- DF – определить 6 байт;

- DQ – определить учетверенное слово (8 байт);

- DT – определить 10 байт.

Значение может быть числом, несколькими числами, символами (их надо брать в кавычки). В качестве дополнения используются операторы ? и DUP, но все это надо разделять запятыми. Все установленные таким образом данные окажутся в выходном файле, а имя переменной будет соответствовать адресу первого из указанных значений.

В каждом случае имеет смысл использовать разное количество памяти. К примеру, если необходимо задать простую строку символов, то достаточно выжелять в памяти один байт на каждый символ с помощью директивы DB. А вот если работаем со строкой символов с атрибутами (цвет, курсив и т.д.), но необходимо два байта памяти (один на собственно символ, а второй на атрибуты), тогда используют DW. Для больших чисел в степени и т.д. тоже используют другие варианты псевдокоманд.

msgtext DB ‘Privet’ ; обычная строка символов

naborchisel DB 1, 2, 3, 4, 5 ; набор простых чисел

slozchislo DD 5.8e6 ; число типа float, да еще с возведением в степень.

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

счетчик DUP значение

А применительно к псевдокомандам:

метка D* счетчик DUP значение

metka DB 64 dup (?)

Показанный пример создает массив из 64 неинициализированных байт, на адрес первого из которых указывает имя metka. Если бы мы хотели заполнить массив нулями или единицами, то сведали бы следующее:

metka DB 64 dup (0)

metka DB 64 dup (1)

Как известно, в языках высокого уровня широко используется такое понятие как структуры. Естественно, есть они и в ассемблере. Директива STRUC позволяет определить структуру данных аналогично структурам в языках высокого уровня. Последовательность директив

имя STRUC

поля

имя ENDS

где поля – любой набор псевдокоманд определения переменных или структур, устанавливает, но не инициализирует структуру данных. В дальнейшем для ее создания в памяти используют имя структуры как псевдокоманду:

метка имя <значения>

Если же нам необходимо что-то считать из структуры или записать в нее, то использует оператор «.». В случае использования сложенной структуры доступ к ее содержимому получаем через еще один такой же оператор «.».