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

Лекции 17 -

Система команд IA-32

Структура машинной

команды ss index base

0 или 1

префикс

1 или 2

0 или 1

0 или 1

0, 1, 2 или 4

0, 1, 2 или 4

КОП

mod r/

sib

Смещение в

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

 

m

 

команде

ный операнд

КОП

 

 

КОП

w

 

КОП

d w

mod reg/КОП r/m

 

 

КОП

s w

 

КОП

reg

 

КОП w

reg

 

Структура машинной команды

Виды префиксов:

Префикс замены сегмента – явно указывает какой сегментный регистр будет использоваться в данной команде для адресации стека или данных (2eh – cs, 36h – ss, 3eh – ds, 26h – es, 64h – fs, 65h – gs).

Префикс разрядности адреса (67h) – изменяет разрядность адреса для данной команды: либо с 16bit на 32bit либо наоборот.

Префикс разрядности данных (66h) – изменяет разрядность операнда для данной команды: либо с 16bit на 32bit, либо наоборот.

Префикс повторения – используется командами обработки строк для зацикливания (0f3h – rep, 0f3h – repe/repz, 0f2h – repne/repnz).

Префикс блокировки шины (0f0h) – используется для блокировки внешней шины на время выполнения данной команды.

Структура машинной команды

Поле mod определяет количество байт занимаемых в команде адресом операнда совместно с полем r/m в зависимости от значения:

mod=00b – поле смещение в команде отсутствует, и адрес операнда определяется содержимым базового и (или) индексного регистра;

mod=01b – смещение в команде присутствует, занимает 1 байт и модифицируется содержимым базового и (или) индексного регистра;

mod=10b – смещение в команде присутствует, занимает 2 или 4 байта и модифицируется содержимым базового и (или) индексного регистра;

mod=11b – означает, что операндов в памяти нет, они находятся в регистрах.

Структура машинной команды

Поле reg/коп определяет либо регистр, находящийся в команде на месте второго операнда, либо возможное расширения кода операции.

Поле r/m используется совместно с полем mod и определяет либо регистр, находящийся в команде на месте первого операнда (mod=11b), либо используемые для вычисления эффективного адреса (совместно с полем смещение в команде) базовые и индексные регистры.

Поле смещения в команде содержит 8-, 16- или 32-разрядное целое число со знаком, представляющее собой, полностью или частично, значение эффективного адреса операнда.

Поле непосредственного операнда – представляет собой 8-, 16- или 32- разрядный непосредственный операнд.

Структура машинной команды

Байт масштаб-индекс-база (SIB) присутствует в команде если mod равен 01b или 10b и значение поля r/m равно 100b.

Поле масштаба (ss) – определяет множитель 1, 2, 4 или 8.

Поле индекса (index) – используется для хранения номера индексного регистра, который применяется для вычисления эффективного адреса операнда.

Поле база (base) – используется для хранения номера базового регистра, который применяется для вычисления эффективного адреса операнда.

Сочетания операндов

В командах с двумя операндами допустимы следующие сочетания назначения и источника:

регистр – регистр,

память – регистр,

регистр – память,

регистр – непосредственный операнд,

память – непосредственный операнд.

Исключение составляют команды обработки строк, команды работы со стеком, команды типа умножения и деления

Система команд

Все команды присутствующие в архитектуре IA-32 можно разделить на четыре основные группы:

базовая система команд (набор x86);

команды сопроцессора;

команды MMX-расширения;

команды SSE-расширения (SSE1 – SSE4).

Система команд

В свою очередь базовую систему команд можно разделить на следующие подгруппы:

команды пересылки данных,

двоичные арифметические команды,

десятичные арифметические операции,

логические операции,

команды сдвигов и ротаций,

команды обработки бит,

команды передачи управления,

команды обработки строк,

команды ввода – вывода,

команды работы с флагами,

команды прерываний,

команды работы с сегментными регистрами,

прочие команды.

Команды пересылки

данных

Команда пересылки данных:

MOV назначение, источник

Особенности:

пересылки память – память нет;

в сегментный регистр (кроме CS) можно передавать только из РОН;

данные должны быть одного размера;

не влияет на регистр флагов.

Примеры:

mov

ax, dx

mov

cx, 100

mov

dword ptr ds:[ebx], ecx

mov

edx, dword ptr es:[di]

mov

bx, word ptr value