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

2.1. Сегментация памяти, директивы ассемблера

Любые ассемблерные программы содержат, по крайней мере, один сегмент: сегмент кода. В некоторых программах используется сегмент для стековой памяти и сегмент данных для определения данных. Ассемблерная директива для описания сегмента 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, ‘П’.