PIII-PIV (Форматы данных и команды их обработки процессоров Pentium III, Pentium IV), страница 7
Описание файла
Документ из архива "Форматы данных и команды их обработки процессоров Pentium III, Pentium IV", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "PIII-PIV"
Текст 7 страницы из документа "PIII-PIV"
Возможные значения условий приведены в описании команды CMPPS.
Исключения: NE: #I, #D; PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #ХМ; VM: исключения реального режима; #АС(0); #PF(fault-code).
COMISS приемник, источник
COMISS (COMpare ordered Scalar Single-precision float-point COMpare and Set EFLAGS) — скалярное упорядоченное сравнение значений в формате ХММ с установкой EFLAGS.
Синтаксис: COMISS rxmm1, rxmm2/m32
Машинный код: 00001111:00101111 :mod rxmm1 r/m
Действие: команда сравнивает пару значений операндов приемник и источник, в результате чего устанавливаются флаги в регистре EFLAGS, как показано ниже.
Значение источника может быть расположено в 32-битной ячейке памяти или младшем двойном слове регистра ХММ. Значение приемника расположено в младшем двойном слове другого регистра ХММ.
Соотношение операндов | Значение флагов |
Приемник>источник | 0F=SF=AF=ZF=PF=CF=0 |
Приемник<источник | 0F=SF=AF=ZF=PF=0; CF=1 |
Приемник=источник | 0F=SF=AF=PF=CF=0; ZF=1 |
Приемник или источник=qNaN или sNaN | 0F=SF=AF=0; ZF=PF=CF=1 |
При возникновении незамаскированных исключений значение EFLAGS не изменяется. Исключения: NE: #I, #D; PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #ХМ; VM: исключения реального режима; #АС(0); #PF(fault-code).
CVTPI2PS приемник, источник
CVTPI2PS (Conversion Two Packed signed Int32 to Packed Single-precision float-point) — преобразование двух упакованных 32-битных целых в два упакованных вещественных значения.
Синтаксис: CVTP12PS rxmm1, rmmx2/m64
Машинный код: 00001111:00101010:mod rxmm1 r/m
Действие: алгоритм работы команды показан на рисунке ниже.
В случае, когда не удается выполнить точное преобразование, результат округляется в соответствии с полем MXCSR.RC.
Исключения: NE: #Р; РМ: #АС(0); #GP(0): 37; #MF; #NM: 3; #PF(fault-code);
#SS(0): 13; #UD: 10-13; #XM; RM: #AC; #GP: 13; #MF; #NM: 3; #UD: 17-20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).
CVTPS2PI приемник, источник
CVTPS2PI (ConVersion Two Packed Single-precision float-point to Packed signed Int32) — преобразование двух вещественных целых в два упакованных 32-битных целых.
Синтаксис: CVTPS2PI rmmx1, rmmx2/m128
Машинный код: 00001111:00101101 :mod rmmx1 r/m
Действие: алгоритм работы команды показан на рисунке ниже.
Если преобразованный результат больше, чем максимально возможное целочисленное 32-битное значение, то возвращается значение 80000000h. В случае, когда не удается выполнить точное преобразование, значение округляется в соответствии с полем MXCSR.RC.
Исключения: NE: #I, #Р; РМ: #АС(0); #GP(0): 37; #MF; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #MF; #NM: 3; #UD: 17-20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).
CVTSI2SS приемник, источник
CVTSI2SS (ConVerT Scalar signed Int32 to Scalar Single-precision float-point) -скалярное преобразование знакового 32-битного целого в вещественное значение.
Синтаксис: CVTS12SS rxmm, r32/m32
Машинный код: 11110011:00001111:00101010:mod rxmm r/m
Действие: алгоритм работы команды показан на рисунке ниже.
В случае когда не удается выполнить точное преобразование, значение округляется в соответствии с полем MXCSR.RC.
Исключения: NE: #Р; РМ: #АС(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #ХМ; VM: исключения реального режима; #АС(0); #PF(fault-code).
CVTSS2SI приемник, источник
CVTSS2SI (ConVerT Scalar Single-precision float-point to Scalar signed Int32) -скалярное преобразование вещественного целого в 32-битное знаковое целое.
Синтаксис: CVTSS2SI r32,rxmm/m128
Машинный код: 11110011:00001111:00101101 :mod r32 r/m
Действие: значение источника хранится в младшем двойном слове регистра ХММ или в 128-битной ячейке памяти. Приемник — один из 32-битных регистров.
Алгоритм работы команды показан на рисунке ниже.
Если преобразованный результат больше, чем максимально возможное целочисленное 32-битное значение, то возвращается значение 80000000h. В случае, когда не удается выполнить точное преобразование, значение округляется в соответствии с полем MXCSR.RC.
Исключения: NE: #I, #Р; РМ: #АС(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).
CVTTPS2PI приемник, источник
CVTTPS2PI (ConVerT Truncate two Packed Single-precision float-point to Packed signed Int32) — преобразование (путем отбрасывания дробной части) двух вещественных целых в два упакованных 32-битных целых значения.
Синтаксис: CVTTPS2PI rmmx,rxmm/m128
Машинный код: 00001111:00101100:mod rmmx r/m
Действие: алгоритм работы команды показан на рисунке ниже.
Если преобразованный результат больше, чем максимально возможное целочисленное 32-битное значение, то будет возвращено значение 80000000h.
Исключения: NE: ffl,#P; РМ: #АС(0); #GP(0): 37; #MF; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #MF; #NM: 3; #UD: 17-20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).
CVTTSS2SI приемник, источник
CVTTSS2SI (ConVerT Truncate Scalar Single-precision float-point to Scalar signed Int32) — скалярное преобразование (путем отбрасывания дробной части) вещественного целого в знаковое целое.
Синтаксис: CVTTSS2SI r32,rxmm/m128
Машинный код: 11110011:00001111:00101100:mod r32 r/m
Действие: значение источника хранится в младшем двойном слове регистра ХММ или в 128-битной ячейке памяти. Приемник — один из 32-битных регистров. Алгоритм работы команды показан на рисунке ниже.
Если преобразованный результат больше, чем максимально возможное целочисленное 32-битное значение, то будет возвращено значение 80000000h.
Исключения: NE: #I,#Р; РМ: #АС(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #ХМ; VM: исключения реального режима; #АС(0); #PF(fault-code).
DIVPS приемник, источник
DIVPS (DIVide Packed Single-precision float-point) — деление упакованных значений в формате ХММ согласно следующей схеме.
Синтаксис: DIVPS rxmm1,rxmm2/m128
Машинный код: 00001111:01011110:mod rxmm r/m
Исключения: 1; NE: #O, #U, #I, #Z, #P, #D; РМ: #GP(0): 2,37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #UD: 17-20; #XM; VM: исключения реального режима; #PF(fault-code).
DIVSS приемник, источник
DIVSS (DIVide Scalar Single-precision float-point) — скалярное деление значений в формате ХММ согласно следующей схеме.
Синтаксис: DIVSS rxmm1,rxmm2/m32
Машинный код: 11110011:00001111:01011110:mod rxmm1 r/m
Исключения: 1; NE: #O, #U, #I, #Z, #P, #D; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).
FXRSTOR источник
FXRSTOR (ReSTORe Fp and mmX state and streaming simd extension state) — восстановление без проверки наличия незамаскированных исключений с плавающей точкой состояния сопроцессора, целочисленного и потокового MMX-расширений из 512-байтной области памяти (см. рисунок ниже).
Синтаксис: FXRSTOR m512
Машинный код: 00001111:10101110:mod 001 m512
Исключения: 2; PM: #AC: 4; #GP(0): 38; #NM: 3; #SS(0): 13; #UD: 10; RM: #GP: 13; #NM: 3; #UD: 17; VM: исключения реального режима; #АС: 5; #PF(fault-code).
FXSAVE приемник
FXSAVE (SAVE Fp and mmX state and streaming simd extension state) — сохранение состояния сопроцессора, целочисленного и потокового MMX-расширений в 512-байтной области памяти (см. рисунок в описании команды FXRSTOR).
Синтаксис: FXSAVE m512
Машинный код:00001111:10101110:тос1000 m512
Исключения: 2; NE: #I, #Р; PM: #AC(0); #GP(0): 37; #NM: 3; #SS(0): 13; #UD: 10; RM: #GP: 13; #NM: 3; #UD: 17; VM: исключения реального режима; #АС(0); #PF(fault-code).
LDMXCSR источник
LDMXCSR (LoaD streaming simd extension control/status register MXCSR) — загрузка регистра состояния/управления mxcsr из 32-битной ячейки памяти.
Синтаксис: LDMXCSR m32
Машинный код: 00001111:10101110:mod 010 m32
Замечание: по умолчанию регистр MXCSR загружается значением 1f80h.
Исключения: 1; PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12,13; RM: #GP: 13; #NM: 3; #UD: 17,19,20; VM: исключения реального режима; #АС(0); #PF(fault-code).
MAXPS приемник, источник
MAXPS (return MAXimum Packed Single-precision float-point) – возврат максимального из упакованных значений в формате ХММ.
Синтаксис: MAXPS rxmm1, rxmm2/m128
Машинный код: 00001111:01011111 :mod rxmm1 r/m
Действие: команда извлекает максимальные значения в каждой из четырех пар
вещественных чисел в коротком формате. При этом происходит сравнение значений
соответствующих элементов источника и приемника, по результатам которого
выполняются действия:
• если элемент приемника или элемент источника является сигнализирующим не-числом — sNAN, то в элемент приемника помещается значение источника;
• иначе, если элемент источника больше элемента приемника, то в элемент приемника помещается элемент источника.
В остальных случаях значения источника и приемника не изменяются.
Исключения: 1,3; NE: #I, ftD; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; ftXM; RM: #GP: 13; #NM: 3; #UD: 17-20; UXM; VM: исключения реального режима; #PF(fault-code).
MAXSS приемник, источник
MAXSS (return MAXimum Scalar Single-precision float-point) — скалярный возврат максимального значения в формате ХММ.
Синтаксис: MAXSS rxmm1,rxmm2/m32
Машинный код: 11110011:00001111:01011111:mod rxmm1 r/m
Действие: команда извлекает максимальное из двух вещественных чисел в коротком формате. При этом происходит сравнение значений младшей пары элементов источника и приемника, по результатам которого выполняются действия, аналогичные рассмотренным в описании команды MAXPS. Старшие три элемента источника и приемника не изменяются. Исключения: 1, 3; NE: #I, #D; PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #VD: 17-20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).
MINPS приемник, источник
MINPS (return MINimum Packed Single-precision float-point) — возврат минимального упакованного значения в формате ХММ.
Синтаксис: MINPS rxmm1,rxmm2/m128
Машинный код: 00001111:01011101:mod rxmm1 r/m
Действие: команда извлекает минимальные значения в каждой из четырех пар вещественных чисел в коротком формате. При этом происходит сравнение значений соответствующих элементов источника и приемника, по результатам которого выполняются действия, аналогичные рассмотренным в описании команды MAXPS.
Исключения: 1; NE: #I, #D; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #XM; VM: исключения реального режима; #PF(fault-code).
MINSS приемник, источник
MINSS (return MINimum Scalar Single-precision float-point) — скалярный возврат минимального значения в формате ХММ.
Синтаксис: MINSS rxmm1,rxmm2/m32
Машинный код: 11110011:00001111:01011101:mod rxmm1 r/m
Действие: команда извлекает минимальное из двух вещественных чисел в коротком формате. При этом происходит сравнение значений младшей пары элементов источника и приемника, по результатам которого выполняются действия, аналогичные рассмотренным в описании команды MAXPS. Старшие три элемента источника и приемника не изменяются.
Исключения: NE: #I, #D; PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #ХМ; VM: исключения реального режима; #АС(0); #PF(fault-code).
MOVAPS приемник, источник
MOVAPS (MOVe Aligned four Packed Single-precision float-point) — перемещение выровненных 128 бит источника в соответствующие биты приемника.
Исключения: 1; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима;
#PF(fault-code).
MOVHLPS приемник, источник
MOVHLPS (MOVe High to Low Packed Single-precision float-point) — копирование содержимого старшей половины регистра ХММ (источника) в младшую половину другого регистра ХММ (приемника).
Синтаксис: MOVHLPS rxmm1, rxmm2
Машинный код: 00001111:00010010:11 rxmm1,rxmm2
Исключения: PM: #NM: 3; #UD: 10, 12, 13; RM: #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима.
MOVHPS приемник, источник
MOVHPS (MOVe High Packed Single-precision float-point) — перемещение верхних упакованных значений в формате ХММ из источника в приемник.
Действие:
• если источник — 64-битный операнд в памяти, то команда MOVHPS перемещает его содержимое в старшую половину приемника, представляющего собой регистр ХММ;
• если источник — регистр ХММ, то команда MOVHPS перемещает содержимое его старшей половины в приемник, который представляет собой 64-битный операнд в памяти.
Исключения: РМ: #АС(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD:10,12,13; RM: #GP: 13; #NM: 3; #UD: 17,19,20; VM: исключения реального режима; #AC(0); #PF(fault-code).
MOVLHPS приемник, источник
MOVLHPS (MOVe Low to High Packed Single-precision float-point) — перемещение нижних упакованных значений в формате ХММ в верхние.
Синтаксис: MOVLHPS rxmm1, rxmm2
Машинный код: 00001111:00010110:11 rxmm1,rxmm2
Действие: команда копирует содержимое младшей половины регистра ХММ (источника) в старшую половину другого регистра ХММ (приемника). После операции изменяется только содержимое старшей половины приемника.
Исключения: РМ: #NM: 3; #UD: 10, 12, 13; RM: #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима.
MOVLPS приемник, источник
MOVLPS (MOVe Unaligned Low Packed Single-precision float-point) — перемещение невыровненных нижних упакованных значений в формате ХММ.
Действие: команда копирует содержимое младшей половины регистра ХММ в 64-битную ячейку памяти или из нее:
• если источник — 64-битный операнд в памяти, то его содержимое перемещается в младшую половину приемника, представляющего собой регистр ХММ;
• если источник — регистр ХММ, то содержимое его младшей половины перемещается в приемник, который представляет собой 64-битный операнд в памяти.
Исключения: РМ: #АС(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD:10,12,13; RM: #GP: 13; #NM: 3; ttVD: 17,19,20; VM: исключения реального режима; #AC(0); ftPF(fault-code).
MOVMSKPS приемник, источник
MOVMSKPS (MOVe sign MaSK Packed Single-precision float-point to integer) -перемещение знаковой маски в целочисленный регистр.
Синтаксис: MOVMSKPS r32, rxmm
Машинный код: 00001111:01010000:11 r32 rxmm
Действие: команда формирует маску из знаковых разрядов четырех чисел с плавающей точкой в коротком формате, упакованных в регистр ХММ (источник). После операции содержимое всего 32-битного регистра (приемника) изменяется следующим образом: в его младшую тетраду заносится знаковая маска, остальные разряды регистра обнуляются.
Исключения: РМ: #MF; #NM: 3; #UD: 10,12,13; RM: #NM: 3; #UD: 17,19,20; VM:
исключения реального режима.
MOVNTPS приемник, источник
MOVNTPS (MOVe Non Temporal aligned four Packed Single float-point) — запись в память 128 бит из регистра ХММ, минуя кэш.
Синтаксис: MOVNTPS m128,rxmm
Машинный код: 00001111:00101011:mod rxmm r/m
Исключения: 1; РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12, 13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима; #PF(fault-code).
MOVSS приемник, источник
MOVSS (MOVe Scalar Single-precision float-point) — перемещение скалярных значений в формате ХММ.
Действие: команда копирует младшие 32 бита источника в младшие 32 бита приемника. Если используется операнд в памяти, то в команде указывается адрес, соответствующий адресу младшего байта данных в памяти. Если в качестве источника используется операнд в памяти, то эти 32 бита копируются в младшее двойное слово 128-битного приемника — регистра ХММ, остальные 96 бит этого регистра устанавливаются в 0.
Исключения: PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD:10,12,13; RM: #GP: 13; #NM: 3; #UD: 17,19,20; VM: исключения реального режима; #АС(0); #PF(fault-code).
MOVUPS приемник, источник
MOVUPS (MOVe Unaligned four PackedSingle-precision float-point) — перемещение невыровненных упакованных значений в формате ХММ.
Действие: переместить 128 бит источника в соответствующие биты приемника.
Исключения: PM: #АС(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10; RM: #GP: 13; #NM: 3; #UD: 17; VM: исключения реального режима; #АС(0)-#PF(fault-code).
MULPS приемник, источник
MULPS (MULtiply Packed Single-precision float-point) — умножение упакованных значений в формате ХММ.
Синтаксис: MULPS rxmmi, rxmm2/m128
Машинный код: 00001111:01011001:mod rxmm1 r/m
Действие: команда умножает четыре пары вещественных чисел в коротком формате. Схема работы команды MULPS показана на следующем рисунке.
Исключения: 1; NE: #O, #U, #I, #P, #D; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10, 11; #XM; RM: #GP: 13; #NM: 3; #UD: 17, 18; #XM; VM: исключения реального режима; #PF(fault-code).
MULSS приемник, источник
MULSS (MULtiply Scalar Single-precision float-point) — умножение скалярных значений в формате ХММ.
Синтаксис: MULSS rxmm1,rxmm2/m32
Машинный код: 11110011:00001111:01011001:mod rxmm1 r/m
Действие: команда умножает вещественные значения в младших парах операндов в формате ХММ. Операнды источник и приемник находятся в регистре ХММ, кроме того, операнд источник может находиться в 32-битной ячейке памяти. Схема работы команды MULSS показана на следующем рисунке.
Исключения: 1; NE: #O, #U, #I, #P, #D; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,11; #XM; RM: #GP: 13; #NM: 3; #UD: 17,18; #ХМ; VM: исключения реального режима; #АС(0); ftPF(fault-code).
ORPS приемник, источник
ORPS (bit-wise logical OR for Packed Single-precision float-point) — поразрядное логическое ИЛИ над каждой парой бит упакованных операндов источник и приемник в формате ХММ.
Синтаксис: ORPS rxmmi, rxmm2/m128
Машинный код: 00001111:01010110:mod rxmm1 r/m
Исключения: 1; РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10; RM: #GP: 13; #NM: 3; #UD: 17; VM: исключения реального режима; #PF(fault-code).
RCPPS приемник, источник
RCPPS (ReCiProcal Packed Single-precision float-point) — вычисление обратных упакованных значений в формате ХММ.
Синтаксис: RCPPS rxmm1, rxmm2/m128
Машинный код: 00001111:01010011:mod rxmm1 r/m
Действие: команда вычисляет обратные значения элементов источника по формуле 1/(элемент_источника). Максимальная ошибка вычисления: . Схема работы команды RCPPS показана на следующем рисунке.
Исключения: 1; РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10; RM: #GP: 13; #NM: 3; #UD: 17; VM: исключения реального режима; #PF(fault-code).
RCPSS приемник, источник
RCPSS (ReCiProcal Scalar Single-precision float-point) — скалярное вычисление обратного упакованного значения в формате ХММ.
Синтаксис: RCPSS rxmm1, rxmm2/m32
Машинный код: 11110011:00001111:01010011:mod rxmm1 r/m
Действие: команда вычисляет обратное значение младшего элемента операнда источник по формуле 1/(элемент_источника). Максимальная ошибка вычисления: .
Исключения: РМ: #АС: 5; #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10; RM: #GP: 13; #NM: 3; #UD: 17; VM: #AC: 5; исключения реального режима;
#PF(fault-code).
RSQRTPS приемник, источник
RSQRTPS (Reciprocal SQuare RooT Packed Single-precision float-point) — вычисление обратных значений квадратного корня упакованных значений в формате ХММ.
Синтаксис: RSQRTPS rxmm1, rxmm2/m128
Машинный код: 00001111:01010010:mod rxmm1 r/m
Действие: команда для каждого элемента элемент_источника операнда источник выполняет следующие два действия: вычислить квадратный корень элемент_ис-точника; вычислить обратную величину полученного значения корня по формуле: . Максимальная ошибка вычисления: .
Исключения: 1; РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12,13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима;
#PF(fault-code).
RSQRTSS приемник, источник
RSQRTSS (Reciprocal SQuare RooT Scalar Single-precision float-point) — скалярная аппроксимация обратных значений квадратного корня упакованных значений в формате ХММ.
Синтаксис: RSQRTSS rxmm1, rxmm2/m32
Машинный код: 11110011:00001111.01010010:mod rxmm r/m
Действие: команда для младшего элемента элемент_источника операнда источник выполняет следующие два действия: вычисляет корень квадратный элемент_источника; вычисляет обратную величину полученного значения корня по формуле: . Максимальная ошибка вычисления: . Старшие элементы операнда приемник не изменяются.
Исключения: РМ: #АС(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10; RM: #GP: 13; #NM: 3; #UD: 17; VM: исключения реального режима; #АС: 5;
#PF(fault-code).
SHUFPS приемник, источник, маска
SHUFPS (Shuffle Packed Single-precision float-point) — перераспределение упакованных значений в формате ХММ.
Синтаксис: SHUFPS rxmm1, rxmm2/m128,i8
Машинный код: 00001111:11000110:mod rxmm1 r/m: i8
Действие: команда перераспределяет любые два из четырех двойных слов приемника в два младших двойных слова того же приемника и любые два из четырех двойных слов источника в два старших двойных слова приемника. Если использовать один и тот же регистр ХММ в качестве источника и приемника, то можно выполнять любые перестановки в пределах одного регистра. Каждая пара бит маски определяет номер двойного слова источника или приемника, которое будет перемещено в приемник следующим образом:
• маска[1:0]
• 00 приемник[00...31] источник[00...31]
• 01 приемник[00...31] источник[32...63]
• 10 приемник[00...31] источник[64...95]
• 11 приемник[00...31] источник[96..127]
• маска[3:2]
• 00 приемник[32...63] источник[00...31]
• 01 приемник[32...63] источник[32...63]
• 10 приемник[32...63] источник[64...95]
• 11 приемник[32...63] источник[96...127]
• маска[5:4]
• 00 приемник[64...95] источник[00...31]
• 01 приемник[64...95] источник[32...63]
• 10 приемник[64...95] источник[64...95]
• 11 приемник[64...95] источник[96...127]
• маска[7:6]
• 00 приемник[96...127] источник[00...31]
• 01 приемник[96...127] источник[32...63]
• 10 приемник[96...127] источник[64...95]
• 11 приемник[96...127] источник[96...127]
Схематически работа команды SHUFPS показана на следующем рисунке.
Исключения: 1; РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12,13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима; #PF (fault-code).
SQRTPS приемник, источник
SQRTPS (SQuare RooT Packed Single-precision float-point) — корень квадратный упакованных значений в формате ХММ.
Синтаксис: SQRTPS rxmm1, rxmm2/m128
Машинный код: 00001111:01010001 :mod rxmm1 r/m
Действие: команда извлекает квадратный корень из четырех упакованных вещественных чисел в коротком формате.
Исключения: 1; NE: #I, #Р, #D; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #XM; VM: исключения реального режима; #PF(fault-code).
SQRTSS приемник, источник
SQRTSS (SQuare RooT Scalar Single-precision float-point) — скалярное извлечение квадратного корня.
Синтаксис: SQRTSS rxmm1, rxmm2/m32
Машинный код: 11110011:00001111:01010001:mod rxmm1 r/m
Действие: команда извлекает квадратный корень из младшего двойного слова операнда источник, который должен представлять собой упакованное вещественное число в формате ХММ.
Исключения: NE: #I, #P, #D; PM: #AC(0); #GP(Q): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).
STMXCSR приемник
STMXCSR (STore Streaming SIMD Extension Control/Status register MXCSR) -сохранение регистра управления/состояния MXCSR в 32-битной ячейке памяти.
Синтаксис: STMXCSR m32
Машинный код: 00001111:10101110:mod 011 m32
Исключения: PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12,13; RM: #GP: 13; #NM: 3; #UD: 17,19,20; VM: исключения реального режима; #AC(0); #PF(fault-code).
SUBPS приемник, источник
SUBPS (SUBtract Packed Single-precision float-point) — вычитание упакованных значений в формате ХММ.
Синтаксис: SUBPS rxmm1, rxmm2/m128
Машинный код: 00001111:01011100:mod rxmm1 r/m
Исключения: 1; NE: #O, #U, #I, #P, #D; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD:10-13; #XM; RM: #GP: 13; #NM: 3; ttVD: 17-20; #XM; VM:
исключения реального режима; #PF(fault-code).
SUBSS приемник, источник
SUBSS (SUBtract Scalar Single-precision float-point) — вычитание скалярных значений в формате ХММ.
Синтаксис: SUBSS rxmm1, rxmm2/m32
Машинный код: 11110011:00001111:01011100:mod rxmm r/m
Действие: команда вычитает значения младшей пары вещественных чисел в формате ХММ.
Исключения: NE: #O, #U, #I, #P, #D; PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).
UCOMISS приемник, источник
UCOMISS (Unordered Scalar Single-fp COMpare and set eflags) — неупорядоченное скалярное сравнение значений в формате ХММ с установкой флагов в EFLAGS.
Синтаксис: UCOMISS rxmm1, rxmm2/m32
Машинный код: 00001111:00101110:mod rxmm1 r/m
Действие: сравнение пары вещественных элементов в коротком формате, расположенных в младшем двойном слове операндов в формате ХММ. В результате выполнения команды формируются значения флагов ZF, PF и CF, а флаги 0F, SF и AF устанавливаются в 0 (см. ниже). В процессе работы команда распознает специальные значения qNaN и sNaN. При возникновении незамаскированных исключений расширения ХММ регистр EFLAGS не изменяется.
Соотношение операндов | Значение флагов |
Приемник>источник | 0F=SF=AF=ZF=PF=CF=0 |
Приемник<источник | 0F=SF=AF=ZF=PF=0; CF=1 |
Приемник=источник | 0F=SF=AF=PF=CF=0; ZF=1 |
Приемник или источник=qNaN или sNaN | 0F=SF=AF=0; ZF=PF=CF=1 |
Исключения: NE: #I, #D; PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).
UNPCKHPS приемник, источник
UNPCKHPS (Unpack High Packed Single-precision float-point data) — чередование верхних упакованных значений в формате ХММ.
Синтаксис: UNPCKHPS rxmm1, rxmm2/m128
Машинный код: 00001111:00010101:mod rxmm1 r/m
Действие: перемещение путем чередования двух старших двойных слова приемника и источника. Младшие двойные слова приемника и источника игнорируются. Схема выполнения команды UNPCKHPS показана на следующем рисунке.
Исключения: 1; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12,13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима;
#PF(fault-code).
UNPCKLPS приемник, источник
UNPCKLPS (Unpack Low Packed Single-precision float-point data) — чередование нижних упакованных значений в формате ХММ.
Синтаксис: UNPCKLPS rxmm1, rxmm2/m128
Машинный код: 00001111:00010100:mod rxmm1 r/m
Действие: перемещение путем чередования двух младших двойных слова приемника и источника. Старшие двойные слова приемника и источника игнорируются. Схема работы команды UNPCKLPS показана на следующем рисунке.
Исключения: 1; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12, 13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима;#PF(fault-code).
XORPS приемник, источник
XORPS (bit-wise logical XOR for Packed Single-precision float-point) — поразрядное логическое ИСКЛЮЧАЮЩЕЕ ИЛИ над упакованными значениями в формате ХММ.
Синтаксис: XORPS rxmm1, rxmm2/m128
Машинный код: 00001111:01010111 :mod rxmm1 r/m
Исключения: PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12,13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима;
#PF(fault-code).
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) — преобразование двух упакованных значений с плавающей точкой одинарной точности в два упакованных значения с плавающей точкой двойной точности.