- •Лекция 15
- •Режимы работы процессора
- •Базовая среда выполнения
- •Базовая среда выполнения
- •Базовая среда выполнения
- •Базовая среда выполнения
- •Дополнительные
- •Дополнительные
- •Организация памяти
- •Модели памяти
- •Модели памяти
- •Модели памяти
- •Модели памяти
- •Модели памяти
- •Регистры базовой среды
- •Регистры общего
- •Регистры общего
- •Сегментные регистры
- •Регистр флагов
- •Счетчик команд
- •Адресация операндов
- •Непосредственные
- •Регистровые операнды
- •Ячейка памяти
- •Ячейка памяти
- •Ячейка памяти
- •Ячейка памяти
- •Адресация портов
Адресация операндов
Каждая машинная инструкция в архитектуре 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.