6.2. Команды блока XMM (SSE2 – Pentium 4)

ADDPD приемник, источник

ADDPD (ADD Packed Double-precision floating-point values) — сложение упакованных значений с плавающей точкой двойной точности.

Синтаксис: ADDPD rxmm1, rxmm2/m128

Машинный код: 66 0F 58 /r

Действие: сложить пары упакованных значении с плавающей точкой двойной точности источника и приемника (аналогично команде ADDPS) и сохранить результат сложения в соответствующих упакованных значениях с плавающей точкой двойной точности приемника.

Исключения: SIMD (NE): #O, #U, #I, #Р, #D; PM: #GP(0): 37, 42; #NM: 3; #ХМ; #PF(fault-code); #SS(0): 13; #UD: 10-12,15; RM: #GP: 13,16; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

ADDSD приемник, источник

ADDSD (ADD Scalar Double-precision floating-point values) — сложение скалярных упакованных значений с плавающей точкой двойной точности.

Синтаксис: ADDSD rxmm1, rxmm2/m64

Машинный код: F2 0F 58 /r

Действие: сложить младшие упакованные значения с плавающей точкой двойной точности источника и приемника (аналогично команде ADDSS) и сохранить результат сложения в младшем упакованном значении с плавающей точкой двойной точности приемника.

Исключения: SIMD (NE): #O, #U, #I, #Р, #D; PM: #GP(0): 37; #PF(fault-code); #SS(0): 13; #NM: 3; #XM; #UD: 10, 11,12, 15; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17, 18, 19, 22; #XM; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

ANDPD приемник, источник

ANDPD (bitwise logical AND 0F Packed Double-precision floating-point values) — поразрядное логическое И над упакованными значениями с плавающей точкой двойной точности.

Синтаксис: ANDPD xmm1, xmm2/m128

Машинный код: 66 0F 54 /r

Действие: выполнить поразрядное логические И над двумя упакованными значениями с плавающей точкой двойной точности по схеме: приемник[127-0]ß приемник[127-0] пoбитнoe_AND источник[127-0].

Исключения: PM: #GP(0): 37, 42; #SS(0): 13; #NM: 3; #XM; #PF(fault-code);

#UD: 10-12,15; RM: #GP: 13,16; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

ANDNPD приемник, источник

ANDNPD (bitwise logical AND NOT 0F Packed Double-precision floating-point values) — поразрядное логическое И-НЕ над упакованными значениями с плавающей точкой двойной точности. Синтаксис: ANDNPD xmm1, xmm2/m128

Машинный код: 66 0F 55 /r

Действие: выполнить операцию поразрядного логического И-НЕ над парами упакованных значений с плавающей точкой двойной точности в приемнике и источнике по схеме: приемник[127-0]ß((NОТприемник[127-0]) пoбитнoe_AND источник[127-0]).

Исключения: PM: #GP(0): 37, 42; #SS(0): 13; #NM: 3; #PF(fault-code); #UD: 10, 11,12, 15; #XM; RM: #GP: 13, 16; #NM: 3; #UD: 17, 18,19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

CLFLUSH адрес_байта

CLFLUSH (FLUSH Cache Line) — сброс на диск строки кэша, содержащей адрес_байта.

Синтаксис: CLFLUSH m8

Машинный код: 0F AE /7

Действие: объявить недействительной строку кэша, которая содержит линейный адрес адрес_байта на всех уровнях иерархии кэшей данных и команд процессора. Если на одном из уровней иерархии кэшей строка "грязная" (противоречит содержимому памяти), то перед объявлением ее недействительной она записывается в память.

Возможность использования команды CLFLUSH на данном процессоре необходимо выяснить с помощью CPUID. Выровненный размер строки кэша, на который воздействует CLFLUSH, также определяется командой CPUID.

Исключения: PM: #GP(0): 37; #PF(fault-code); #SS(0): 13; #UD: 16; RM: #GP: 13; #UD: 23; VM: исключения реального режима; #PF(fault-code).

CMPPD приемник, источник, условие

CMPPD (CoMPare Packed Double-precision floating-point values description) — сравнение упакованных значений с плавающей точкой двойной точности.

Синтаксис: CMPPD xmm1, xmm2/m128, imm8

Машинный код: 66 0F C2 /r i8

Действие: сравнить упакованные значения с плавающей точкой двойной точности в приемнике и источнике. Результат сравнения для каждой пары упакованных чисел представляется в виде маски: единичная маска ffffffffffffffffh — значения чисел равны, нулевая маска 0000000000000000h — значения не равны. Условие сравнения задается непосредственным операндом условие, первые 3 бита которого определяют тип сравнения. Остальные биты зарезервированы. Соответствие значений операнда условие условию сравнения следующее: 0 (приемник = источник), 1 (приемник < источник), 2 (приемник <= источник), 3 (приемник и (или) источник — NAN или в неопределенном формате), 4 (приемник  источник), 5 ((приемник <источник)), 6 ( (приемник <= источник)), 7 (упакованные значения приемника и источника — правильные значения с плавающей точкой двойной точности). Для проверки остальных условий необходимо вначале поменять содержимое приемника и источника, а затем использовать команду CMPPD со следующими значениями операнда условие: 1 (приемник > источник), 2 (приемник >= источник), 5 ( (приемник > источник)), 6 ( (приемник >= источник)).

Исключения: 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

Действие: алгоритм работы команды показан на рисунке ниже.

Исключения: 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

Действие: алгоритм работы команды показан на рисунке ниже.

В случае когда не удается выполнить точное преобразование, значение округляется в соответствии с полем 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

Действие: алгоритм работы команды показан на рисунке ниже.

В случае, когда не удается выполнить точное преобразование, значение округляется в соответствии с полем 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

Действие: алгоритм работы команды показан на рисунке ниже.

В случае, когда не удается выполнить точное преобразование, значение округляется в соответствии с полем 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

Действие: алгоритм работы команды показан на рисунке ниже.

В случае, когда не удается выполнить точное преобразование, значение округляется в соответствии с полем 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

Действие: алгоритм работы команды показан на рисунке ниже.

Исключения: 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

Действие: алгоритм работы команды показан на рисунке ниже.

В случае когда не удается выполнить точное преобразование, значение округляется в соответствии с полем 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

Действие: алгоритм работы команды показан на рисунке ниже.

Исключения: РМ: #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

Действие: алгоритм работы команды показан па рисунке ниже.

В случае, когда не удается выполнить точное преобразование, значение округляется в соответствии с полем 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

Действие: алгоритм работы команды показан на рисунке ниже.

В случае, когда не удается выполнить точное преобразование, значение округляется в соответствии с полем 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

Действие: алгоритм работы команды показан на рисунке ниже.

Исключения: РМ: #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

Действие: алгоритм работы команды показан на рисунке ниже.

Исключения: РМ: #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

Действие: алгоритм работы команды показан на рисунке ниже.

Если преобразованный результат больше чем максимально возможное целочисленное 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

Действие: алгоритм работы команды показан на рисунке ниже.

В случае, когда не удается выполнить точное преобразование, значение округляется в сторону нуля. Если преобразованный результат больше чем максимально возможнее целочисленное 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

Действие: алгоритм работы команды показан на рисунке ниже.

В случае, когда не удается выполнить точное преобразование, значение округляется в сторону нуля. Если преобразованный результат больше чем максимально возможнее целочисленное 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

Действие: алгоритм работы команды показан на рисунке ниже.

В случае, когда не удается выполнить точное преобразование, значение округляется в сторону нуля. Если преобразованный результат больше чем максимально возможное целочисленное 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, необходимо использовать совместно с командами MASKMOVEDQU. Для многопроцессорной конфигурации это особенно важно, так как различным процессорам могут требоваться различные типы памяти для чтения/записи ячейки приемника.

Исключения: PM: #GP(0): 37 (в том числе при нулевой маске); #NM: 3; #PF(fault-code); #SS(0): 13 (в том числе при нулевой маске); #UD: 10, 12, 15; RM: #GP: 13 (в том числе при нулевой маске); #NM: 3; #UD: 17,19, 22; VM: исключения реального режима; #PF(fault-code).

MAXPD приемник, источник

MAXPD (return MAXimum Packed Double-precision floating-point values) — возврат максимальных упакованных значений с плавающей точкой двойной точности.

Синтаксис: MAXPD rxmm1, rxmm2/m128

Машинный код: 66 0F 5F /r

Действие: сравнить упакованные значения с плавающей точкой двойной точности в источнике и приемнике и заместить максимальными из них соответствующие упакованные значения в приемнике. Если значение в источнике — SNAN (не QNAN), то оно помещается в приемник. Если только одно значение в приемнике или источнике — не число NaN (SNaN или QNAN), то в приемник помещается содержимое источника, которое может быть либо NAN, либо правильным значением числа с плавающей точкой.

Исключения: SIMD (NE): #I (в том числе, если источник = QNaN), #D; PM: #GP(0): 37, 42; #SS(0): 1;#NM: 3; #PF(fault-code); #UD: 10-12, 15; #XM; RM: #GP: 13, 16; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

MAXSD приемник, источник

MAXSD (return MAXimum Scalar Double-precision floating-point value) — возврат максимального скалярного значения с плавающей точкой двойной точности.

Синтаксис: MAXSD rxmm1, rxmm2/m64

Машинный код: F2 0F 5F /r

Действие: сравнить значения с плавающей точкой двойной точности в разрядах [63-0] источника и приемника и заместить максимальным из них значение в разрядах [63-0] приемника. Если значение в источнике — SNAN (не QNAN), то оно помещается в приемник. Если только одно значение в приемнике или источнике — не число NaN (SNaN или QNAN), то в приемник помещается содержимое источника, которое может быть либо NAN, либо правильным значением числа с плавающей точкой. Значение в разрядах [127-64] приемника не изменяется.

Исключения: SIMD (NE): #I (в том числе, если источник = QNaN), #D; PM: #GP(0): 37; #SS(0): 1; #NM: 3; #PF(fault-code); #UD: 10-12, 15; #ХМ; #АС(0)_срl3; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

MFENCE

MFENCE (Memory FENCE) — упорядочить операции загрузки и сохранения. Синтаксис: MFENCE

Машинный код: 0F AE /6

Действие: выполнить упорядочивание команд загрузки из памяти и сохранения в памяти, которые были инициированы перед этой командой MFENCE. Эта операция гарантирует, что каждая команда загрузки и сохранения, за которой следует в программе команда MFENCE, глобально видима перед любой другой командой загрузки и сохранения, за которой следует команда MFENCE. Команда MFENCE упорядочивается относительно команд загрузки и сохранения, других команд LFENCE, MFENCE, SFENCE и любых команд упорядочивания (сериализации, типа команды CPUID).

Исключения: отсутствуют.

MINPD приемник, источник

MINPD (return MINimum Packed Double-precision floating-point values) — возврат минимальных упакованных значений с плавающей точкой двойной точности.

Синтаксис: MINPD xmm1, xmm2/m128

Машинный код: 66 0F 5D /r

Действие: сравнить упакованные значения с плавающей точкой двойной точности в источнике и приемнике и заместить минимальными из них соответствующие упакованные значения в приемнике. Если значение в источнике — SNAN (не QNAN), то оно помещается в приемник. Если только одно значение в приемнике или источнике — не число NaN (SNaN или QNAN), то в приемник помещается содержимое источника, которое может быть либо NAN, либо правильным значением числа с плавающей точкой.

Исключения: SIMD (NE): #I (в том числе, если источник == QNaN), #D; PM: #GP(0): 37, 42; #SS(0): 1; #NM: 3; #PF(fault-code); #UD: 10-12, 15; #XM; RM: #GP: 13, 16; #NM: 3; #UD: 17-19, 22; #ХМ; VM: исключения реального режима; #PF(fault-code).

MINSD приемник, источник

MINSD (return MINimum Scalar Double-precision floating-point value) — возврат минимального скалярного значения с плавающей точкой двойной точности.

Синтаксис: MINSD xmm1, xmm2/m64

Машинный код: F2 0F 5D /r

Действие: сравнить значения с плавающей точкой двойной точности в разрядах [63-0] источника и приемника и заместить минимальным из них значение в разрядах [63-0] приемника. Если значение в источнике — SNAN (не QNAN), то оно помещается в приемник. Если только одно значение в приемнике или источнике — не число NaN (SNaN или QNAN), то в приемник помещается содержимое источника, которое может быть либо NAN, либо правильным значением числа с плавающей точкой. Значение в разрядах [127-64] приемника не изменяется.

Исключения: SIMD (NE): #I (в том числе, если источник = QNaN), #D; PM: #GP(0): 37; #SS(0): 1; #NM: 3; #PF(fault-code); #UD: 10-12, 15; #ХМ; #АС(0)_ср13; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

MOVAPD приемник, источник

MOVAPD (MOVe Aligned Packed Double-precision floating-point values) — перемещение упакованных выровненных значений с плавающей точкой двойной точности.

Синтаксис и машинный код:

0F 28 /r MOVAPS xmm1, xmm2/m128

0F 29 /r MOVAPS xmm2/m128, xmm1

Действие: переместить два двойных учетверенных слова (содержащих два упакованных значения с плавающей точкой двойной точности) из источника в приемник. Операнд в памяти должен быть выровнен на 16-байтовой границе.

Исключения: 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).

MOVD приемник, источник

MOVD (Move Double word) — перемещение двойного слова между ХММ-регист-ром и 32-разрядным регистром (ячейкой памяти).

Синтаксис и машинный код:

66 0F 6Е /r MOVD rxmm, r/m32

66 0F 7E /r MOVD r/m32, rxmm

Действие:

• Если приемник является ХММ-регистром, поместить в биты 0-31 приемника значение источника, поместить в биты 32-127 приемника нулевое значение.

• Если приемник является 32-разрядной ячейкой памяти или регистром общего назначения, то поместить в приемник значение бит 0-31 источника (ХММ-регистра).

Флаги: не изменяются.

Исключения: РМ: #GP(0): 1, 2; #MF; #PF(fault-code); #SS(0): 1; #UD: 10, 12, 15; #NM 3; #AC(0)_cpl3; RM: #GP: 13; #MF; #NM: 3; #UD: 17,19,22; VM: #PF(fault-code); #AC(0)_u.

MOVDQA приемник, источник

MOVDQA (MOVe Aligned Double Quadword) — перемещение выровненных 128 бит из источника в приемник.

Синтаксис и машинный код:

66 0F 6F /r MOVDQA rxmm1, rxmm2/m128

66 0F 7F /r MOVDQA rxmm2/m128, rxmml

Действие: переместить содержимое источника в приемник. Операнд в памяти должен быть выровнен на 16-байтовой границе.

Исключения: РМ: #GP(0): 2,42; #NM: 3; #SS(0): 1; RM: #GP: 13,16; #NM: 3; #UD: 17, 19, 22; #PF(fault-code); VM: исключения реального режима; #PF(fault-code).

MOVDQU приемник, источник

MOVDQU (MOVe Unaligned Double Quadword description) — перемещение невыровненных 128 бит из источника в приемник.

Синтаксис и машинный код:

F3 0F 6F /r MOVDQU xmm1, xmm2/m128

F3 0F 7F /r MOVDQU xmm2/m128, xmm1

Действие: переместить содержимое источника в приемник.

Исключения: РМ: #GP(0): 2; #NM: 3; #PF(fault-code); #SS(0): 1; #UD: 10,12,15; RM: #GP: 13; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).

MOVDQ2Q приемник, источник

MOVDQ2Q (MOVe Quadword from XMM to MMX register description) — перемещение младшего учетверенного слова ХММ-регистра в ММХ-регистр.

Синтаксис: MOVDQ2Q mm, xmm

Машинный код: F2 0F D6

Действие: переместить содержимое источника в приемник по схеме: приемник ß источник[63-0].

Исключения: РМ: #NM: 3; #UD: 10, 12, 15; #MF; RM: исключения защищенного

режима; VM: исключения защищенного режима.

MOVHPD приемник, источник

MOVHPD (MOVe High Packed Double-precision floating-point value) — перемещение старшего упакованного значения с плавающей точкой двойной точности.

Синтаксис и машинный код:

66 0F 16 /r MOVHPD rxmm, m64

66 0F 17 /r MOVHPD m64, rxmm

Действие: переместить учетверенное слово (содержащее упакованное значение с плавающей точкой двойной точности) из источника в приемник. Источник и приемник могут быть либо ХММ-регистром, либо 64-разрядной ячейкой памяти (но не одновременно). Для регистрового операнда перемещению подвергается старшее учетверенное слово (разряды [64-127]). Младшее учетверенное слово ХММ-регистра (разряды [0-63]) не изменяется.

Исключения: РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10, 13, 19; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 12,13,17; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

MOVLPD приемник, источник

MOVLPD (MOVe Low Packed Double-precision floating-point value) — перемещение младшего упакованного значения с плавающей точкой двойной точности.

Синтаксис и машинный код:

66 0F 12 /r MOVLPD rxmm, m64

66 0F 13 /r MOVLPD m64, rxmm

Действие: переместить учетверенное слово (содержащее упакованное значение с плавающей точкой двойной точности) из источника в приемник. Источник и приемник могут быть либо ХММ-регистром, либо 64-разрядной ячейкой памяти (но не одновременно). Для регистрового операнда перемещению подвергается младшее учетверенное слово (разряды [0-63]). Старшее учетверенное слово ХММ-регистра (разряды [64-127]) не изменяется.

Исключения: РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10, 12, 13; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17,19,20; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

MOVMSKPD приемник, источник

MOVMSKPD (extract Packed Double-precision floating-point sign MaSK) — извлечение 2-битной знаковой маски упакованных значений с плавающей точкой двойной точности.

Синтаксис: MOVMSKPD r32, rxmm

Машинный код: 66 0F 50 /r

Действие: извлечь знаковые разряды из упакованных значении с плавающей точкой двойной точности операнда источник (ХММ-регистр) и сохранить полученную знаковую маску в двух младших битах операнда приемник (32-битный общий регистр).

Исключения: РМ: #NM: 3; #ХМ; #UD: 10-12,15; RM: исключения защищенного режима; VM: исключения защищенного режима.

MOVNTDQ приемник, источник

MOVNTDQ (store Double Quadword using Non-Temporal hint description) — сохранение двойного учетверенного слова из ХММ-регистра в память без использования кэша.

Синтаксис: 66 0F E7 /r

Машинный код: MOVNTDQ m128, rxmm

Исключения: РМ: #GP(0): 37, 42; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10, 12,15; RM: #GP: 13,16; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).

MOVNTI приемник, источник

MOVNTI (store doubleword using Non-Temporal hint description) — сохранение двойного слова из 32-разрядного регистра общего назначения в память без использования кэша.

Синтаксис: MOVNTI m32, r32

Машинный код: 0F C3 /r

Исключения: РМ: #GP(0): 37; #PF(fault-code); #SS(0): 13; #UD: 15; RM: #GP: 13, 16; #NM: 3; #UD: 22; VM: исключения реального режима; #PF(fault-code).

MOVNTPD приемник, источник

MOVNTPD (store Packed Double-Precision floating-point values using Non-Temporal hint) — сохранение упакованных значений с плавающей точкой двойной точности из ХММ-регистра в память без использования кэша.

Синтаксис: MOVNTPD m128, rxmm

Машинный код: 66 0F 2В /r

Исключения: РМ: #GP(0): 37, 42; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10, 12,15; RM: #GP: 13,16; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(rault-code).

MOVQ приемник, источник

MOVQ (Move Quadword) — переместить учетверенное слово.

Синтаксис и машинный код:

F3 0F 7E MOVQ rxmm1, rxmm2/m64

66 0F D6 MOVQ rxmm2/m64, rxmm1

Действие:

• Если приемник и источник являются ХММ-регистрами, то изменить содержимое приемника следующим образом: приемник[63-0]ßисточник[63-0]; разряды приемник[127-64] не изменяются.

• Если приемник — 64-разрядная ячейка памяти, то изменить содержимое приемника следующим образом: приемник[63-0]ßисточник[63-0].

• Если источник — 64-разрядная ячейка памяти, то изменить содержимое приемника следующим образом: приемник[63-0]ßисточник[63-0], приемник[63-0]ß0000000000000000h.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 1, 2; #SS(0): 1; #UD: 10,12,15; #NM: 3; #MF; #PF(fault-code); #AC(0)_cpl3; RM: #GP: 13; #MF; #NM: 3; #UD: 17,19, 22; VM: исключения В реального режима; #PF(fault-code); #AC(0)_u.

MOVQ2DQ приемник, источник

MOVQ2DQ (MOVe Quadword from MMX to XMM register description) — перемещение учетверенного слова из ММХ-регистра в младшее учетверенное слово ХММ-регистра.

Синтаксис: MOVQ2DQ rxmm, rmmx

Машинный код: F3 0F D6

Действие: переместить содержимое источника в приемник по схеме: приемник[63-0] ß источник; приемник[127-64] ß 00000000000000000h.

Исключения: РМ: #NM: 3; #UD: 10, 12, 15; #MF; RM: исключения защищенного режима; VM: исключения защищенного режима.

MOVSD приемник, источник

MOVSD (MOVe Scalar Double-precision floating-point value) — перемещение скалярного значения с плавающей точкой двойной точности.

Синтаксис и машинный код:

F2 0F 10 /r MOVSD rxmm1, rxmm2/m64

F2 0F 11 /r MOVSD rxmm2/m64, rxmm1

Действие: переместить скалярное значение с плавающей точкой двойной точности из разрядов [0-63] источника в разряды [0-63] приемника. Если операнды — ХММ-регистры, то разряды [64-127] приемника не изменяются. Если источник -ячейка памяти, то разряды [64-127] приемника обнуляются.

Исключения: РМ: #GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM; #UD:

10-12,15; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17-19,22; #ХМ; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

MOVUPD приемник, источник

MOVUPD (MOVe Unaligned Packed Double-precision floating-point values) — перемещение невыровненных упакованных значений с плавающей точкой двойной точности.

Синтаксис и машинный код:

66 0F 10 /r MOVUPD xmm1, xmm2/m128

66 0F 11 /r MOVUPD xmm2/m128, xmm1

Действие: переместить два двойных учетверенных слова (содержащих два упакованных значения с плавающей точкой двойной точности) из источника в приемник. Не требуется выравнивания операнда в памяти на 16-байтовой границе.

Исключения: РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-12, 15; #XM; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

MULPD приемник, источник

MULPD (MULtiply Packed Double-precision floating-point values) — умножение упакованных значений с плавающей точкой двойной точности.

Синтаксис: MULPD rxmm1, rxmm2/m128

Машинный код: 66 0F 59 /r

Действие: умножить пары упакованных значений с плавающей точкой двойной точности источника и приемника по схеме: приемник[63-0]ßприемник[63-0]источник[63-0]; приемник[127-64]ßприемник[127-64]источник[127-64].

Исключения: SIMD (NE): #O, #U, #I, #Р, #D; PM: #GP(0): 37, 42; #SS(0): 13; #NM: 3; #PF(fault-code); #UD: 10-12, 15; #XM; RM: #GP: 13, 16; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

MULSD приемник, источник

MULSD (MULtiply Scalar Double-precision floating-point values) — умножение скалярных упакованных значений с плавающей точкой двойной точности.

Синтаксис: MULSD rxmm1, rxmm2/m64

Машинный код: F2 0F 59 /r

Действие: умножить младшие упакованные значения с плавающей точкой двойной точности источника и приемника по схеме: приемник[63-0]ßприемник[63-0] источник[63-0]; приемник[127-64] — не изменяется.

Исключения: SIMD (NE): #O, #U, #I, #Р, #D; PM: #GP(0): 37; #SS(0): 13; #NM: 3; #PF(fault-code); #UD: 10-12, 15; #XM; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #ХМ; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

ORPD приемник, источник

ORPD (bitwise logical OR 0F Double-precision floating-point values) — поразрядное логическое ИЛИ над упакованными значениями с плавающей точкой двойной точности.

Синтаксис: ORPD xmm1, xmm2/m128

Машинный код: 66 0F 56 /r

Действие: выполнить операцию поразрядного логического ИЛИ над парами упакованных значений с плавающей точкой двойной точности в приемнике и источнике по схеме: приемник[127-0]ßприемник[127-0]) побитное_ОR источник[127-0].

Исключения: 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).

PACKSSWB/PACKSSDW приемник, источник

PACKSSWB (Pack with Signed Saturation Words to Bytes) — упаковка со знаковым насыщением слов в байты. PACKSSDW (Pack with Signed Saturation Double Words to Words) — упаковка со знаковым насыщением двойных слов в слова.

Синтаксис и машинный код:

66 0F 63 /r PACKSSWB rxmm1, rxmm2/m128

66 0F 6В /r PACKSSDW rxmm1, rxmm2/m128

Действие: команды преобразуют шестнадцать/восемь элементов размером в слово/двойное слово из источника и приемника в шестнадцать/восемь элементов в операнде приемник размером в байт/слово (см. рисунок ниже). Если значение элемента источника превышает допустимое значения элемента приемника, то в элементе приемника формируется предельный результат в соответствии с принципом знакового насыщения:

• PACKSSWB — 07fh для положительных чисел и 080h для отрицательных;

• PACKSSDW — 07fffh для положительных чисел и 08000h для отрицательных.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PACKUSWB приемник, источник

PACKUSWB (PACK with Unsigned Saturation Description) — упаковка с беззнаковым насыщением слов в байты.

Синтаксис: PACKUSWB rxmm1, rxmm2/m128

Машинный код: 66 0F 67 /r

Действие: команда преобразует шестнадцать элементов из источника и приемника размером в слово в шестнадцать элементов в приемнике размером в байт (см. рисунок ниже). Если пересылаемое значение больше допустимого для поля приемника, то в нем формируется предельный результат в соответствии с принципом беззнакового насыщения, что соответствует значениям 0Ffh для положительных чисел и 00h для отрицательных.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17, 19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PADDB/PADDW/PADDD приемник, источник

PADDB (Packed ADDition Bytes) — сложение упакованных байт. PADDW (Packed ADDition Words) — сложение упакованных слов. PADDD (Packed ADDition Double words) — сложение упакованных двойных слов.

Синтаксис и машинный код:

66 0F FC /r PADDB rxmm1, rxmm2/m128

66 0F FD /r PADDW rxmm1, rxmm2/m128

66 0F FE /r PADDD rxmm1, rxmm2/m128

Действие: команда в зависимости от кода операции складывает соответствующие элементы операндов источника и приемника размером байт/слово/двойное слово. При возникновении переполнения результат формируется в соответствии с принципом циклического переполнения и помещается в операнд приемник.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PADDQ приемник, источник

PADDQ (ADD Packed Quadword integers description) — сложение учетверенных слов.

Синтаксис и машинный код:

0F D4 /r PADDQ rmmx1 ,rmmx2/m64

66 0F D4 /r PADDQ rxmm1,rxmm2/m128

Действие: сложить 64-битные целые значения в источнике и приемнике. Исходя из типа источника, возможны две схемы умножения:

• источник — ММХ-регистр или ячейка памяти m64: приемник[63-0]ßприем-ммк[63-0] + источник[63-0], приемник — ММХ-регистр;

• источник — ХММ-регистр или ячейка памяти: приемник[63-0]ßприемник[63-0] + источник[63-0]; приемник[127-64.]ßприемник[127-64] + источник[127-64].

В результате выполнения команды PADDQ регистр EFLAGS не отражает факта возникновения ситуации переполнения или переноса. Когда результат умножения слишком большой, чтобы быть представленным в 64-битном элементе приемника, то он "заворачивается" (перенос игнорируется). Для обнаружения подобных ситуаций программное обеспечение должно использовать другие методы.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2,42; #SS(0): 1; #UD: 10,12,15; #NM: 3; #PF(fault-code); RM: #GP: 13, 16; #UD: 17, 19, 22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PADDSB/PADDSW приемник, источник

PADDSB (Packed ADDition signed Bytes with Saturation) — сложение упакованных бант со знаковым насыщением. PADDSW (Packed ADDition signed Words with Saturation) — сложение упакованных слов со знаковым насыщением.

Синтаксис и машинный код:

66 0F EC /r PADDSB rxmm1, rxmm2/m128

66 0F ED /r PADDSW rxmm1, rxmm2/m128

Действие: команда в зависимости от кода операции складывает соответствующие элементы операндов источника и приемника размером байт/слово с учетом знака. При возникновении переполнения результат формируется в соответствии с принципом знакового насыщения:

• PADDSB — 07fh для положительных чисел и 080h для отрицательных;

• PADDSW — 07fffh для положительных чисел и 08000h для отрицательных.

Результат помещается в операнд приемник.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19, 22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PADDUSB/PADDUSW приемник, источник

PADDUSB (Packed ADDition unsigned Bytes with Unsigned Saturation) — сложение упакованных байт с беззнаковым насыщением. PADDUSW (Packed ADDition unsigned Words with Unsigned Saturation) — сложение упакованных слов с беззнаковым насыщением.

Синтаксис и машинный код:

66 0F DC /r PADDUSB rxmm1, rxmm2/m128

66 0F DD /r PADDUSW rxmm1, rxmm2/m128

Действие: команда в зависимости от кода операции складывает без учета знака соответствующие элементы операндов источника и приемника размером байт/слово. При возникновении переполнения результат формируется в приемнике в соответствии с принципом беззнакового насыщения:

• PADDUSB – 0ffh и 00h для результатов сложения соответственно больших или меньших максимально/минимально представимых значений в беззнаковом байте;

• PADDUSW – 0ffffh и 0000h для результатов сложения соответственно больших или меньших максимально/минимально представимых значений в беззнаковом слове.

Результат помещается в операнд приемник.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2,42; #SS(0): 1; #UD: 10,12,15; #NM: 3; #PF(fault-code); RM: #GP: 13, 16; #UD: 17, 19, 22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PAND приемник, источник

PAND (Packed logical AND) — упакованное логическое И.

Синтаксис: PAND rxmm1, rxmm2/m128

Машинный код: 66 0F DB /r

Действие: команда выполняет побитовую операцию логическое И над всеми битами операндов источника и приемника. Результат помещается в операнд приемник.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PANDN приемник, источник

PANDN (Packed logical AND Not) — упакованное логическое И-НЕ. Синтаксис: PANDN rxmm1, rxmm2/m128

Машинный код: 66 0F DF /r

Действие: команда выполняет побитовую операцию логическое И-НЕ над всеми битами операндов источника и приемника. Результат помещается в операнд приемник.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PAUSE

PAUSE (Spin Loop Hint) — улучшить выполнение цикла ожидания-занятости. Синтаксис: PAUSE

Машинный код: F3 90

Действие: улучшить выполнение цикла ожидания-занятости (spin-wait loops). При выполнении подобных циклов процессор Pentium 4 испытывает проблему при завершении цикла, обнаруживая возможное нарушение доступа к памяти. Команда PAUSE подсказывает процессору, что данная кодовая последовательность — цикл ожидания-занятости. Процессор использует эту подсказку, чтобы игнорировать возможную ситуацию нарушения доступа к памяти в большинстве случаев. Это улучшает работу процессора вплоть до значительного снижения его энергопотребления. По этой причине рекомендуется включать команду PAUSE во все циклы ожидания-занятости.

Исключения: отсутствуют.

PAVGB/PAVGW приемник, источник

PAVGB/PAVGW (Packed Average) — упакованное среднее.

Синтаксис и машинный код:

66 0F E0 /r PAVGB rxmm1, rxmm2/m128

66 0F E3 /r PAVGW rxmm1, rxmm2/m128

Действие: выполнить параллельное сложение байт/слов источника и приемника и сдвинуть результат сложения на один разряд вправо (деление на 2).

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2,42; #SS(0): 1; #UD: 10,12,15; #NM: 3; #PF(fault-code); RM: #GP: 13, 16; #UD: 17, 19, 22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PCMPEQB/PCMPEQW/PCMPEQD приемник, источник

PCMPEQB (Packed CoMPare for Equal Byte) — сравнение на равенство упакованных байт. PCMPEQW (Packed CoMPare for Equal Word) — сравнение на равенство упакованных слов. PCMPEQD (Packed CoMPare for Equal Double word) — сравнение на равенство упакованных двойных слов.

Синтаксис и машинный код:

66 0F 74 /r PCMPEQB rxmm1, rxmm2/m128

66 0F 75 /r PCMPEQW rxmm1, rxmm2/m128

66 0F 76 /r PCMPEQD rxmm1, rxmm2/m128

Действие: команды сравнивают на равенство элементы источника и приемника и

формируют элементы результата по следующему принципу:

• если элемент источника равен соответствующему элементу приемника, то элемент результата в зависимости от применяемой команды устанавливается равным одному из следующих значений: 0ffh, 0ffffh, 0ffffffffh;

• если элемент источника не равен соответствующему элементу приемника, то элемент результата в зависимости от применяемой команды устанавливается равным одному из следующих значений: 00h, 0000h, 00000000h.

Результат помещается в операнд приемник.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PCMPGTB/PCMPGTW/PCMPGTD приемник, источник

PCMPGTB (Packed CoMPare for Greater Than Byte) — сравнение по условию "больше чем" упакованных байт. PCMPGTW (Packed CoMPare for Greater Than Word) — сравнение по условию "больше чем" упакованных слов. PCMPGTD (Packed CoMPare for Greater Than Double word) — сравнение но условию "больше чем" упакованных двойных слов.

Синтаксис и машинный код:

66 0F 64 /r PCMPGTB rxmm1, rxmm2/m128

66 0F 65 /r PCMPGTW rxmm1, rxmm2/m128

66 0F 66 /r PCMPGTD rxmm1, rxmm2/m128

Действие: команда производит сравнение по условию "больше чем" элементов операндов источника и приемника и формирует элементы результата по следующему принципу:

• если элемент приемника больше соответствующего элемента источника, то элемент результата в зависимости от применяемой команды устанавливается равным одному из следующих значений: 0ffh, 0ffffh, 0ffffffffh;

• если элемент приемника не больше соответствующего элемента источника, то элемент результата в зависимости от применяемой команды устанавливается равным одному из следующих значений: 00h, 0000h, 00000000h.

Результат помещается в операнд приемник.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PEXTRW приемник, источник, маска

PEXTRW (Extract Word) — извлечение 16-битного слова из ХММ-рстистра по маске.

Синтаксис: PEXTRW r32, rxmm, imm8

Машинный код: 66 0F C5 /r i8

Действие: команда выделяет четыре младших бита непосредственного операнда маска. Их значение определяет номер слова в операнде источник (ХММ-регистр). Данное слово перемещается в младшие 16 бит операнда приемник, представляющего собой 32-разрядный регистр общего назначения. Старшие 16 бит этого регистра обнуляются.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PINSRW приемник, источник, маска

PINSRW (Insert Word) — вставка 16-битного слова в регистр ММХ.

Синтаксис: PINSRW rxmm, r32/m16, imm8

Машинный код: 66 0F C4 /r i8

Действие: команда выделяет четыре младших бита непосредственного операнда маска. Их значение определяет номер слова в операнде приемник, который представляет собой ХММ-регистр. В это слово будут перемещены младшие 16 бит операнда источник, который представляет собой 32-разрядный регистр общего назначения или 16-битную ячейку памяти.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PMADDWD приемник, источник

PMADDWD (Packed Multiply and ADD Word to Double word) — упакованное знаковое умножение знаковых слов операндов источник и приемник с последующим сложением промежуточных результатов в формате двойного слова.

Синтаксис: PMADDWD rxmm1, rxmm2/m128

Машинный код: 66 0F F5 /r

Действие: работа команды аналогична команде блока MMX PMADDWD, за исключением того, что вместо ММХ-регистров используются ХММ-регистры и разрядность операндов в памяти повышается до 128 бит.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PMAXSW приемник, источник

PMAXSW (MAXimum 0F Packed Signed Word integers) — возврат максимальных упакованных знаковых слов.

Синтаксис: PMAXSW rxmmi, rxmm2/m128

Машинный код: 66 0F ЕЕ /r

Действие: команда определяет наибольшее слово для каждой пары упакованных слов источника и приемника с учетом знака и заменяет им соответствующие слова приемника.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PMAXUB приемник, источник

PMAXUB (MAXimum 0F Packed Unsigned Byte integers) — возврат максимальных упакованных беззнаковых байт.

Синтаксис: PMAXUB rxmmi, rxmm2/m128

Машинный код: 66 0F DE /r

Действие: для каждой пары байтовых элементов источника и приемника определить наибольший без учета знака и заменить им соответствующим элемент приемника.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19, 22; #NM: 3; VM: исключения реального режима; ftPF(fault-code).

PMINSW приемник, источник

PMINSW (MINimum of Packed Signed Word integers) — возврат минимальных упакованных знаковых слов.

Синтаксис: PMINSW rxmmi, rxmm2/m128

Машинный код: 66 0F EA /r

Действие: для каждой пары элементов (размером 16 бит) источника и приемника команда определяет наименьший с учетом знака и заменяет им соответствующий элемент приемника.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15: #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PMINUB приемник, источник

PMINUB (MINimum of Packed Unsigned Byte integers) — возврат минимальных упакованных беззнаковых бант.

Синтаксис: PMINUB rxmmi, rxmm2/m128

Машинный код: 66 0F DA /r

Действие: для каждой пары байтовых элементов источника и приемника команда определяет наименьший без учета знака и заменяет им соответствующий элемент

приемника.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(lault-code); RM: #GP: 13,16; #UD: 17,19, 22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PMOVMSKB приемник, источник

PMOVMSKB (MOVe Byte MaSK) — перемещение байтовой маски в целочисленный регистр.

Синтаксис: PMOVMSKB r32, rxmm

Машинный код: 66 0F D7 /r

Действие: команда извлекает и копирует значения старшего бита каждого из упакованных байт ХММ-регистра в младшие 16 бит 32-битного целочисленного регистра общего назначения. Остальные разряды целочисленного регистра обнуляются.

Флаги: не изменяются.

Исключения: РМ: #UD: 10, 12,15; #NM: 3; RM: исключения защищенного режима; VM: исключения защищенного режима.

PMULHUW приемник, источник

PMULHUW (MULtiply Packed Unsigned integers and store High result) — умножение упакованных беззнаковых слов с возвратом старших слов результата.

Синтаксис: PMULHUW rxmm1, rxmm2/m128

Машинный код: 66 0F E4 /r

Действие: команда производит умножение упакованных слов источника и приемника без учета знака и формирует элементы результата в соответствии с приведенной ниже схемой. Как видно из нее, в результате умножения слов операндов источник и приемник получаются промежуточные результаты размером 32 бита.

Далее старшее слово (16 бит) из каждого промежуточного результата умножения исходных элементов помещается в 16-битный элемент окончательного результата. Результат помещается в операнд приемник.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PMULHW приемник, источник

PMULHW (MULtiply Packed signed integers and store High result) — упакованное знаковое умножение слов с возвратом старшего слова результата.

Синтаксис: PMULHW rxmm1, rxmm2/m128

Машинный код: 66 0F E5 /r

Действие: команда производит умножение упакованных слов источника и приемника с учетом знака и формирует элементы результата в соответствии со схемой, приведенной при описании команды PMULHUW.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PMULLW приемник, источник

PMULLW (MULtiply Packed signed integers and store Low result) — упакованное знаковое умножение слов с возвратом младшего слова результата.

Синтаксис: PMULLW xmm 1, xmm2/m 128

Машинный код: 66 0F D5 /r

Действие: команда производит умножение с учетом знака упакованных слов источника и приемника и формирует элементы результата в соответствии с приведенной ниже схемой.

Как видно из этой схемы, в результате умножения слов источника и приемника получаются промежуточные результаты размером 32 бита. Далее младшее слово (16 бит) из каждого 32-битного элемента промежуточного результата умножения исходных элементов помещается в 16-битный элемент результата (операнд приемник). Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13, 16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PMULUDQ приемник, источник

PMULUDQ, (MULtiply Packed Unsigned Doubleword integers description) — умножение 32-битных целых значений без учета знака и сохранение результата в ХММ-регистре.

Синтаксис и машинный код:

0F F4 /r PMULUDQ rmmx1, rmmx2/m64

66 0F F4 /r PMULUDQ rxmm1, rxmm2/m128

Действие: умножить 32-битные целые значения со знаком в источнике и приемнике. Исходя из типа источника, возможны две схемы умножения:

• источник — ММХ-регистр или ячейка памяти m64: приемник[63-0] ßприемник[?А-0]  источник[31-0];

• источник — ХММ-регистр или ячейка памяти: приемник[63-0}ßприемник[31-0] источник[31-0]; приемник[127-64]ßприемник[95-64]источник[95-64].

Когда результат умножения слишком большой, чтобы быть представленным в приемник, то он "заворачивается" (перенос игнорируется).

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2,42; #SS(0): 1; #UD: 10,12,15; #NM: 3; #PF(fault-code); RM: #GP: 13, 16; #UD: 17, 19, 22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

POR приемник, источник

POR (bitwise logical OR) — упакованное логическое ИЛИ.

Синтаксис: POR rxmm1, rxmm2/m128

Машинный код: 66 0F ЕВ /r

Действие: команда производит побитовую операцию логическое ИЛИ над всеми битами операндов источника и приемника. Результат помешается в операнд приемник.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19, 22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PSADBW приемник, источник

PSADBW (Compute Sum 0F Absolute Differences) — суммарная разница значений нар беззнаковых упакованных байт.

Синтаксис: PSADBW rxmm1, rxmm2/m128

Машинный код: 66 0F F6 /r

Действие: для каждой пары байт двух упакованных учетверенных слов операндов источник и приемник вычислить модуль разности, после чего сложить полученные модули. Результат записать в младшее слово каждого из двух упакованных учетверенных слов приемника, старшие три слова в упакованных учетверенных словах приемника обнулить. Принцип работы программы поясняет схема ниже.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PSHUFD приемник, источник, маска

PSHUFD (SHUFfle Packed Doublewords) — копирование двойных слов из ХММ-операнда источник в ХММ-операнд приемник.

Синтаксис: PSHUFD xmm1, xmm2/m128, imm8

Машинный код: 66 0F 70 /r i8

Действие: на основе значения пар бит маски копировать двойные слова из источника в приемник. Каждая пара бит маски определяет номер слова источника для перемещения.в приемник следующим образом:

• маска[1:0]:

• 00 приемник[0...31] ß источник[0...31],

• 01 приемник[0...31] ß источник[32...63],

• 10 npueMHUK[0...31] ß источник[64...95];

• 11 приемник[0...31] ß источник[96..127];

• маска[3:2]:

• 00 приемник[32...63] ß источник[0...31];

• 01 приемник[32...63] ß источник[32...63];

• 10 приемник[32...63] ß источник[64...95];

• 11 приемник[32...63] ß источник[96..127];

• маска[5:4]:

• 00 приемник[64...95] ß источник[0...31];

• 01 приемник[64...95] ß источник[32...63],

• 10 приемиик[64...95] ß источник[64...95];

• 11 приемник[64...95] ß источник[96..127];

• маска[7:6]:

• 00 приемник[96..127] ß источник[0...31];

• 01 приемник[96..127] ß источник[32...63];

• 10 приемник[96..127] ß источник[64...95];

• 11 приемник[96..127] ß источник[96...127].

Если использовать один и тот же ХММ-регистр в качестве источника и приемника, то можно выполнять любые перестановки двойных слов в пределах одного ХММ-регистра, в том числе и инициализацию значением одного двойного слова других двойных слов. Работу команды PSHUFD поясняет следующая схема:

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19, 22; VM: исключения реального режима; #PF(fault-code).

PSHUFHW приемник, источник, маска

PSHUFHW (SHUFfle Packed High Words) — копирование слов из старшего учетверенного упакованного слова ХММ-операнда источник в старшее учетверенное упакованное слово ХММ-операнда приемник.

Синтаксис: PSHUFHW xmm1, xmm2/m128, imm8

Машинный код: F3 0F 70 /r i8

Действие: на основе значения пар бит маски копировать слова из старшего упакованного учетверенного слова источника в старшее учетверенное упакованное слово приемника. Каждая пара бит маски определяет номер слова источника для перемещения в приемник следующим образом:

• маска[1:0]:

• 00 приемник[64...79] ß источник[64...79];

• 01 приемник[64...79] ß источник[80...95];

• 10 приемник[64...79] ß источник[96..111];

• 11 приемник[64...79] ß источник[112...127];

• маска[3:2]:

• 00 приемник[80...95] ß источник[64...79];

• 01 приемник[80...95] ß источник[80...95];

• 10 приемник[80...95] ß источник[96..111];

• 11 приемник[80...95] ß источник[112..127];

• маска[5:4]:

• 00 приемник [96...111] ß источгшк[64...79];

• 01 приемник [96...111] ß источник[80...95];

• 10 приемник [96...111] ß источпик[96...111];

• 11 приемник [96...111] ß источник[112..127];

• маска[7:6]:

• 00 приемник[112...127] ß источник[64...79];

• 01 приемник[112...127] ß источник[80...95];

• 10 приемник[112...127] ß источник[96..111];

• 11 приемник[112...127} ß источник[112..127].

Если использовать один и тот же ХММ-регистр в качестве источника и приемника, то можно выполнять любые перестановки слов в пределах старшего учетверенного слова одного ХММ-регистра, в том числе и инициализацию значением одного слова других слов. Работу команды PSHUFHW поясняет следующая схема.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-codc); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fanlt-code).

PSHUFLW приемник, источник, маска

PSHUFLW (SHUFfle Packed Low Words) — копирование слов из младшего учетверенного упакованного слова ХММ-онераида источник в младшее учетверенное упакованное слово ХММ-онеранда приемник.

Синтаксис: PSHUFLW rxmm1, rxmm2/m128, imm8

Машинный код: F2 0F 70 /r i8

Действие: на основе значения пар бит маски копировать слова из младшего учетверенного слова источника в младшее учетверенное слово приемника. Каждая пара бит маски определяет номер слова источника для перемещения в приемник следующим образом:

• маска[1:0]:

• 00 приемник[00..15] ß источник[00..15];

• 01 приемник[00..15] ß источник[16..31];

• 10 приемник[00..15] ß источник[32..47];

• 11 приемник[00..15] ß источник[48..63];

• маска[3:2]:

• 00 приемник[16...31] ß источник[00..15];

• 01 приемник[16...31] ß источник[16...31];

• 10 приемник[16...31] ß источгшк[32..47];

• 11 приемник[16...31] ß источник[48...63];

• маска[5:4]:

• 00 приемник[32..47] ß источник[00..15];

• 01 приемник[32..47] ß источник[16..31];

• 10 приемник[32..47] ß источник[32..47];

• 11 приемник[32..47] ß источник[48..63];

• маска[7:6]:

• 00 приемник[47...63] ß источник[00..15];

• 01 приемник[47...63] ß источник[16..31];

• 10 приемник[47...63] ß истспник[32..47];

• 11 приемник[47...63] ß источник[48..63].

Если использовать один и тот же ХММ-регистр в качестве источника и приемника, то можно выполнять любые перестановки слов в пределах младшего учетверенного слова одного ХММ-регистра, в том числе и инициализацию значением одного слова других слов. Работу команды PSHUFLW поясняет схема, показанная далее.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13, 16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).

PSLLDQ приемник, количество сдвигов

PSLLDQ (Shift Double Quadword Left Logical) — логический сдвиг влево приемника на число байт количество _сдвигов.

Синтаксис: PSLLDQ xmm1, imm8

Машинный код: 66 0F 73 /7 i8

Действие: сдвиг влево приемника на число байт, указанных непосредственным операндом количество _сдвигов. Освобождаемые слева младшие байты обнуляются. Если значение, указанное операндом количество _сдвигов, больше чем 15, операнд приемник обнуляется.

Флаги: не изменяются.

Исключения: #UD: 10,12,15; #NM: 3; RM: исключения защищенного режима; VM: исключения защищенного режима.

PSLLW/PSLLD/PSLLQ приемник, количество_сдвигов

PSLLW/PSLLD/PSLLQ (SHIFt packed data Left Logical) — сдвиг влево логический приемника на число бит количество_сдвигов.

Синтаксис и машинный код:

66 0F F1 /r PSLLW rxmrn-l, rxmm2/m128

66 0F 71 /6 ib PSLLW rxmm1, imm8

66 0F F2 /r PSLLD rxmm1, rxmm2/m128

66 0F 72 /6 ib PSLLD rxmm1, imm8

66 0F F3 /r PSLLQ rxmm1, rxmm2/m128

66 0F 73 /6 ib PSLLQ rxmm1, imm8

Действие: сдвиг упакованных элементов приемника (слов, двойных слов, учетверенных слов) влево на число бит, указанных операндом количество _сдвигов. Освобождаемые слева биты замещаются нулевыми. Если значение, указанное операндом количество _сдвигов, больше чем 15 (для слов), 31 (для двойных слов) или 63 (для учетверенных слов), то значение операнда приемник устанавливается равным 0. Операнд количество _сдвигов может быть либо ХММ-регистром (128-разрядной ячейкой памяти), либо непосредственным 8-разрядным операндом. Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).

PSRAW/PSRAD приемник, количество_сдвигов

PSRAW/PSRAD (SHIFt Packed data Right Arithmetic) — сдвиг вправо арифметический приемника на число бит количество_сдвигов.

Синтаксис и машинный код:

66 0F Е1 /r PSRAWxmmI, xmm2/m128

66 0F 71/4 i8 PSRAW xmm1, imm8

66 0F E2 /r PSRAD xmm1, xmm2/m128

66 0F 72 /4 i8 PSRAD xmm1, imm8

Действие: сдвиг упакованных элементов приемника (слов, двойных слов) вправо на число бит, указанных операндом количество_сдвигов. Освобождаемые справа биты заполняются значением знакового разряда элемента данных. Если значение, указанное операндом количество_сдвигов, больше чем 15 (для слов) или 31 (для двойных слов), то каждый элемент данных приемника заполняется начальным значением знакового разряда элемента. Операнд количество _сдвигов может быть либо ХММ-регистром (128-разрядной ячейкой памяти), либо непосредственным 8-разрядным операндом.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).

PSRLDQ приемник, количество_сдвигов

PSRLDQ (Shift Double Quadword Right Logical) — сдвиг вправо приемника на число байт количество_сдвигов.

Синтаксис: PSRLDQ xmm1, imm8

Машинный код: 66 0F 73 /З i8

Действие: сдвиг вправо приемника на число байт, указанных непосредственным операндом количество_сдвигов. Освобождаемые справа младшие байты обнуляются. Если значение, указанное операндом количество_сдвигов, больше чем 15, операнд приемник обнуляется.

Флаги: не изменяются.

Исключения: #UD: 10, 12, 15; #NM: 3; RM: исключения защищенного режима; VM: исключения защищенного режима.

PSRLW/PSRLD/PSRLQ приемник, количество_сдвигов

PSRLW/PSRLD/PSRLQ (Shift Packed Data Right Logical) — сдвиг вправо логический приемника на число бит количество _сдвигов.

Синтаксис и машинный код:

66 0F D1 /r PSRLW rxmm1, rxmm2/m128

66 0F 71 /2 i8 PSRLW rxmm1, imm8

66 0FD2/r PSRLD rxmm1, rxmm2/m128

66 0F 72 /2 i8 PSRLD rxmm1, imm8

66 0F D3/r PSRLQ rxmm1, rxmm2/m128

66 0F 73/2 i8 PSRLQ rxmm1, imm8

Действие: сдвиг упакованных элементов приемника (слов, двойных слов, учетверенных слов) вправо на число бит, указанных операндом количество _сдвшов. Освобождаемые справа биты замещаются нулевыми. Если значение, указанное операндом количество_сдвиюв, больше чем 15 (для слов), 31 (для двойных слов) или 63 (для учетверенных слов), то значение операнда приемник устанавливается равным 0. Операнд количество_сдвшов может быть либо ХММ-регистром (128-разрядной ячейкой памяти), либо непосредственным 8-разрядным операндом. Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19, 22; VM: исключения реального режима; #PF(lault-code).

PSUBB/PSUBW/PSUBD приемник, источник

PSUBB (Packed Subtraction Bytes) — вычитание упакованных байт. PSUBW (Packed Subtraction Words) — вычитание упакованных слов. PSUBD (Packed Subtraction Double words) — вычитание упакованных двойных слов.

Синтаксис и машинный код:

66 0F F8 /r PSUBB rxmm1, rxmm2/m128

66 0F F9 /r PSUBW rxmm1, rxmm2/m128

66 0F FA /r PSUBD rxmm1, rxmm2/m128

Действие: команда вычитает из элементов источника элементы приемника размером байт/слова/двойное слово в зависимости от кода операции. При переполнении результат формируется в соответствии с принципом циклического переполнения. Результат помещается в операнд приемник.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(iau!t-code); RM: #GP: 13,16; ^NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).

PSUBQ приемник, источник

PSUBQ (SUBtract Packed Qyadword integers description) — вычитание учетверенных слов.

Синтаксис и машинный код:

0F FB /r PSUBQ rmmx1, rmmx2/m64

66 0F FB /r PSUBQ rxmm1, rxmm2/m128

Действие: вычесть 64-битные целые значения в источнике и приемнике. Исходя из типа источника, возможны две схемы умножения:

• источник — ММХ-регистр или ячейка памяти m64: приемник[63-0] ßприемник[63-0] — источник[63-0], приемник — ММХ-регистр;

• источник — ХММ-регистр или ячейка памяти: приемник[63-0]ßприемник[63-0] — источник[63-0}; приемник[127-64]ßприемник[127-6А] — нсточник[127-64].

В результате выполнения команды PSUBQ регистр EFLAGS не отражает факта возникновения ситуации переполнения или переноса. Когда результат умножения слишком большой, чтобы быть представленным в 64-битном элементе приемника, то он "заворачивается" (перенос игнорируется). Для обнаружения подобных ситуаций программное обеспечение должно использовать другие методы.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).

PSUBSB/PSUBSW приемник, источник

PSUBSB (Packed Subtraction with signed Saturation Bytes) — вычитание упакованных байт со знаковым насыщением. PSUBSW (Packed Subtraction with signed Saturation Words) — вычитание упакованных слов со знаковым насыщением.

Синтаксис и машинный код:

66 0F E8 /r PSUBSB rxmm1, rxmm2/m128

66 0F E9 /r PSUBSW rxmm1, rxmm2/m128

Действие: вычесть элементы источника и приемника размером байт/слово в зависимости от кода операции. Вычитание элементов производится с учетом их знака. При возникновении переполнения результат формируется в соответствии с принципом знакового насыщения:

• PSUBSB — 07fh для положительных чисел и 080h для отрицательных;

• PSUBSW — 07fffh для положительных чисел и 08000h для отрицательных.

Результат помещается в операнд приемник. Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).

PSUBUSB/PSUBUSW приемник, источник

PSUBUSB (Packed Subtraction with Unsigned Saturation Bytes) — вычитание упакованных байт с беззнаковым насыщением. PSUBUSW (Packed Subtraction with Unsigned Saturation Words) — вычитание упакованных слов с беззнаковым насыщением.

Синтаксис и машинный код:

66 0F D8 /r PSUBUSB xmm1, xmm2/m128

66 0F D9 /r PSUBUSW xmm1, xmm2/m128

Действие: вычесть без учета знака элементы операндов источника и приемника размером байт/слово в зависимости от кода операции. При возникновении переполнения результат формируется в соответствии с принципом беззнакового насыщения:

• PSUBUSB — 00h для результатов вычитания меньших нуля;

• PSUBUSW – 0000h для результатов вычитания меньших нуля.

Результат помещается в операнд приемник.

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).

PUNPCKHBW/PUNPCKHWD/PUNPCKHDQ/ PUNPCKHQDQ приемник, источник

PUNPCKHBW/PUNPCKHWD/PUNPCKHDQ/PUNPCKHQDQ (UNPaCK High Data) — распаковка старших упакованных байт (слов, двойных слов, учетверенных слов) в слова (двойные слова, учетверенные слова, двойное учетверенное слово).

Синтаксис и машинный код:

66 0F 68 /r PUNPCKHBW rxmm1, rxmm2/m128

66 0F 69 /r PUNPCKHWD rxmm1, rxmm2/m128

66 0F 6A /r PUNPCKHDQ rxmm1, rxmm2/m128

66 0F 6D /r PUNPCKHQDQ rxmm1, rxmm2/m128

Действие: команды PUNPCKHBW, PUNPCKHWD, PUNPCKHDQ и PUNPCKHQDQ производят размещение с чередованием элементов из операндов источник и приемник согласно следующей схеме:

PUNPCKHBW:

приемник[7–0]ßприемник[71–64]; приемник[71–64]ßприемник[103–96];

приемник[15–8]ßисточник[71–64]; приемник[79–72]ßисточник[103–96];

приемник[23–16]ßприемник[79–72]; приемник[87–80]ßприемник[111–104];

приемник[31–24]ßисточник[79–72]; приемник[95–88]ß источник[111–104];

приемник[39–32]ßприемник[87–80]; приемник[103–96]ßприемник[119–112];

приемник[47–40]ßисточник[87–80]; приемник[111–104]ßисточник[119–112];

приемник[55–48]ßприемник[95–88], приемник[119–112]ßприемник[127–120];

приемник[63–56]ßисточник[95–88]; приемник[127–120]ßисточник[127–120];

PUNPCKHWD:

приемник[15–0]ßприемник[79–64]; приемник[79–64]ßприемник[111–96];

приемник[31–16]ßисточник[79–64]; приемник[95–80]ßисточник[111–96];

приемник[47–32]ßприемник[95–80]; приемник[111–96]ßпривмник[127–112];

приемник[63–А8]ßисточник[95–80]; приемник[127–112]ßисточник[127–112];

PUNPCKHDQ:

приемник[31–0]ßприемник[95–64]; приемник[95–64]ßприемник[127–96];

приемник[63–32]ßисточник[95–64]; приемник[127–96]ßисточник[127–96];

PUNPCKHQDQ:

приемник[63–0]ßприемник[127–64]; приемник[127–64]ßисоточник[127–64];

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2,42; #MF; #NM: 3; #PF(fault-code); #SS(0): 1; #UD: 10; #AC(0)_cpl3; RM: #GP: 13, 16; #MF; #NM: 3; #UD: 17; VM: исключения реального режима; #PF(fault-code).

PUNPCKLBW/PUNPCKLWD/PUNPCKLDQ/ PUNPCKLQDQ приемник, источник

PUNPCKLBW/PUNPCKLWD/PUNPCKLDQ/PUNPCKLQDQ (UNPaCK Low Data) — распаковка младших упакованных байт (слов, двойных слов, учетверенных слов) в слова (двойные слова, учетверенные слова, двойное учетверенное слово).

Синтаксис и машинный код:

66 0F 60 /r PUNPCKLBW rxmm1, rxmm2/m128

66 0F 61 /r PUNPCKLWD rxmm1, rxmm2/m128

66 0F 62 /r PUNPCKLDQ rxmm1, rxmm2/m128

66 0F 6C /r PUNPCKLQDQ rxmm1, rxmm2/m128

Действие: команды PUNPCKLBW, PUNPCKLWD, PUNPCKLDQ и PUNPCKLQDQ производят размещение с чередованием элементов из операндов источник и приемник согласно следующей схеме:

PUNPCKLBW:

приемник[7–0]ßприемник[7–0]; приемник[71–64]ßприемник[39–32];

приемник[15–8]ßисточник[7–0]; приемник[79–72]ßисточник[39–32];

приемник[23–16]ßприемник[15–8]; приемник[87–80]ßприемник[47–40];

приемник[31–24]ßисточник[15–8]; приемник[95–88]ß источник[47–40];

приемник[39–32]ßприемник[23–16]; приемник[103–96]ßприемник[55–48];

приемник[47–40]ßисточник[23–16]; приемник[111–104]ßисточник[55–48];

приемник[55–48]ßприемник[31–24], приемник[119–112]ßприемник[63–56];

приемник[63–56]ßисточник[31–24]; приемник[127–120]ßисточник[63–56];

PUNPCKLWD:

приемник[15–0]ßприемник[15–0]; приемник[79–64]ßприемник[47–32];

приемник[31–16]ßисточник[15–0]; приемник[95–80]ßисточник[47–32];

приемник[47–32]ßприемник[31–16]; приемник[111–96]ßпривмник[63–48];

приемник[63–А8]ßисточник[31–16]; приемник[127–112]ßисточник[63–48];

PUNPCKLDQ:

приемник[31–0]ßприемник[31–0]; приемник[95–64]ßприемник[63–32];

приемник[63–32]ßисточник[31–0]; приемник[127–96]ßисточник[63–32];

PUNPCKLQDQ:

приемник[63–0]ßприемник[63–0]; приемник[127–64]ßисоточник[63–0];

Флаги: не изменяются.

Исключения: РМ: #GP(0): 2,42; #MF; #NM: 3; #PF(fault-code); #SS(0): 1; #UD: 10;

#AC(0)_cpl3; RM: #GP: 13, 16; #MF; #NM: 3; #UD: 17; VM: исключения реального режима; #PF(fault-cocle); #AC(0)_u.

PXOR приемник, источник

PXOR (Packed logical Exclusive OR) — упакованное логическое исключающее ИЛИ.

Синтаксис: PXOR xmm1, xmm2/m128

Машинный код: 66 0F EF /r

Действие: команда производит побитовую операцию логическое исключающее ИЛИ над всеми битами операндов источник и приемник. Результат помещается в операнд приемник. Флаги: не изменяются.

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).

SHUFPD приемник, источник, маска

SHUFPD (Shuffle Packed Double-Precision Floating-Point Values Description) — перестановка упакованных значений с плавающей точкой двойной точности.

Синтаксис: SHUFPD xmm1, xmm2/m128, imm8

Машинный код: 66 0F С6 /r i8

Действие: переместить упакованные значения с плавающей точкой двойной точности из приемника и источника в приемник в соответствии со значением непосредственного операнда маска. Биты маски определяют номера упакованных значений с плавающей точкой двойной точности в источнике или приемнике, которые будут перемещены в приемник следующим образом:

• маска.0 = 0: приемник[63–0] ß приемник[63–0];

• маска.0 = 1: приемник[63–0] ß приемник[127–64];

• маска.1 = 0: приемник[127–64] ß источник[63–0];

• маска.1 = 1: приемник[127–64] ß источник[127–64].

Для перестановки в пределах одного регистра можно использовать один и тот же регистр ХММ в качестве источника и приемника.

Исключения: РМ: #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).

SQRTPD приемник, источник

SQRTPD (compute SQuare RooTs of Packed Double-precision floating-point values) — вычисление квадратного корня упакованных значений с плавающей точкой двойной точности.

Синтаксис: SQRTPD rxmm1, rxmm2/m128

Машинный код: 66 0F 51 /r

Действие: вычислить значения квадратных корней упакованных значений с плавающей точкой двойной точности источника по следующей схеме: приемник[63-0]ß SQRT(источник[63-0]); приемник[127-64]ßSQRT(источник[127-64]).

Исключения: 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).

SQRTSD приемник, источник

SQRTSD (compute SQuare RooT of Scalar Double-precision floating-point value) — вычисление квадратного корня скалярного упакованного значения с плавающей точкой двойной точности.

Синтаксис: SQRTSD rxmm1, rxmm2/m64

Машинный код: F2 0F 51 /r

Действие: вычислить значение квадратного корня младшего упакованного значения с плавающей точкой двойной точности источника по схеме: приемник[63-0] ßSQRT(источник[63-0]); приемник[127-64] — не изменяется.

Исключения: SIMD (NE): #I, #Р, #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; #XM; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

SUBPD приемник, источник

SUBPD (SUBtract Packed Double-precision floating-point values) — вычитание упакованных значений с плавающей точкой двойной точности.

Синтаксис: SUBPD rxmm1, rxmm2/m128

Машинный код: 66 0F 5C /r

Действие: вычесть пары упакованных значений с плавающей точкой двойной точности источника и приемника по схеме: приемник[63-0]ßприемник[63-0] — источник[63-0]; приемник[127-64]ßприемник[127-64] — источник[127-6А].

Исключения: SIMD (NE): #O, #U, #I, #Р, #D; PM: #GP(0): 37,42; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,11,12,15; #XM; RM: #GP: 13,16; #NM: 3; #UD: 17,18, 19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

SUBSD приемник, источник

SUBSD (SUBtract Scalar Double-precision floating-point values) — вычитание скалярных упакованных значений с плавающей точкой двойной точности.

Синтаксис: SUBSD rxmm1, rxmm2/m64

Машинный код: F2 0F 5C /r

Действие: вычесть младшие упакованные значения с плавающей точкой двойной точности источника и приемника по схеме: приемник[63-0]ßприемник[63-0] — источник[63-0]; приемник[127-63] — не изменяется.

Исключения: SIMD (NE): #O, #U,. #I, #Р, #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.

UCOMISD приемник, источник, условие

UCOMISD (Unordered COMpare Scalar Double-precision floating-point values and set EFLAGS) — сравнение неупорядоченных скалярных значений с плавающей точкой двойной точности и установка регистра EFLAGS.

Синтаксис: UCOMISD xmm1, xmm2/m64

Машинный код: 66 0F 2Е /r

Действие: сравнить неупорядоченные скалярные значения с плавающей точкой двойной точности в разрядах [63-0] приемника и источника. По результату сравнения установить флаги ZF, PF и CF в регистре EFLAGS (см. описание команды COMISD). Отличие команды COMISD от команды UCOMISD состоит в генерации исключения недействительной операции с плавающей точкой (#I): COMISD генерирует его, когда приемник и(или) источник — QNAN или SNAN; команда UCOMISD генерирует #I только в случае, если один из исходных операндов — SNAN. В случае генерации немаскированного исключения с плавающей точкой регистр EFLAGS не модифицируется.

Исключения: SIMD (NE): #I (если операнд — SNaN), #D; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,11,12,15; #XM; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #ХМ; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

UNPCKHPD приемник, источник

UNPCKHPD (UNPaCK and interleave High Packed Double-precision floating-point values) — разделение и чередование старших упакованных значений с плавающей точкой двойной точности.

Синтаксис: UNPCKHPD xmm1, xmm2/m128

Машинный код: 66 0F 15 /r

Действие: разделить старшие упакованные значения с плавающей точкой двойной точности в источнике и приемнике и поместить их с чередованием в приемник по схеме: приемник[63-0] ß приемник[127-64]; приемник[127-64] ß источник[127-64].

Исключения: PM: #GP(0): 37, 42; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10, 12,15; RM: #GP: 13,16; #NM: 3; #UD: 17-19,22; #XM; VM: исключения реального режима; #PF(fault-code).

UNPCKLPD приемник, источник

UNPCKLPD (UNPaCK and interleave Low Packed Double-precision floating-point values) — разделение и чередование младших упакованных значений с плавающей точкой двойной точности.

Синтаксис: UNPCKLPD xmm1, xmm2/m128

Машинный код: 66 0F 14/r

Действие: разделить младшие упакованные значения с плавающей точкой двойной точности в источнике и приемнике и поместить их с чередованием в приемник по схеме: приемник[63-0] ß приемник[63-0]; приемник[127-64] ß источник[63-0].

Исключения: 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).

XORPD приемник, источник

XORPD (bitwise logical XOR for Double-precision floating-point values) — поразрядное логическое исключающее ИЛИ над упакованными значениями с плавающей точкой двойной точности.

Синтаксис: XORPD xmm1, xmm2/m128

Машинный код: 66 0F 57 /r

Действие: выполнить операцию поразрядного логического исключающего ИЛИ над парами упакованных значений с плавающей точкой двойной точности в приемнике и источнике по схеме: приемник[127-0] ß приемник[127-0]) побитное__ХОR источник[127-0].

Исключения: РМ: #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).


Литература

1. Гук М., Юров В. Процессоры Pentium 4, Athlon и Duron. — СПб.: Питер, 2001.— 512 с.: ил.

2. Зубков С.В., Assembler для DOS, Windows и Unix.— М.: ДМК, 1999.— 640 с., ил.

3. Ровдо А.А., Микропроцкссоры от 8086 до Pentium III Xeon и AMD-K6-3.— М.: ДМК, 2000.— 592 с.: ил.


Информация о работе «Форматы данных и команды их обработки процессоров Pentium III, Pentium IV»
Раздел: Информатика, программирование
Количество знаков с пробелами: 181295
Количество таблиц: 4
Количество изображений: 0

Похожие работы

Скачать
52885
2
7

... Это почти все что касается самого общего рассказа о процессорах - почти любая операция может быть выполнена последовательностью простых инструкций, подобных описанным. 2.2. Алгоритм работы процессора Весь алгоритм работы процессора можно описать в трех строчках НЦ | чтение команды из памяти по адресу, записанному в СК | увеличение СК на длину прочитанной команды | ...

Скачать
21871
0
0

... руки журналистов назы­вают «королем» системного блока, единовластно повелевающим всеми его ресурсами. Но уследить абсолютно за всем, что происходит в его «королевстве», даже шустрый процессор не в состоянии — королевская занятость разбрасываться не позволяет. И тогда на помощь «королю» приходят «наместники» — специализированные микропроцессоры-чи­пы по обработке, например, обычной и трехмерной ...

Скачать
20398
0
18

... потокового доступа к памяти. Однако эти изменения не дают никаких особых преимуществ в производительности, а носят скорее косметический характер. Мы же озаботимся вопросом практического функционирования процессора Intel Pentium III. Во-первых, необходимо иметь в виду, что для запуска системы на новом процессоре новая системная плата не требуется. Нужна всего-навсего обновленная версия BIOS, ...

Скачать
177455
0
22

... : -производитель чипсет, если возможно – модель материнской платы; -тактовые частоты процессора, памяти, системных шин; -названия, параметры работы всех системных и периферийных устройств; -расширенная информация о процессоре, памяти, жестких дисках, 3D-ускорителе; -разнообразные параметры программной среды: ОС, драйверы, процессы, системные файлы и т.д.; -информация о поддержке видеокартой ...

0 комментариев


Наверх