Любые ассемблерные программы содержат, по крайней мере, один сегмент: сегмент кода. В некоторых программах используется сегмент для стековой памяти и сегмент данных для определения данных. Ассемблерная директива для описания сегмента SEGMENT имеет следующий формат:
<имя> SEGMENT
:
:
<имя> ENDS
Имя сегмента обязательно, оно должно быть уникальным. Директива ENDS означает конец сегмента.
Пример оформления сегмента данных с именем “data”:
Data SEGMENT
A dB 35h,44,0FAh
AB dW 3145h, 1F4Ah
A3 dB “Абрикосовое дерево”
data ENDS
Сегмент данных предназначен для определения констант, рабочих полей и областей для ввода вывода. В соответствии с имеющимися директивами в ассемблере разрешено определение данных различной длины: например, директива dB определяет байт, а директива dW определяет.
Формат директивы определения данных:
[имя] DN <выражение> (1)
Имя элемента данных не обязательно, но если в программе есть ссылка на некоторый элемент данных, то это делается по средствам имени. Например: MOV AX, AB
Здесь содержимое слова по адресу AB (см. пример выше) пересылается в регистр AX. После выполнение этого оператора в AX будет записано число 3145h. Символическое имя AB является адресом определенной ячейки памяти. В нашем случае этот адрес равен 3, т.к. адресация в сегменте относительна к началу сегмента. Символическое имя А транслируется системой ассемблирования в значение равное 0. Это адрес первого байта в сегменте (содержимое его равно 35h). Далее определены еще два байта со значением 44 и 0FAh, следовательно, адрес AB вычисляется как 0+3 байта=3.
|
|
Команда MOV AL, А+2 загружает в регистр AL значение FA, команда MOV AX, AB+2 загружает в регистр AX значение 4456h.
DNв выражении (1) может иметь следующие мнемоники: DB (байт), DW (слово), DD (двойное слово), DQ (учетверенное слово), DT (10 байт).
Выражение может содержать константу, например:
FL DB 25
Несколько констант: FL1 DB 11,12,25,84,91,… разделенных запятыми и ограниченных длиной строки.
Ассемблер определяет эти константы в виде последовательности смежных байтов. Ссылки по имени FL1 указывает на первую константу –11, по FL1+1, на вторую, равную 12.
Выражение может содержать знак вопроса для неопределенного значения: FL2 DW?
Здесь резервируется два байта. Выражение допускает так же повторение константы в следующем формате:
[имя] DN <число повторений> DUP (<выражение>)
Например: DW 10 DUP(?); 10 неопределенных слов
DB 5 DUP(14); 5 байт содержащих 0ЕН
DB 3 DUP (4 DUP(8)); 12 восьмерок.
Выражение может содержать символьную строку. Символьная строка используется для описания данных, таких, как, например, имена людей или заголовки страниц. Содержимое строки отмечается одиночными кавычками. Ассемблер переводит символьные строки в объективный код в обычном формате ASCII. Символьная строка определяется только директивой DВ: KSP DB ‘ТРАВОСТОЙ’
Если в программе необходимо изменить последнюю букву в слове ТРАВОСТОЙ на “П”, запишем оператор: MOV KSP+8, ‘П’.