Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 курс / Лекции / Лекция 15 - Программная модель IA-32.ppt
Скачиваний:
67
Добавлен:
18.02.2023
Размер:
389.12 Кб
Скачать

Адресация операндов

Каждая машинная инструкция в архитектуре IA-32 может иметь операнды, которые могут быть заданы в явной или неявной форме.

Данные для операндов источников могут быть расположены в:

самой инструкции,

регистре,

ячейке памяти,

I/O порте.

Если инструкция возвращает данные, то они могут быть возвращены в:

регистр,

ячейку памяти,

I/O порт.

Непосредственные

значения

При указании непосредственных операндов, значение этого операнда указывается в виде константного значения сразу в инструкции.

Например: mov ax,10 add ax,30

Регистровые операнды

Данные для инструкции содержатся в одном из следующих регистров:

32-bit РОН (EAX, EBX, ECX, EDX, EBP, ESP, ESI, EDI);

16-bit РОН (AX, BX, CX, DX, BP, SP, SI, DI);

8-bit РОН (AL, AH, BL, BH, CL, CH, DL, DH);

сегментных регистрах (CS, DS, ES, FS, GS, SS);

регистре флагов (EFLAGS);

регистрах арифметического сопроцессора;

MMX регистрах;

XMM регистрах;

регистрах управления;

отладочных регистрах;

регистрах состояния машины.

Ячейка памяти

Для указания в качестве операнда адреса ячейки памяти необходимо указать сегмент и смещение внутри этого сегмента в следующем формате:

сегмент:[смещение]

Если сегмент не указывается, то используется сегмент по умолчанию — DS (кроме случая, когда в качестве базы указаны регистры ESP (SP) или EBP (BP). В этом случае в качестве сегмента по умолчанию используется регистр SS)

Ячейка памяти

В общем случае смещение вычисляется по формуле: База + (Индекс*Масштаб) + Смещение

где:

База — регистр общего назначения,

Индекс — регистр общего назначения (кроме ESP),Масштаб — целочисленное значение: 1, 2, 4 или 8.

Смещение — целочисленное значение разрядностью 8, 16 или 32 бит.

Ячейка памяти

База Индекс Масштаб Смещение

EAX

 

 

 

 

EAX

 

 

EBX

 

 

 

 

 

 

 

 

 

 

 

ECX

 

 

 

 

EBX

 

 

EDX

 

 

 

 

ECX

 

 

 

 

 

 

 

 

 

 

 

 

EDX

 

 

EBP

 

 

 

EBP

 

 

ESP

 

 

 

 

 

 

 

 

 

ESI

 

 

 

ESI

 

 

 

 

 

 

 

 

 

EDI

 

 

 

EDI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

нет

 

 

2

 

 

 

8 bit

 

 

 

 

 

4

 

 

 

16 bit

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

32 bit

 

 

 

 

 

 

 

Ячейка памяти

Возможны следующие формы записи смещения (эффективного адреса):

Смещение — представляет прямое указание смещения данных внутри сегмента (абсолютный или статический адрес).

База — представляет косвенное указание смещения данных внутри сегмента.

База + Смещение — для обращения к элементам массива, когда размер элемента не равен 2, 4 или 8 байтам, или для доступа к полям структуры.

(Индекс * Масштаб) + Смещение — адресация в массиве, размер элементов которого равен 2, 4 или 8 байт.

База + Индекс + Смещение — для обращения к двумерному массиву или для обращения к одной из нескольких экземпляров в массиве структур (записей).

База + (Индекс * Масштаб) + Смещение — указание всех компонентов смещения. Используется для обращения к элементам двумерного массива, когда размер его элементов равен 2, 4 или 8 байтам.

Адресация портов

Процессор поддерживает пространство ввода/вывода содержащие до 65 535 8-разрядных I/O портов. Также могут быть адресованы 16-ти и 32-ух разрядные I/O порты.

I/O порт может быть адресован непосредственно или косвенно как значение в регистре DX.

Соседние файлы в папке Лекции