Колонка "Код операции" приводит полный объектный код, генерируемый для каждой формы команды. Где это возможно, коды приводятся в шестнадцатиричной байтовой записи, в последовательности их расположения в памяти. Определения элементов, помимо шестнадцатиричных байтов, следующие:
/цифра (цифра от 0 до 7) указывает на то, что байт ModR/M команды использует только операнд r/m (регистр или память). Поле reg содержит цифру, представляющую собой расширение кода операции команды.
/r: указывает на то, что байт ModR/M команды содержит и операнд регистра, и операнд r/m.
cb, cw, cd, cp: 1-байтовое (cb), 2-байтовое (cw), 4-байтовое (cd) или 6-байтовое (cp) значение, следующее за кодом операции, используемое для задания смещения кода и возможно, нового значения регистра кодового сегмента.
ib, iw, id: 1-байтовый (ib), 2-байтовый (iw) или 4-байтовый (id) непосредственный операнд команды, следующий за кодом операции, байтами ModR/M или SIB. Код операции определяет, является ли данный операнд значением со знаком. Все слова и двойные слова представлены таким образом, что первым следует младший байт.
+rb, +rw, +rd: Код регистра, от 0 до 7, складываемый с шестнадцатиричным байтом, находящимся слева от знака плюс, образуя единый байт кода операции. Коды:
rb rw rd AH = 4 SP = 4 ESP = 4 CH = 5 BP = 5 EBP = 5 DH = 6 SI = 6 ESI = 6 BH = 7 DI = 7 EDI = 7
+i: Используется в командах с плавающей точкой, когда один из операндов - это ST(i) из стека регистров модуля операций с плавающей точкой процессора (FPU). Число i (которое может быть в диапазоне от 0 до 7) складывается с шестнадцатиричным байтом, находящимся слева от знака плюс, образуя единый байт кода операции:
26.2.2.2 Колонка "Команда"
Колонка "Команда" дает синтаксис оператора команды в том виде, в котором этот оператор записывается в программе на ASM386. Ниже приводится список символических имен, используемых для представления операндов в операторах команды:
rel8: относительный адрес в диапазоне 128 байтов от 128 байтов до конца команды до 127 байтов после конца команды.
rel16, rel32: относительный адрес в пределах того же кодового сегмента, что и ассемблируемая команда. rel16 применяется с командами с атрибутом размера операнда, равным 16 битам; rel32 применяется с командами с атрибутом размера операнда, равным 32 битам.
ptr16:16,ptr16:32: дальний указатель, обычно установленный на кодовый сегмент, отличный от сегмент текущей команды. Запись 16: 16 указывает на то, что значение указателя состоит из двух частей. Значение слева от двоеточия это 16-битовый селектор или значение, предназначенное для регистра кодового сегмента. Значение справа от двоеточия соответствует смещению в пределах сегмента назначения. ptr16:16 используется, когда атрибут размера операнда команды равен 16 битам; ptr16:32 используется в случае 32-битового атрибута.
r8: один из байтовых регистров: AL,CL,DL,BL,AH,CH,DH или BH.
r16: один из регистров размером в слово: AX,CX,DX,BX,SP,BP,SI или DI.
r32: один из регистров размером в двойное слово: EAX,ECX,EDX, EBX,ESP,EBP,ESI или EDI.
imm8: непосредственное значение байта. imm8 это число со знаком в диапазоне от -127 до +127, включительно. Для команд, в которых imm8 комбинируется с операндом размером в слово или двойное слово, непосредственное значение расширяется по знаку, образуя слово или двойное слово. Старший байт слова заполняется самым старшим битом непосредственного значения.
imm16: непосредственное значение размером в слово, используемое для команд, атрибут размера операнда которых равен 16 битам. Это число в диапазоне от -32768 до +32767, включительно.
imm32: непосредственное значение размером в двойное слово, используемое для команд, атрибут размера операнда которых равен 32 битам. Это число в диапазоне от +2147483647 до -2147483648, включительно.
r/m8: однобайтовый операнд, представляющий собой либо содержимое байтового регистра (AL, BL, CL, DL, AH, BH, CH, DH), либо содержимое байта в памяти.
r/m16: операнд регистра-слова или операнд памяти, используемый в командах, атрибут размера операнда которых равен 16 битам. Регистры-слова это AX, BX, CX, DX, SP, BP, SI, DI. Содержимое памяти находится по адресу, получаемому при вычислении исполнительного адреса.
r/m32: операнд регистра-двойного слова или операнд памяти, используемый в командах, атрибут размера операнда которых равен 32 битам. Регистры-слова это EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI. Содержимое памяти находится по адресу, получаемому при вычислении исполнительного адреса.
m8: байт памяти, адресуемый DS:SI или ES:DI (используется только строковыми командами).
m16: слово памяти, адресуемое DS:SI или ES:DI (используется только строковыми командами).
m32: двойное слово памяти, адресуемое DS:SI или ES:DI (используется только строковыми командами).
m16:16, m16:32: операнд памяти, содержащий дальний указатель, составленный из двух чисел. Число слева от двоеточия соответствует селектору сегмента указателя. Число справа от двоеточия соответствует его смещению.
m16&32, m16&16, m32&32: операнд памяти, состоящий из пар элементов данных, размеры которых обозначены слева и справа от символа амперсанда (&). Все режимы адресации памяти разрешены, операнды m16&16 и m32&32 используются командой BOUND для получения операнда, содержащего верхнюю и нижнюю границы для индексов массивов. m16&32 используется командами LIDT и LGDT для получения слова, которым загружается поле границы, и двойного слова, которым загружается поле базы соответствующих регистров таблиц дескрипторов - глобальной и прерываний.
moffs8, moffs16, moffs32: (смещение в памяти) - простая переменная памяти типа BYTE, WORD или DWORD, используемая некоторыми вариантами команды MOV. Фактический адрес задается простым смещением относительно базы сегмента. В команде байт ModR/ M не используется. Число, указанное в moffs, обозначает размер, определяемый атрибут размера адреса команды.
Sreg: сегментный регистр. Назначения битов сегментных регистров: ES=0, CS=1, SS=2, DS=3, FS=4 и GS=5.
m32real, m64real, m80real: (соответственно) - операнды памяти - действительные числа с плавающей точкой одинарной, двойной и расширенной точности.
m16int, m32int, m64int: (соответственно) - операнды памяти - целочисленного типа word, short и long с плавающей точкой.
mNbyte: N-байтовый операнд памяти с плавающей точкой. ST или ST(0): старший элемент стека регистров FPU. ST(i): i-й элемент от вершины стека регистров FPU (i =0...7).
26.2.2.3 Колонка "Число тактовых циклов"
Колонка "Число тактовых циклов" задает примерное число тактовых циклов, за которое выполняется команда. Вычисления тактовых циклов производятся исходя из следующих предположений:
При доступе к данным или командам происходит кэш-пападание (нахождение искомого в кеше).
Цель команды перехода находится в кеше.
Никакие циклы аннулирования не конкурируют с командой за использование кеша.
Трансляция адреса страницы находит совпадение в TLB.
Операнды памяти выравнены.
Вычисления исполнительного адреса используют один базовый регистр и ни одного индексного регистра, а базовый регистр не является регистром назначения предыдущей команды.
Смещение и непосредственное значение не используются одновременно.
Во время выполнения не происходит исключений.
Задержки при записи в буфер отсутствуют.
Обсуждение потерь быстродействия в случаях, когда эти условия не выполняются, находится в Приложении E. В спецификациях подсчета тактовых циклов используются следующие символические имена:
n представляет число повторений.
m представляет число компонентов следующей выполняемой команды, где все смещение целиком (если оно имеется) считается за один компонент, все непосредственные данные в команде (если они имеются) считаются за один компонент, и каждый другой байт команды и префикс(ы) также считаются за один компонент.
pm= представляет собой счетчик тактовых циклов, работающий, когда команда выполняется в защищенном режиме. pm= не задается, когда число циклов одинаково для защищенного режима и режима реальных адресов.
Когда во время выполнения команды генерируется исключение, а обработчик этого исключения находится в другой задаче, время выполнения команды увеличивается на число тактовых циклов, требуемых для переключения задачи. Этот параметр зависит от нескольких факторов:
Типа TSS, используемого для представления новой задачи (TSS центрального процессора i486 или TSS 80286.)
От того, находится ли текущая задача в режиме V86.
От того, находится ли новая задача в режиме V86.
От того, произошло ли кеша-попадание при попытке доступа.
От того, используется ли шлюз задачи, или же шлюз прерывания/ловушки.
В Таблице 26-5 приводятся значения времени на переключение задачи для исключений, предполагая попадание в кеш и использование шлюзов задачи. Полное описание см. в Приложении Е.
26.2.2.4 Колонка "Описание"
Колонка "Описание", расположенная после колонки "Число тактовых циклов" содержит краткое описание разных форм команды. В разделах "Работа команды" и "Описание" содержится более подробная информация о работе команды.