Форматы данных и команды их обработки процессоров Pentium III, Pentium IV
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 генерирует указание процессору не
использовать кэш. Это указание реализуется посредством метода кэширования
WC (Write Combining — память с комбинированной записью). При этом операции
упорядочивания, осуществляемые командами SFENCE или MFENCE, необходимо
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9
|