- •Лекции 17 -
- •Структура машинной
- •Структура машинной команды
- •Структура машинной команды
- •Структура машинной команды
- •Структура машинной команды
- •Сочетания операндов
- •Система команд
- •Система команд
- •Команды пересылки
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки
- •Команды пересылки
- •Команды пересылки данных
- •Команды пересылки данных
- •Команды пересылки
- •Команды пересылки данных
- •Команды пересылки данных
- •Прочие команды
- •Прочие команды
- •Прочие команды
- •Команды загрузки сегментных регистров
- •Команды ввода – вывода
- •Команды ввода – вывода
- •Команды ввода – вывода
- •Команды ввода – вывода
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Команды обработки строк
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Арифметические команды
- •Логические команды
- •Логические команды
- •Логические команды
- •Логические команды
- •Логические команды
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды сдвигов
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды обработки бит
- •Команды работы с регистром флагов
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Команды передачи управления
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 2
- •Пример 3
- •Пример 3
- •Пример 3
- •Пример 3
- •Пример 3
- •Пример 3
Лекции 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 |
|
|