Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Лекция № 4 Способы адресации данных Структура программы на языке Ассемблер.ppt
Скачиваний:
7
Добавлен:
07.08.2024
Размер:
1.91 Mб
Скачать

Системное программное обеспечение

Лекция № 4 «Способы адресации данных. Структура программы на языке Ассемблер»

Способы адресации данных

Способы адресации данных

Прямая адресация иногда называется адресацией по смещению, так как в команде указывается адрес смещения переменной в памяти относительно любого базового сегмента­. Если базовый сегмент не указан, то по умолчанию используется DS.

При косвенной адресации до 80386 можно было использовать только BX, SI, DI и BP, но потом эти ограничения были сняты и адрес операнда разрешили считывать также и из EAX, EBX, ECX, EDX, ESI, EDI, EBP и ESP (но не из AX, CX, DX или SP напрямую — надо использовать EAX, ECX, EDX, ESP соответственно или предварительно скопировать смещение в BX, SI, DI или BP). Как и в случае прямой адресации, DS используется по умолчанию, но не во всех случаях: если смещение берут из регистров ESP, EBP или BP, то в качестве сегментного регистра используется SS.

Способы адресации данных

Различают следущие виды косвенной адресации:

регистровая косвенная (смещение адреса хранится в одном из указанных регистров)

базовая (смещение адреса – сумма значений базового регистра и смещения)

индексная (смещение адреса – сумма значений индексного регистра и смещения)

базово–индексная (смещение адреса – сумма значений базового, индексного регистра и смещения)

Как видно, способов адресации для процессоров 8086 и 80286 довольно много. Но с появлением процессора­ 80386 их стало настолько больше, что глядя на рисунок, где они показаны, можно подумать, что речь идет совсем о другом процессоре.

Структура программы на языке Ассемблер

Программа на языке Ассемблер состоит из одного или нескольких сегментов. Сегменты программы имеют определенное назначение: кода, данных и стека. Деление программы на сегменты отражает сегментную организацию памяти процессоров Intel. Каждый сегмент состоит из совокупности отдельных строк, в терминах теории компиляции называемых предложениями языка Ассемблер.

Предложения ассемблера бывают четырех типов:

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

Структура программы на языке Ассемблер

макрокоманды — именованный блок команд языка ассемблера. После того как макрокоманда определена в программе, ее можно многократно вызывать в разных участках кода. При вызове макрокоманды, в код программы будут помещены содержащиеся в ней команды. Не следует путать вызов макропроцедуры с вызовом обычной процедуры, поскольку в первом случае команда вызова процедуры не используется

директивы, являющиеся указанием транслятору ассемблера на выполнение некоторых действий. У директив нет аналогов в машинном представлении

строки комментариев, содержащие любые символы, в том числе и буквы русского алфавита. Комментарии игнорируются транслятором

Структура программы на языке Ассемблер

Формат предложения Ассемблера описывается синтаксической диаграммой, отражающей логику работы транслятора при разборе входных предложений программы:

Любой путь на диаграмме от входа до выхода соответствует синтаксически правильному предложению языка.

Структура программы на языке Ассемблер

Формат директив Ассемблера описывается синтаксической диаграммой вида:

Из директив Ассемблера в первую очередь следует рассмотреть директивы сегментации программы. Физически сегмент представляет собой область памяти, занятую командами и (или) данными, адреса которых вычисляются относительно значения в соответствующем сегментном регистре. Синтаксическое описание сегмента на ассемблере:

Структура программы на языке Ассемблер

Операнды директивы SEGMENT:

Атрибут выравнивания сегмента (тип выравнивания) сообщает компоновщику о том, что нужно обеспечить размещение начала сегмента на заданной границе. Это важно, поскольку при правильном выравнивании доступ к данным в процессорах семейства 80х86 выполняется быстрее.

Структура программы на языке Ассемблер

Допустимые значения этого атрибута следующие:

oBYTE — выравнивание не выполняется. Сегмент может начинаться с любого адреса памяти

oWORD — сегмент начинается по адресу, кратному двум, то есть последний (младший) значащий бит физического адреса равен 0 (выравнивание на границу слова)

oDWORD — сегмент начинается по адресу, кратному четырем, то есть два последних (младших) значащих бита равны 0 (выравнивание на границу двойного слова)

oPARA — сегмент начинается по адресу, кратному 16, то есть последняя шестнадцатеричная цифра адреса должна быть 0h (выравнивание на границу параграфа)