Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по Микропроцессорам_МИА.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1.67 Mб
Скачать

Лабораторная работа № 2 Сегментация памяти, директивы ассемблера

Любые ассемблерные программы содержат, по крайней мере, один сегмент-сегмент кода. В некоторых программах используется сегмент для стековой памяти и сегмент данных для определения данных. Ассемблерная директива для описания сегмента SEGMENT имеет следующий формат:

< имя > SEGMENT

:

.

< имя > ENDS

Имя сегмента обязательно, оно должно быть уникальным. Директива ENDS означает конец сегмента.

Пример оформления сегмента данных с именем “data”:

data SEGMENT

A dB 35h, 44, 0FAh

AB dW 3145h, 4456h, 1F4Ah

A3 dB "Абрикосовое дерево"

data ENDS

Сегмент данных предназначен для определения констант, рабочих полей и областей для ввода-вывода. В соответствии с имеющимися директивами в ассемблере разрешено определение данных различной длины: например, директива DB определяет байт, а директива DW определяет слово.

Формат директивы определения данных:

[имя] DN <выражение>

Имя элемента данных не обязательно, но если в программе есть ссылка на некоторый элемент данных, то это делается посредством имени. Например:

MOV AX, AB ;содержимое слова по адресу АВ (см. пример выше) пересылается в регистр АХ.

После выполнения этого оператора в АХ будет записано число 3145h. Символическое имя АВ является адресом определенной ячейки памяти. В нашем случае этот адрес равен 3, т.к. адресация в сегменте относительна к началу сегмента. Символическое имя А транслируется системой ассемблирования в значение равное 0. Это адрес первого байта в сегменте (содержимое его равно 35h). Далее определены еще два байта со значениями 44 и 0FAh, следовательно, адрес АВ вычисляется как 0+3 байта =3.

Команда MOV AL, A+2 загружает в регистр АL значение FA, команда MOV AX, AB+2 загружает регистр АХ значение 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(?) ;десять неопределенных слов

DB 5 DUP(14) ;пять байт содержащих 0Eh

DB 3 DUP(4 DUP(8)) ;двенадцать восьмерок.

Выражение может содержать символьную строку. Символьная строка используется для описания данных, таких, как, например, имена людей или заголовки страниц. Содержимое строки отмечается одиночными кавычками. Ассемблер переводит символьные строки в объективный код в обычном формате ASCII. Символьная строка определяется только директивой DB:

KSP DB 'ТРАВОСТОЙ'

Если в программе необходимо изменить последнюю букву в слове ТРАВОСТОЙ на "П", запишем оператор:

mov KSP+8, 'П'