Приложение
Система команд
процессоров IA-32
Данное приложение содержит описание системы команд
архитектуры IA-32 до
Pentium IV включительно. Команды разбиты на 4 группы: целочисленные
команды
сопроцессора, команды MMX-расширения и команды ХММ-расширения. В пределах каждой
группы команды расположены в алфавитном
Для каждой команды приведены следую-
щие данные.
' Схема команды, поясняющая состав и назначение операндов.
Название команды с кратким описанием ее назначения.
Описание действия команды.
Описание флагов после выполнения команды, при этом приводятся сведения только о фла-
гах, изменяемых командой, и используются следующие обозначения:
D 1 — флаг устанавливается (равен
П 0 — флаг сбрасывается (равен 0);
— значение флага зависит от результата выполнения команды;
П ? — после выполнения команды флаг не определен.
Машинные коды для всех возможных сочетаний операндов команды. Описание
кода производится в
виде — каждый байт машинного представления ко-
манды воспроизводится двумя
цифрами. При описании машинного кода
используются следующие обозначения:
П /цифра — здесь цифра (от 0 до 7) представляет содержимое трехразрядного поля reg в бай-
те mod
используемое как часть кода операции;
П
— означает, что байт mod r/m команды содержит как регистровый операнд, так и опе-
ранд r/m;
cb, cw, cd, ср —
четырех- или
значение, следующее за полем
кода операции и используемое для определения смещения в сегменте кода (и возможное
новое значение для сегментного регистра кода);
D ib, iw, id —
двух- или
непосредственный операнд команды, кото-
рый следует за полем кода операции, байтами mod r/m или sib, при этом код операции
определяет, является ли непосредственный операнд знаковым значением, а все слова
и двойные слова приводятся в порядке «младший байт по младшему адресу»;
П +rb,
+rd — код регистра (от 0 до 7), добавляемый в байт кода операции, приводимого при
описании машинного кода первым значением (см. также рис.
и табл. 3.3-3.5);
Приложение. Система команд процессоров IA-32
+i — число (от 0 до 7), используемое в машинном
команд
когда один из операндов является
из стека регистров сопроцессора до-
бавляется к одиночному байту кода операции, значение которого приведено при описа-
нии машинного кода первым).
Ж Машинные коды команды сопровождаются описанием синтаксиса команды для соответствую-
щего сочетания операндов. При описании синтаксиса используются следующие обозначения:
П rel8 — относительный адрес из диапазона
точка отсчета — конец данной ма-
шинной команды;
П
ret32 — относительные адреса в пределах сегмента кода, содержащего данную ко-
манду, используемые для операндов с размером операнда 16
и 32
бита соот-
ветственно;
П
и
— дальние указатели (обычно на адрес в сегменте кода, отличном от
текущего), используемые при установленном атрибуте размера операнда 16 битов и 32 бита
(запись «16:16» или «16:32» означает, что первая часть указателя являет-
ся селектором или значением сегментного регистра кода, вторая — смещением в целевом
сегменте кода);
П
— операнд в одном из регистров размером байт (AL, CL, DL, BL, АН, СН,
ВН),
слово
СХ, DX,
SP, BP, SI, DI) или двойное слово (ЕАХ, ЕСХ, EDX, EBX, ESP, EBP, ESI, EDI);
D i8,
— непосредственный операнд размером байт
слово (-32 768...
+32 767) или двойное слово (-2 147 483
147 483 647);
П
— операнд в памяти размером
или 32 бита;
П
т32,
т64,
— операнд в памяти размером байт,
слово, 48/
64/128 бит;
D r/m8 — байтовый операнд, который содержится либо в одном из регистров размером один
(AL, CL, DL, BL, АН, СН, DH, ВН), либо в ячейке памяти размером один байт;
D
— операнд в регистре размером в слово (АХ, СХ, DX, BX, SP, BP, SI, DI) или в ячейке
памяти размером в слово (используется в командах, для которых атрибут размера опе-
ранда равен 16 бит);
D r/m32 — операнд в регистре размером в слово (ЕАХ, ЕСХ, EDX, EBX, ESP, EBP, ESI, EDI) или
в ячейке памяти размером в двойное слово (используется в командах, для которых атри-
бут размера операнда равен 32 битам);
П ml6:16,
— операнд в памяти, содержащий дальний указатель в виде двух чисел:
число слева соответствует селектору сегмента указателя, второе число является сме-
в сегменте, на который указывает этот селектор;
D
m32&32 — пары операндов в памяти, каждый элемент которых имеет раз-
мер, указанный слева и справа от знака &;
Р
— переменная (смещение в памяти) типа байт, слово,
сло-
во, требующаяся для выполнения некоторых вариантов команды
(байт mod
не
используется, адрес задается простым смещением относительно базы сегмента);
П sreg — сегментный регистр, кодировка в
коде: ES = 0; CS 1; SS = 2; DS - 3; FS = 4;
GS 5;
Р m32fp,
— операнды в формате сопроцессора (с плавающей точкой) в памяти;
Р
— целочисленные операнды в памяти, используемые в командах со-
процессора;
Р
или
— верхний элемент стека сопроцессора;
Р
— г-н элемент стека сопроцессора
0...7);
Р
— операнд в одном из регистров целочисленного расширения ММХ;
Р rmmx/m32 — младшая часть (32 бита)
или 32-разрядный операнд в памяти;
Целочисленные команды
rmmx/m64 — ММХ-регистр или 64-разрядный операнд в памяти;
D rxmm0...rxmm7 — операнд в одном из регистров расширения ММХ с плавающей точкой
(в ХММ-регистре);
П rxmm/m32 — ХММ-регистр или 32-разрядный операнд в памяти;
П rxmm/m64 — ХММ-регистр или 64-разрядный операнд в памяти;
П
или
памяти.
Для экономии места при описании
команд могут быть опущены одна или несколько
ранее позиций. Например, отсутствие описания действия команды говорит о том,
что сведений, приведенных в названии команды с кратким описанием ее назначения, достаточно
для ее практического применения. Отсутствие
флагов означает, что данная команда не
изменяет флагов.
Некоторые регистры программной модели процессора имеют внутреннюю структуру.
Чтобы идентифицировать поле такого регистра, в описании команд оно воспроизводится следу-
ющим образом:
Do'stlaringiz bilan baham: |