Рис. 5.20. Окно дампа памяти
вания и инициализации памяти. Речь идет об указании в поле операндов директив
DW и DD идентификатора из поля имени этой или другой директивы резервирова-
ния и инициализации памяти. В нашем примере сегмента данных это директивы
с идентификаторами adr и
Когда транслятор встречает директивы описа-
ния памяти с подобными операндами, то он формирует в памяти значения адресов
тех переменных, чьи идентификаторы указаны в качестве операндов. В зависимо-
сти от директивы, применяемой для получения такого адреса, формируется либо
полный адрес (директива DD) в виде двух байтов сегментного адреса и двух байтов
смещения, либо только смещение (директива dw). Для тренировки найдите в пред-
ставленном дампе поля, соответствующие идентификаторам adr и adr_full, и про-
анализируйте их содержимое.
Любой переменной, объявленной с помощью директив описания простых ти-
пов данных, ассемблер присваивает три атрибута:
сегмент (seg) — адрес начала сегмента, содержащего переменную;
смещение (offset) в байтах от начала сегмента с переменной;
тип (type) — объем памяти, выделяемой переменной в соответствии с директи-
вой объявления переменной.
Получить и использовать значение этих атрибутов в программе можно с по-
мощью операторов ассемблера SEG, OFFSET и TYPE.
Итоги
В заключение отметим, что в языке ассемблера существуют средства для опи-
сания сложных типов данных, основой которых являются описанные в этой главе
простые типы данных. Подробному обсуждению сложных типов данных посвяще-
на глава 13.
Итоги
Программа на ассемблере, отражая особенности архитектуры процессора, со-
стоит из сегментов — блоков памяти, допускающих независимую адресацию.
Каждый сегмент может состоять из предложений языка ассемблера четырех
типов: команд ассемблера, макрокоманд, директив ассемблера и строк коммен-
тариев.
Формальное описание синтаксиса языков программирования, в том числе ас-
семблера, удобно выполнять с использованием таких
язы-
ков, как синтаксические диаграммы и нормальные формы Бэкуса-Наура. Син-
таксические диаграммы более наглядны, расширенные формы Бэкуса-Наура
более компактны.
Предложения ассемблера формируются из лексем, представляющих собой син-
таксически неразделимые последовательности допустимых символов языка,
имеющие смысл для транслятора.
Ассемблер допускает большое разнообразие типов операндов, которые могут
задаваться неявно или содержаться непосредственно в команде, в регистрах
и в памяти. В
машинной команде возможны следующие соче-
тания операндов:
регистр — регистр;
D регистр — память;
D память — регистр;
D непосредственный операнд — регистр;
П непосредственный операнд — память.
Операндами в команде могут быть числа,
ячейки памяти, символь-
ные идентификаторы. При необходимости операнд может быть задан выраже-
нием.
Ассемблер позволяет организовать гибкую прямую и косвенную адресацию опе-
рандов в памяти.
Исходный текст программы разбивается на сегменты с помощью директив сег-
ментации, которые делятся на стандартные и упрощенные.
Упрощенные директивы сегментации позволяют унифицировать интерфейс
с языками высокого
и облегчают разработку программ, повышая нагляд-
ность кода.
Транслятор TASM поддерживает разнообразные типы данных, которые делят-
ся на простые (базовые) и сложные. Простые типы служат основой для постро-
ения сложных типов данных.
Глава 5. Синтаксис ассемблера
III Директивы описания простых типов данных позволяют резервировать и при
необходимости инициализировать области памяти заданной длины.
Доступ к данным в памяти должен производиться с учетом принципа их разме-
щения процессорами IA-32 — «младший байт по младшему
Каждой переменной, объявленной с помощью директивы описания данных,
ассемблер назначает атрибуты, доступ к которым можно получить с помощью
соответствующих операторов ассемблера.
Do'stlaringiz bilan baham: |