6. Команды блока XMM (SSE и SSE2)
Порядок описания команд в этом разделе следующий:
• в заголовок вынесена схема команды, поясняющая общий набор и назначение операндов;
• в следующей строке дается название команды, расшифровка ее мнемоники и назначение;
• далее следует синтаксис команды (сложный синтаксис приводится в виде диаграмм), при описании которого используются следующие обозначения:
• r8, r16, r32 — операнд в одном из регистров размером байт, слово или двойное слово;
• m8, m16, m32, m48, m64 — операнд в памяти размером байт, слово, двойное слово или 48 бит;
• i8, i16, i32 — непосредственный операнд размером байт, слово или двойное слово;
• машинный код для всех сочетаний операндов описываемой команды (при сложном синтаксисе машинный код включается в синтаксис);
• состояние флагов после выполнения команды;
• описание действия команды;
• описание флагов после выполнения команды, при этом приводятся сведения только о флагах, изменяемых командой, и используются следующие обозначения:
• 1 — флаг устанавливается (равен 1);
• 0 — флаг сбрасывается (равен 0);
• r — значение флага зависит от результата выполнения команды;
• ? — после выполнения команды флаг не определен;
• список исключений.
На многих диаграммах в целях компактности возможные сочетания операндов показаны в виде следующей конструкции:
Конструируя команду на основе подобной синтаксической диаграммы, нужно помнить о соответствии типов. Допустимы только следующие сочетания: "r8, m8", "r16, m16", "r32, m32", а сочетание, например, "r8, m16" недопустимо. Однако, есть единичные случаи, когда подобные сочетания возможны; тогда они оговариваются специальным образом.
Описание машинного кода приводится в двух вариантах.
• В двоичном виде. Это описание применяется для демонстрации особенностей внутренней структуры машинной команды. Байты машинного представления машинной команды отделяются двоеточием.
• В шеснадцатеричном виде. Каждый байт машинного представления команды представлен двумя шестнадцатеричными цифрами. Часто за одним (двумя и более) первым байтом следует обозначение: /цифра. Это означает, что поле reg в байте mod r/m используется как часть кода операции и цифра представляет содержимое этого поля.
Вместо цифры может стоять символ "r" — /r. Как уже не раз отмечалось, большинство команд процессора — двухоперандные. Один операнд располагается в регистре, местоположение другого операнда определяет байт ModR/M — это может быть либо регистр, либо ячейка памяти. Более того, если операнд — ячейка памяти, то содержимое байта ModR/M определяет номенклатуру компонентов машинного кода команды, которые должны использоваться для вычисления эффективного адреса.
При описании команд могут быть опущены некоторые из перечисленных пунктов. Например, отсутствие пункта "синтаксис" говорит о том, что он совпадает со схемой команды. Отсутствие пункта "исключения" означает, что при выполнении данной команды исключения не возникают. То же касается описания флагов.
Некоторые регистры программной модели процессора имеют внутреннюю структуру. Указание того, о каком поле такого регистра идет речь, показано следующим образом: имя_регистра.имя_поля.
6.1. Команды блока XMM (SSE – Pentium 3)
ADDPS приемник, источник
ADDPS (ADDition Packed Single-precision float-point) — сложение упакованных значений в формате ХММ.
Синтаксис: ADDPS rxmm1, rxmm2/m128
Машинный код: 00001111:01011000:mod rxmm1 r/m
Действие: алгоритм работы команды показан на рисунке ниже.
Исключения: NE: #O, #U, #I, #Р, #D; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,11,12,13; #XM; RM: #GP: 13; #NM: 3; #UD: 17,18; #XM; VM: исключения реального режима; #PF(fault-code).
ADDSS приемник, источник
ADDSS (ADD Scalar Single-precision float-point) — скалярное сложение значений в формате ХММ.
Синтаксис: ADDSS rxmm1, rxmm2/m128
Машинный код: 11110011:00001111:01011000:mod rxmm1 r/m
Действие: алгоритм работы команды показан на рисунке ниже.
Исключения: NE: #O, #U,. #I, #P, #D; PM: #АС: 4; #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).
ANDNPS приемник, источник
ANDNPS (bit-wise logical AND Not for Packed Single-precision float-point) — поразрядное логическое И-НЕ над упакованными значениями в формате ХММ.
Синтаксис: ANDNPS rxmm1, rxmm2/m128
Машинный код: 00001111:01010101:mod rxmm1 r/m
Действие: инвертировать биты операнда приемник, над каждой парой битов операндов приемник (после инвертирования) и источник выполнить операцию логического И.
Исключения: PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12,13; RM: #GP: 13; #NM: 3; #UD: 7; VM: исключения реального режима; #PF(fault-code); #UD: 16, 17.
ANDPS приемник, источник
ANDPS (bit-wise logical AND for Packed Single-precision float-point) — поразрядное логическое И над каждой парой бит операндов источник и приемник.
Синтаксис: ANDPS rxmm1, rxmm2/m128
Машинный код: 00001111:01010100: mod rxmm 1 r/m
Исключения: 1; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10,12, 13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима; #PF(fault-code).
CMPPS приемник, источник, условие
CMPPS (CoMPare Packed Single-precision float-point) — сравнение упакованных значений в формате ХММ
Синтаксис: CMPPS rxmm1, rxmm2/m128, i8
Машинный код: 00001111:11000010: mod rxmm1 r/m: i8
Действие: условие, в соответствии с которым производится сравнение каждой пары элементов операндов приемник и источник, задается явно в виде непосредственного операнда (см. ниже). В результате сравнения в приемнике формируются единичные (если условие выполнено) или нулевые элементы (если условие не выполнено).
Усло-вие | Описание условия | Отношение | Эмуляция | Код маски i8 | Результат, если операнд NaN | Исключение #I, если операнд qNAN/sNAN | |
Eq | Equal (равно) | xmm1== xmm2 | 000b | False | Нет | ||
Lt | less-than (меньше чем) | xmm1<< xmm2 | 001 b | False | Да | ||
Le | less-than - or-equal (меньше чем или равно) | xmm1<<= xmm2 | 010b | False | Да | ||
greater than (больше чем) | xmm1>> xmm2 | Перестанов-ка с сохранением, lt | False | Да | |||
greater- than-or- equal (больше чем или равно) | xmm1>>= xmm2 | Перестанов-ка с сохране- нием, le | False | Да | |||
Unord | Unordered (одно из чисел QNAN) | xmm1 ? xmm2 | 011b | True | Нет | ||
Neq | not-equal (не равно) | !(xmm1== xmm2) | 100b | True | Нет | ||
Nit | not-less- than (не меньше чем) | !(xmm1 << xmm2) | 101b | True | Да | ||
NIe | not-less- than-or- equal (не меньше чем или равно) | !(xmm1<<= xmm2) | 110b | True | Да | ||
not-greater- than(не больше чем) | !(xmm1>> xmm2) | Перестанов-ка с сохранением, nlt | True | Да | |||
not-greater-than-or- equal (не больше чем или равно) | !(xmm1>>= xmm2) | Перестанов-ка с сохранением, nle | True | Да | |||
Ord | Ordered (числа неQNAN) | !(xmm1 ?xmm2) | 111b | False | Нет | ||
Исключения: 1; NE: #I, #D; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #VD: 17-20; #XM; VM: исключения реального режима; #PF(fault-code).
CMPSS приемник, источник, условие
CMPSS (CoMPare Scalar Single-precision float-point) — скалярное сравнение значений в формате ХММ.
Синтаксис: CMPSS rxmm1, rxmm2/m32, i8
Машинный код: 11110011:00001111:11000010:mod rxmm1 r/m: i8
Действие: для пары значений операндов приемник и источник выполняется сравнение, в результате которого формируются единичные (если условие выполнено) или нулевые элементы (если условие не выполнено). Значение источника может быть расположено в 32-битной ячейке памяти или в младшем двойном слове регистра ХММ. Значение приемника расположено в младшем двойном слове другого регистра ХММ.
Возможные значения условий приведены в описании команды CMPPS.
Исключения: NE: #I, #D; PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #ХМ; VM: исключения реального режима; #АС(0); #PF(fault-code).
COMISS приемник, источник
COMISS (COMpare ordered Scalar Single-precision float-point COMpare and Set EFLAGS) — скалярное упорядоченное сравнение значений в формате ХММ с установкой EFLAGS.
Синтаксис: COMISS rxmm1, rxmm2/m32
Машинный код: 00001111:00101111 :mod rxmm1 r/m
Действие: команда сравнивает пару значений операндов приемник и источник, в результате чего устанавливаются флаги в регистре EFLAGS, как показано ниже.
Значение источника может быть расположено в 32-битной ячейке памяти или младшем двойном слове регистра ХММ. Значение приемника расположено в младшем двойном слове другого регистра ХММ.
Соотношение операндов | Значение флагов |
Приемник>источник | 0F=SF=AF=ZF=PF=CF=0 |
Приемник<источник | 0F=SF=AF=ZF=PF=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).
... Это почти все что касается самого общего рассказа о процессорах - почти любая операция может быть выполнена последовательностью простых инструкций, подобных описанным. 2.2. Алгоритм работы процессора Весь алгоритм работы процессора можно описать в трех строчках НЦ | чтение команды из памяти по адресу, записанному в СК | увеличение СК на длину прочитанной команды | ...
... руки журналистов называют «королем» системного блока, единовластно повелевающим всеми его ресурсами. Но уследить абсолютно за всем, что происходит в его «королевстве», даже шустрый процессор не в состоянии — королевская занятость разбрасываться не позволяет. И тогда на помощь «королю» приходят «наместники» — специализированные микропроцессоры-чипы по обработке, например, обычной и трехмерной ...
... потокового доступа к памяти. Однако эти изменения не дают никаких особых преимуществ в производительности, а носят скорее косметический характер. Мы же озаботимся вопросом практического функционирования процессора Intel Pentium III. Во-первых, необходимо иметь в виду, что для запуска системы на новом процессоре новая системная плата не требуется. Нужна всего-навсего обновленная версия BIOS, ...
... : -производитель чипсет, если возможно – модель материнской платы; -тактовые частоты процессора, памяти, системных шин; -названия, параметры работы всех системных и периферийных устройств; -расширенная информация о процессоре, памяти, жестких дисках, 3D-ускорителе; -разнообразные параметры программной среды: ОС, драйверы, процессы, системные файлы и т.д.; -информация о поддержке видеокартой ...
0 комментариев