Форматы данных и команды их обработки процессоров Pentium III, Pentium IV
операнд-приемник или регистр EFLAGS
CMPPD Сравнение векторное
CMPSD Сравнение скалярное
COMISD Упорядоченное сравнение скалярных чисел с помещением
результата в биты регистра EFLAGS (если хоть один из
операндов QNaN или SNaN, генерируется исключение #I и
EFLAGS не модифицируется)
UCOMISD Неупорядоченное сравнение (то же, но исключение #I
генерируется только в случае SNaN)
Инструкции перестановок и распаковки операндов с плавающей точкой двойной
точности в регистрах ХММ
SHUFPD Перестановка элементов в упакованных операндах
UNPCKHPD Распаковка и чередование старших элементов (в приемнике
собираются старшие части операндов)
UNPCKLPD Распаковка и чередование младших элементов (в приемнике
собираются младшие части операндов)
Инструкции преобразований в формат и из формата упакованных и скалярных
чисел с плавающей точкой двойной точности
CVTPD2PI Преобразование упакованных чисел с плавающей точкой в
упакованные целые (двойные слова)
CVTTPD2PI Преобразование с усечением упакованных чисел с плавающей
точкой двойной точности в упакованные целые (двойные слова)
CVTP12PD Преобразование упакованных целых (двойных слов) в
упакованные числа с плавающей точкой двойной точности
CVTPD2DQ Преобразование упакованных чисел с плавающей точкой в
упакованные целые (двойные слова)
CVTTPD2DQ Преобразование с усечением упакованных чисел с плавающей
точкой двойной точности в упакованные целые (двойные слова)
CVTDQ2PD Преобразование упакованных 32-битных целых в упакованные
числа с плавающей точкой двойной точности
CVTPS2PD Преобразование упакованных чисел с плавающей точкой
одинарной точности в числа двойной точности
CVTPD2PS Преобразование упакованных чисел с плавающей точкой
двойной точности в числа одинарной точности
CVTSS2SD Преобразование скалярного числа с плавающей точкой
одинарной точности в число двойной точности
CVTSD2SS Преобразование скалярного числа с плавающей точкой двойной
точности в число одинарной точности
CVTSD2SI Преобразование скалярного числа одинарной точности в 32-
битное целое
CVTTSD2SI Преобразование с усечением скалярного числа двойной
точности в 32-битное целое
CVTS12SD Преобразование 32-битного целого в число двойной точности
Инструкции преобразований с числами одинарной точности
CVTDQ2PS Преобразование упакованных 32-битных целых в упакованные
числа с плавающей точкой одинарной точности
CVTPS2DQ Преобразование упакованных чисел одинарной точности в
числа двойной точности
CVTTPS2DQ Преобразование с усечением упакованных чисел одинарной
точности в числа двойной точности
Целочисленные 128-битные SIMD-инструкции
MOVDQA Пересылка выровненного 128-битного операнда
MOVDQU Пересылка невыровненного 128-битного операнда
MOVQ2DQ Пересылка 64-битного целого из ММХ в ХММ
MOVDQ2Q Пересылка 64-битного целого из ХММ в ММХ
PMULUDQ Умножение упакованных беззнаковых 32-битных целых
PADDQ Сложение упакованных 64-битных целых
PSUBQ Вычитание упакованных 64-битных целых
PSHUFLW Перестановка упакованных младших слов
PSHUFHW Перестановка упакованных старших слов
PSHUFD Перестановка упакованных двойных слов
PSLLDQ Логический сдвиг 64-битных чисел влево
PSRLDQ Логический сдвиг 64-битных чисел вправо
PUNPCKHQDQ Распаковка старших 64-битных чисел
PUNPCKLQDQ Распаковка младших 64-битных чисел Управление кэшированием
CLFLUSH Очистка и инвалидация строки кэша (всех уровней), связанной с
указанным операндом в памяти
LFENCE Упорядочивание операций загрузки из памяти
MFENCE Упорядочивание операций загрузки и записи
PAUSE Улучшение выполнения цикла ожидания
MASKMOVDQU Выборочная запись байтов из ХММ в память, минуя кэш
MOVNTPD Запись пары упакованных чисел из ХММ в память, минуя кэш
MOVNTDQ Запись 128-битного числа из ХММ в память, минуя кэш
MOVNTI Запись двойного слова из регистра общего назначения в память,
минуя кэш
Инструкции 3DNow!, появившиеся с процессорами AMD K6-2, поддерживаются
всеми последующими процессорами AMD и некоторыми другими процессорами.
Процессоры Intel этот набор не поддерживают, хотя в SSE имеются
инструкции, совпадающие с частью инструкций 3DNow!. В процессорах Athlon
расширение 3DNow! получило дополнительные инструкции для сигнальных
процессоров. Целочисленные инструкции ММХ и управления кэшированием
совпадают с одноименными инструкциями SSE. В данной работе инструкции
3DNow! не рассмотрены, так как не относятся к инструкциям процессоров
Pentium 3,4.
6. Команды блока XMM (SSE и SSE2)
Порядок описания команд в этом разделе следующий:
• в заголовок вынесена схема команды, поясняющая общий набор и
назначение операндов;
• в следующей строке дается название команды, расшифровка ее мнемоники
и назначение;
• далее следует синтаксис команды (сложный синтаксис приводится в виде
диаграмм), при описании которого используются следующие обозначения:
• r8, r16, r32 — операнд в одном из регистров размером байт,
слово или двойное слово;
• m8, m16, m32, m48, m64 — операнд в памяти размером байт,
слово, двойное слово или 48 бит;
• i8, i16, i32 — непосредственный операнд размером байт, слово
или двойное слово;
• машинный код для всех сочетаний операндов описываемой команды (при
сложном синтаксисе машинный код включается в синтаксис);
• состояние флагов после выполнения команды;
• описание действия команды;
• описание флагов после выполнения команды, при этом приводятся
сведения только о флагах, изменяемых командой, и используются следующие
обозначения:
• 1 — флаг устанавливается (равен 1);
• 0 — флаг сбрасывается (равен 0);
• r — значение флага зависит от результата выполнения команды;
• ? — после выполнения команды флаг не определен;
• список исключений.
На многих диаграммах в целях компактности возможные сочетания
операндов показаны в виде следующей конструкции:
[pic]
Конструируя команду на основе подобной синтаксической диаграммы, нужно
помнить о соответствии типов. Допустимы только следующие сочетания: "r8,
m8", "r16, m16", "r32, m32", а сочетание, например, "r8, m16" недопустимо.
Однако, есть единичные случаи, когда подобные сочетания возможны; тогда они
оговариваются специальным образом.
Описание машинного кода приводится в двух вариантах.
• В двоичном виде. Это описание применяется для демонстрации
особенностей внутренней структуры машинной команды. Байты машинного
представления машинной команды отделяются двоеточием.
• В шеснадцатеричном виде. Каждый байт машинного представления команды
представлен двумя шестнадцатеричными цифрами. Часто за одним (двумя и
более) первым байтом следует обозначение: /цифра. Это означает, что поле
reg в байте mod r/m используется как часть кода операции и цифра
представляет содержимое этого поля.
Вместо цифры может стоять символ "r" — /r. Как уже не раз отмечалось,
большинство команд процессора — двухоперандные. Один операнд располагается
в регистре, местоположение другого операнда определяет байт ModR/M — это
может быть либо регистр, либо ячейка памяти. Более того, если операнд —
ячейка памяти, то содержимое байта ModR/M определяет номенклатуру
компонентов машинного кода команды, которые должны использоваться для
вычисления эффективного адреса.
При описании команд могут быть опущены некоторые из перечисленных
пунктов. Например, отсутствие пункта "синтаксис" говорит о том, что он
совпадает со схемой команды. Отсутствие пункта "исключения" означает, что
при выполнении данной команды исключения не возникают. То же касается
описания флагов.
Некоторые регистры программной модели процессора имеют внутреннюю
структуру. Указание того, о каком поле такого регистра идет речь, показано
следующим образом: имя_регистра.имя_поля.
1. Команды блока XMM (SSE – Pentium 3)
ADDPS приемник, источник
ADDPS (ADDition Packed Single-precision float-point) — сложение
упакованных значений в формате ХММ.
Синтаксис: ADDPS rxmm1, rxmm2/m128
Машинный код: 00001111:01011000:mod rxmm1 r/m
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
Исключения: NE: #O, #U, #I, #Р, #D; PM: #GP(0): 37; #NM: 3; #PF(fault-
code); #SS(0): 13; #UD: 10,11,12,13; #XM; RM: #GP: 13; #NM: 3; #UD: 17,18;
#XM; VM: исключения реального режима; #PF(fault-code).
ADDSS приемник, источник
ADDSS (ADD Scalar Single-precision float-point) — скалярное сложение
значений в формате ХММ.
Синтаксис: ADDSS rxmm1, rxmm2/m128
Машинный код: 11110011:00001111:01011000:mod rxmm1 r/m
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
Исключения: NE: #O, #U,. #I, #P, #D; PM: #АС: 4; #GP(0): 37; #NM: 3;
#PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-
20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).
ANDNPS приемник, источник
ANDNPS (bit-wise logical AND Not for Packed Single-precision float-
point) — поразрядное логическое И-НЕ над упакованными значениями в формате
ХММ.
Синтаксис: ANDNPS rxmm1, rxmm2/m128
Машинный код: 00001111:01010101:mod rxmm1 r/m
Действие: инвертировать биты операнда приемник, над каждой парой битов
операндов приемник (после инвертирования) и источник выполнить операцию
логического И.
Исключения: PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD:
10,12,13; RM: #GP: 13; #NM: 3; #UD: 7; VM: исключения реального режима;
#PF(fault-code); #UD: 16, 17.
ANDPS приемник, источник
ANDPS (bit-wise logical AND for Packed Single-precision float-point) —
поразрядное логическое И над каждой парой бит операндов источник и
приемник.
Синтаксис: ANDPS rxmm1, rxmm2/m128
Машинный код: 00001111:01010100: mod rxmm 1 r/m
Исключения: 1; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13;
#UD: 10,12, 13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения
реального режима; #PF(fault-code).
CMPPS приемник, источник, условие
CMPPS (CoMPare Packed Single-precision float-point) — сравнение
упакованных значений в формате ХММ
Синтаксис: CMPPS rxmm1, rxmm2/m128, i8
Машинный код: 00001111:11000010: mod rxmm1 r/m: i8
Действие: условие, в соответствии с которым производится сравнение
каждой пары элементов операндов приемник и источник, задается явно в виде
непосредственного операнда (см. ниже). В результате сравнения в приемнике
формируются единичные (если условие выполнено) или нулевые элементы (если
условие не выполнено).
|Усло-|Описание |Отношение |Эмуляция |Код |Результат, |Исключение #I, |
|вие |условия | | |маски |если операнд|если операнд |
| | | | |i8 |NaN |qNAN/sNAN |
|Eq |Equal |xmm1== |000b |False |Нет |
| |(равно) |xmm2 | | | |
|Lt |less-than |xmm1> |Перестанов-| |False |Да |
| |than |xmm2 |ка с | | | |
| |(больше | |сохранением| | | |
| |чем) | |, lt | | | |
| | | | | | | |
| |greater- |xmm1>>= |Перестанов-| |False |Да |
| |than-or- |xmm2 |ка с | | | |
| |equal | |сохране- | | | |
| |(больше | |нием, le | | | |
| |чем или | | | | | |
| |равно) | | | | | |
|Unord|Unordered |xmm1 ? |011b |True |Нет |
| |(одно из |xmm2 | | | |
| |чисел | | | | |
| |QNAN) | | | | |
| | | | | | |
|Neq |not-equal |!(xmm1== |100b |True |Нет |
| |(не равно)|xmm2) | | | |
|Nit |not-less- |!(xmm1 >|Перестанов-| |True |Да |
| |r- | |ка с | | | |
| |than(не |xmm2) |сохранением| | | |
| |больше | |, nlt | | | |
| |чем) | | | | | |
| |not-greate|!(xmm1>>| | |True |Да |
| |r-than-or-|= xmm2) |Перестанов-| | | |
| | | |ка с | | | |
| |equal (не | |сохранением| | | |
| |больше чем| |, nle | | | |
| | | | | | | |
| |или равно)| | | | | |
|Ord |Ordered |!(xmm1 |111b |False |Нет |
| |(числа |?xmm2) | | | |
| |неQNAN) | | | | |
Исключения: 1; NE: #I, #D; PM: #GP(0): 37; #NM: 3; #PF(fault-code);
#SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #VD: 17-20; #XM; VM:
исключения реального режима; #PF(fault-code).
CMPSS приемник, источник, условие
CMPSS (CoMPare Scalar Single-precision float-point) — скалярное
сравнение значений в формате ХММ.
Синтаксис: CMPSS rxmm1, rxmm2/m32, i8
Машинный код: 11110011:00001111:11000010:mod rxmm1 r/m: i8
Действие: для пары значений операндов приемник и источник выполняется
сравнение, в результате которого формируются единичные (если условие
выполнено) или нулевые элементы (если условие не выполнено). Значение
источника может быть расположено в 32-битной ячейке памяти или в младшем
двойном слове регистра ХММ. Значение приемника расположено в младшем
двойном слове другого регистра ХММ.
Возможные значения условий приведены в описании команды CMPPS.
Исключения: NE: #I, #D; PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault-
code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #ХМ;
VM: исключения реального режима; #АС(0); #PF(fault-code).
COMISS приемник, источник
COMISS (COMpare ordered Scalar Single-precision float-point COMpare
and Set EFLAGS) — скалярное упорядоченное сравнение значений в формате ХММ
с установкой EFLAGS.
Синтаксис: COMISS rxmm1, rxmm2/m32
Машинный код: 00001111:00101111 :mod rxmm1 r/m
Действие: команда сравнивает пару значений операндов приемник и
источник, в результате чего устанавливаются флаги в регистре EFLAGS, как
показано ниже.
Значение источника может быть расположено в 32-битной ячейке памяти
или младшем двойном слове регистра ХММ. Значение приемника расположено в
младшем двойном слове другого регистра ХММ.
|Соотношение операндов |Значение флагов |
|Приемник>источник |0F=SF=AF=ZF=PF=CF=0 |
|Приемникисточник |0F=SF=AF=ZF=PF=CF=0 |
|Приемник источник), 2 (приемник >= источник), 5
([pic] (приемник > источник)), 6 ([pic] (приемник >= источник)).
Исключения: SIMD (NE): #I (если операнд SNaN или QNaN), #D; PM:
#GP(0):
37, 42; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-12, 15; #XM; RM: #GP:
13, 16; #NM: 3; #UD: 17, 19, 22; #XM; VM: исключения реального режима;
#PF(fault-code).
CMPSD приемник, источник, условие
CMPSD (CoMPare Scalar Double-precision floating-point values
description) — сравнение скалярных значений с плавающей точкой двойной
точности.
Синтаксис: CMPSD xmm1, xmm2/m64, imm8
Машинный код: F2 0F C2 /r i8
Действие: сравнить упакованные значения с плавающей точкой двойной
точности в разрядах [63-0] приемника и источника. Формирование проверяемого
условия и результата выполнения команды аналогичны соответствующим
атрибутам команды CMPPD.
Исключения: SIMD (NE): #I (если операнд SNaN или QNaN), #D; PM:
#GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM; #UD: 10-12, 15;
#AC(0)_cpl3; RM: #GP: 13, 16; #NM: 3; #XM; #UD: 17-19, 22; VM: исключения
реального режима; #PF(fault-code); #AC(0)_u.
COMISD приемник, источник, условие
COMISD (COMpare Scalar ordered Double-precision floating-point values
and set EFLAGS) — сравнение упорядоченных скалярных значений с плавающей
точкой двойной точности и установка регистра EFLAGS.
Синтаксис: COMISD xmm1, xmm2/m64
Машинный код: 66 0F 2F /r
Действие: сравнить упорядоченные скалярные значения с плавающей точкой
двойной точности в разрядах [63-0] приемника и источника. По результату
сравнения установить флаги ZF, PF и CF в регистре EFLAGS: приемник >
источник (ZF = О, PF = О, CF = 0), приемник > источник (ZF = О, PF = О, CF
= 1), приемник = источник (ZF = 1, PF = О, CF = 0), приемник и(или)
источник NAN или в неопределенном формате (ZF = 1, PF = 1, CF = 1). Флаги
0F, SF и AF устанавливаются в 0. В случае генерации немаскированного
исключения с плавающей точкой регистр EFLAGS не модифицируется.
Исключения: SIMD (NE): #I (если операнд SNaN или QNaN), #D; PM:
#GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM; #UD: 10-12, 15;
#AC(0)_cpl3; RM: #GP: 13; #NM: 3; #XM; #UD: 17-19, 22; VM: исключения
реального режима; #PF(fault-code); #AC(0)_u.
CVTDQ2PD приемник, источник
CVTDQ2PD (ConVerT packed Doubleword Integers to Packed Double-
precision floating-point values) — преобразование двух упакованных 32-
битных целых в два упакованных значения с плавающей точкой двойной
точности.
Синтаксис: CVTDQ2PD rxmm1, rxmm2/m64
Машинный код: F3 0F E6
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
Исключения: PM: #GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM;
#UD:
10, 11, 12, 15; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #XM; VM:
исключения реального режима; #АС: 5; #PF(fault-code); #AC(0)_u.
CVTDQ2PS приемник, источник
CVTDQ2PS (ConVerT Packed Doubleword integers to Packed Single-
precision floatingpoint values) — преобразование четырех упакованных 32-
битных целых со знаком в четыре упакованных значения с плавающей точкой
одинарной точности.
Синтаксис: CVTDQ2PS rxmm1, rxmm2/m128
Машинный код: 0F 5B /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
В случае когда не удается выполнить точное преобразование, значение
округляется в соответствии с полем MXCSR.RC.
Исключения: SIMD (NE): #P; PM: #GP(0): 37, 42; #SS(0): 13; #PF(fault-
code); #NM: 3; #XM; #UD: 10-12, 15; RM: #GP: 13, 16; #NM: 3; #XM; #UD: 17-
19, 22; VM: исключения реального режима; #АС: 5; #PF(fault-code).
CVTPD2DQ приемник, источник
CVTPD2DQ, (ConVerT Packed Double-Precision Floating-Point Values to
Packed Doubleword integers) — преобразование двух упакованных значений с
плавающей точкой двойной точности в два упакованных 32-битных целых.
Синтаксис: CVTPD2DQ rxmm1, rxmm2/m128
Машинный код: F2 0F E6
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
В случае, когда не удается выполнить точное преобразование, значение
округляется в соответствии с полем MXCSR.RC. Если преобразованный результат
больше чем максимально возможное целочисленное 32-битное значение, то
возвращается значение 80000000h.
Исключения: SIMD (NE): #I, #Р; РМ: #GP(0): 37, 42; #NM: 3; #PF(fault-
code); #SS(0): 13; #UD: 10-12, 15; #XM; RM: #GP: 13, 16; #NM: 3; #UD: 17,
18, 19, 22; #XM; VM: исключения реального режима; #PF(fault-code).
CVTPD2PI приемник, источник
CVTPD2PI (ConVerT Packed Double-precision floating-point values to
Packed doubleword Integers) — преобразование двух упакованных значений с
плавающей точкой двойной точности в два упакованных 32-битных целых.
Синтаксис: CVTPD2PI rmmx, rxmm/m128
Машинный код: 66 0F 2D /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
В случае, когда не удается выполнить точное преобразование, значение
округляется в соответствии с полем MXCSR.RC. Если преобразованный результат
больше чем максимально возможное целочисленное 32-битное значение, то
возвращается значение 80000000h.
Исключения: SIMD (NE): #I, #Р; РМ: #GP(0): 37,42; #SS(0): 13;
#PF(fault-code); #MF; #NM: 3; #XM; #UD: 10, 11, 12, 15; RM: #GP: 13, 16;
#NM: 3; #MF; #XM;
#UD: 17-19, 22; VM: исключения реального режима; #PF(fault-code).
CVTPD2PS приемник, источник
CVTPD2PS (CoVerT Packed Double-precision floating-point values to
Packed Single-precision floating-point values) — преобразование двух
упакованных значений с плавающей точкой двойной точности в два упакованных
значения с плавающей точкой одинарной точности.
Синтаксис: CVTPD2PS rxmm1, rxmm2/m128
Машинный код: 66 0F 5A /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
В случае, когда не удается выполнить точное преобразование, значение
округляется в соответствии с полем MXCSR.RC.
Исключения: SIMD (NE): #O, #U, #I, #Р, #D; PM: #GP(0): 37, 42; #SS(0):
13;
#PF(fault-code); #NM: 3; #XM; #UD: 10-12, 15; RM: #GP: 13, 16; #NM: 3; #ХМ;
#UD: 17-19, 22; VM: исключения реального режима; #PF(fault-code).
CVTP12PD приемник, источник
CVTPI2PD (ConVerT Packed doubleword Integers to Packed Double-
precision floating-point values) — преобразование двух упакованных 32-
битных целых в два упакованных значения с плавающей точкой двойной
точности.
Синтаксис: CVTP12PD rxmm, rmmx/m64
Машинный код: 66 0F 2A /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
Исключения: PM: #GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #MF;
#XM;
#UD: 10-12,15; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #MF; #XM; #UD: 17-19, 22;
VM: исключения реального режима; #АС; #PF(fault-code); #AC(0)_u.
CVTPS2DQ приемник, источник
CVTPS2DQ (ConVerT Packed Single-precision floating-point values to
packed Doubleword integers) — преобразование четырех упакованных значений с
плавающей точкой одинарной точности в четыре упакованных 32-битных целых со
знаком.
Синтаксис: CVTPS2DQ rxmm1, rxmm2/m128
Машинный код: 66 0F 5В /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
В случае когда не удается выполнить точное преобразование, значение
округляется в соответствии с полем MXCSR.RC. Если преобразованный результат
больше чем максимально возможное целочисленное 32-битное значение, то
возвращается значение 80000000h.
Исключения: SIMD (NE): #I, #P; PM: #GP(0): 37,42; #SS(0): 13;
#PF(fault-code); #MF; #NM: 3; #XM; #UD: 10, 11, 12, 15; RM: #GP: 13, 16;
#NM: 3; #MF; #XM;
#UD: 17-19, 22; VM: исключения реального режима; #PF(fault-code).
CVTPS2PD приемник, источник
CVTPS2PD (CoVerT Packed Single-precision floating-point values to
Packed Double-precision floating-point values) — преобразование двух
упакованных значений с плавающей точкой одинарной точности в два
упакованных значения с плавающей точкой двойной точности.
Синтаксис: CVTPS2PD rxmm1, rxmm2/m64
Машинный код: 0F 5A /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
Исключения: РМ: #GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM;
#UD:
10-12,15; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #XM; #UD: 17-19,22; VM:
исключения реального режима; #PF(fault-code); #AC(0)_u.
CVTSD2SI приемник, источник
CVTSD2SI (ConVerT Scalar Double-precision floating-point value to
Doubleword Integer) — преобразование скалярного значения с плавающей точкой
двойной точности в 32-битное целое.
Синтаксис: CVTSD2SI r32, rxmm/m64
Машинный код: F2 0F 2D /r
Действие: алгоритм работы команды показан па рисунке ниже.
[pic]
В случае, когда не удается выполнить точное преобразование, значение
округляется в соответствии с полем MXCSR.RC. Если преобразованный результат
больше чем максимально возможное целочисленное 32-битное значение, то
возвращается значение 80000000h.
Исключения: SIMD (NE): #I, #Р; РМ: #GP(0): 37; #NM: 3; #PF(fault-
code); #SS(0): 13; #UD: 10-12, 15; #XM; #AC(0)_cpl3; RM: #GP: 13; #NM: 3;
#UD: 17-19, 22; #ХМ; VM: исключения реального режима; #PF(fault-code);
#AC(0)_u.
CVTSD2SS приемник, источник
CVTSD2SS (ConVerT Scalar Double-precision floating-point value to
Scalar Single-precision floating-point value) — преобразование скалярного
значения с плавающей точкой двойной точности в скалярное значение с
плавающей точкой одинарной точности.
Синтаксис: CVTSD2SS rxmm1, rxmm2/m64
Машинный код: F2 0F 5A /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
В случае, когда не удается выполнить точное преобразование, значение
округляется в соответствии с полем MXCSR.RC.
Исключения: SIMD (NE): #O, #U, #I, #Р, #D; PM: #GP(0): 37; #NM: 3;
#PF(fault-code); #SS(0): 13; #UD: 10-12, 15; #ХМ; #АС(0)_ср13; RM: #GP: 13;
#NM: 3; #XM; #UD: 17-19, 22; VM: исключения реального режима; #PF(fault-
code); #AC(0)_u.
CVTS12SD приемник, источник
CVTSI2SD (ConVerT Signed doubleword Integer to Scalar Double-precision
floatingpoint value) — преобразование 32-битного целого значения со знаком
в упакованное значение с плавающей точкой двойной точности.
Синтаксис: CVTS12SD rxmm, r/m32
Машинный код: F2 0F 2A /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
Исключения: РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD:
10-12, 15; #XM; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #XM; VM:
исключения реального режима; #AC(0)_u; #PF(fault-code).
CVTSS2SD приемник, источник
CVTSS2SD (ConVerT Scalar Single-Precision floating-point value to
Scalar Double-precision floating-point value) — преобразование скалярного
значения с плавающей точкой одинарной точности в скалярное значение с
плавающей точкой двойной точности.
Синтаксис: CVTSS2SD rxmm1, rxmm2/m32
Машинный код: F3 0F 5A /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
Исключения: РМ: #GP(0): 37; ftNM: 3; #PF(fault-code); #SS(0): 13; #UD:
10-12, 15; #ХМ; #АС(0)_ср13; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #XM; VM:
исключения реального режима; #AC(0)_u; #PF(fault-code).
CVTTPD2PI приемник, источник
CVTTPD2PI (ConVerT with Truncation Packed Double-precision floating-
point values to Packed doubleword Integers) — преобразование (путем
отбрасывания дробной части) двух упакованных значений с плавающей точкой
двойной точности в два упакованных 32-битных целых значения.
Синтаксис: CVTTPD2PI rmmx, rxmm/m128
Машинный код: 66 0F 2C /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
Если преобразованный результат больше чем максимально возможное
целочисленное 32-битное значение, то будет возвращено значение 80000000h.
Исключения: SIMD (NE): #I,#Р; РМ: #GP(0): 37, 42; #MF; #NM: 3;
#PF(fault-code); #SS(0): 13; #UD: 10-12, 15; #XM; RM: #GP: 13, 16; #MF;
#NM: 3; #UD: 17-19, 22; #ХМ; VM: исключения реального режима; #PF(fault-
code).
CVTTPD2DQ приемник, источник
CVTTPD2DQ (ConVerT with Truncation Packed Double-precision floating-
point values to packed Doubleword integers) — преобразование усечением двух
упакованных значений с плавающей точкой двойной точности в два упакованных
32-битных целых.
Синтаксис: CVTTPD2DQ rxmm1, rxmm2/m128
Машинный код: 66 0F E6
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
В случае, когда не удается выполнить точное преобразование, значение
округляется в сторону нуля. Если преобразованный результат больше чем
максимально возможнее целочисленное 32-битное значение, то возвращается
значение 80000000h.
Исключения: SIMD (NE): #I, #Р; РМ: #GP(0): 37, 42; #NM: 3; #PF(fault-
code); #SS(0): 13; #UD: 10-12,15; #XM; RM: #GP: 13,16; #NM: 3; #UD: 17-19,
22; #ХМ; VM: исключения реального режима; #PF(fault-code).
CVTTPS2DQ приемник, источник
CVTTPS2DQ (ConVerT with Truncation Packed Single-precision floating-
point values to packed Doubleword integers) — преобразование (путем
отбрасывания дробной части) четырех упакованных значений с плавающей точкой
одинарной точности в четыре упакованных 32-битных целых со знаком.
Синтаксис: CVTTPS2DQ rxmm1, rxmm2/m128
Машинный код: F3 0F 5B /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
В случае, когда не удается выполнить точное преобразование, значение
округляется в сторону нуля. Если преобразованный результат больше чем
максимально возможнее целочисленное 32-бнтное значение, то будет возвращено
значение 80000000h.
Исключения: SIMD (NE): #I, #Р; РМ: #GP(0): 37, 42; #NM: 3; #PF(fault-
code); #SS(0): 13; #UD: 10-12, 15; #XM; RM: #GP: 13, 16; #NM: 3; #UD: 17-
19, 22; #ХМ; VM1; исключения реального режима; #PF(fault-code).
CVTTSD2SI приемник, источник
CVTTSD2SI (ConVerT with Truncation Scalar Double-precision floating-
point value to Signed doubleword Integer) — преобразование (путем
отбрасывания дробной части) скалярного значения с плавающей точкой двойной
точности в 32-битное целое.
Синтаксис: CVTTSD2SI r32, rxmm/m64
Машинный код: F2 0F 2C /r
Действие: алгоритм работы команды показан на рисунке ниже.
[pic]
В случае, когда не удается выполнить точное преобразование, значение
округляется в сторону нуля. Если преобразованный результат больше чем
максимально возможное целочисленное 32-битное значение, то будет возвращено
значение 80000000h.
Исключения: SIMD (NE): #I,#Р; РМ: #GP(0): 37; #NM: 3; #PF(fault-code);
#SS(0): 13; #UD: 10-12, 15; #XM; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17-
19, 22; #ХМ; VM: исключения реального режима; #AC(0)_u; #PF(fault-code).
DIVPD приемник, источник
DIVPD (DIVide Packed Double-precision floating-point values) — деление
упакованных значений с плавающей точкой двойной точности.
Синтаксис: DIVPD xmm1, xmm2/m128
Машинный код: 66 0F 5E /r
Действие: разделить пары упакованных значений с плавающей точкой
двойнор точности источника и приемника по схеме: приемник[63-0](приемник[63-
0]/источник[63-0]; приемник[127-64](приемник[127-64]/источник[127-64].
Исключения: SIMD (NE): #O, #U, #I, #Z, #P, #D; PM: #GP(0): 37,42;
#SS(0): 13; #PF(fault-code); #NM: 3; #UD: 10-12, 15; #XM; RM: #GP: 13, 16;
#NM: 3; #VD: 17-19, 22; #XM; VM: исключения реального режима; #PF(fault-
code).
DIVSD приемник, источник
DIVSD (DIVide Scalar Double-Precision Floating-Point Values) — деление
скалярных упакованных значений с плавающей точкой двойной точности.
Синтаксис: DIVSD rxmm1, rxmm2/m64
Машинный код: F2 0F 5E /r
Действие: разделить младшие упакованные значения с плавающей точкой
двойной точности источника и приемника по схеме: приемник[63-0](приемник[63-
0]/ источник[63-0]; приемник[127-64] — не изменяется.
Исключения: SIMD (NE): #O, #U, #Z, #I, #P, #D; PM: #GP(0): 37; #NM: 3;
#PF(fault-code); #SS(0): 13; #UD: 10-12, 15; #XM; #AC(0)_cpl3; RM: #GP: 13;
#NM: 3; #UD: 17-19, 22; #ХМ; VM: исключения реального режима; #PF(fault-
code), AC(0)_u.
LFENCE адрес_байта
LFENCE (Load FENCE) — упорядочить операции загрузки.
Синтаксис: LFENCE
Машинный код: 0F AE /5
Действие: выполнить упорядочивание исполнения команд загрузки из
памяти, которые были инициированы перед этой командой LFENCE. Эта операция
гарантирует, что каждая команда загрузки, за которой следует в программе
команда LFENCE, глобально видима перед любой другой командой загрузки, за
которой следует команда LFENCE. Команда LFENCE упорядочивается относительно
команд загрузки, других команд LFENCE, MFENCE и любых команд упорядочивания
(сериализации, типа команды CPUID). Она не упорядочивается относительно
команд сохранения в памяти или команды SFENCE.
Исключения: отсутствуют.
MASKMOVDQU источник, маска
MASKMOVDQU (Store Selected Bytes 0F Double Quadword) — выборочная
запись байт из источника в память с использованием байтовой маски в
приемнике.
Синтаксис: 66 0F F7 /r
Машинный код: MASKMOVDQU rxmm1, rxmm2
Действие: сохранить выбранные байты операнда источник в 128-разрядную
ячейку памяти. Операнд маска определяет байты источника, которые
сохраняются в памяти. Местоположение первого байта ячейки памяти приемника,
в которую сохраняются байты, определяются парой DS:DI/EDI. Старший значащий
бит каждого байта операнда маска определяет, будет ли сохранен в приемнике
соответствующий байт источника: 0 — байт не сохраняется; 1 — байт
сохраняется. Команда MASKMOVEDQU генерирует указание процессору не
использовать кэш. Это указание реализуется посредством метода кэширования
Страницы: 1, 2, 3, 4, 5
|