- •Дагестанкий государтвенный технический университет
- •Махачкала 1997 г.
- •Лабораторная работа №1
- •1.1.Создание выполнимого файла, работа в отладчике, изучение оператора пересылки mov.
- •1.2. Оператор mov.
- •1.3. Основные команды отладчика afd.
- •1.4. Индивидуальные задания.
- •2.1. Сегментация памяти, директивы ассемблера
- •2.2. Прямая адресация
- •2.3. Косвенная адресация
- •2.4. Директива assume
- •2.5. Индивидуальные задания
- •Лабораторная работа №3
- •3.1. Директивы equ, label, команды сложения и вычитания
- •3.1.1. Директивы equ
- •3.1.2. Директива label
- •3.2. Команды сложения и вычитания
- •3.3. Индивидуальные задания Вариант 1.
- •Вариант 2.
- •Вариант 3.
- •Вариант 4.
- •Вариант 5.
- •Вариант 6.
- •Вариант 7.
- •Вариант 8.
- •Вариант 9.
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •3.4. Примечание
- •Лабораторная работа №4
- •4.1. Изучение операторов обмена xchg и xlat
- •. Индивидуальные задания Вариант 1.
- •Вариант 2.
- •Вариант 3.
- •Вариант 4.
- •Вариант 5.
- •Вариант 6.
- •Вариант 7.
- •Вариант 8.
- •Вариант 9.
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •4.3. Приложение
- •Литература
- •Оглавление
- •Хачумов Вячbслав Михайлович Исмаилов Шейх-Магомед Абдулаевич Лагиева Марият Тагировна
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, ‘П’.