
- •Системное программное обеспечение
- •Способы адресации данных
- •Способы адресации данных
- •Способы адресации данных
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Структура программы на языке Ассемблер
- •Системное программное обеспечение
- •Система команд процессора 8086
- •Команды передачи данных
- •Команды передачи данных
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Логические команды
- •Логические команды
- •Команды управления потоком вычислений
- •Команды управления потоком вычислений
- •Команды управления потоком вычислений
- •Команды управления потоком вычислений
- •Команды управления потоком вычислений
- •Команды управления процессором
- •Команды управления процессором
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Системное программное обеспечение
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80286
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386
- •Расширение системы команд в процессоре 80386

Системное программное обеспечение
Лекция № 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 (выравнивание на границу параграфа)