Форматы данных и команды их обработки процессоров Pentium III, Pentium IV
режима; VM: исключения защищенного режима.
PMULHUW приемник, источник
PMULHUW (MULtiply Packed Unsigned integers and store High result) —
умножение упакованных беззнаковых слов с возвратом старших слов результата.
Синтаксис: PMULHUW rxmm1, rxmm2/m128
Машинный код: 66 0F E4 /r
Действие: команда производит умножение упакованных слов источника и
приемника без учета знака и формирует элементы результата в соответствии с
приведенной ниже схемой. Как видно из нее, в результате умножения слов
операндов источник и приемник получаются промежуточные результаты размером
32 бита.
Далее старшее слово (16 бит) из каждого промежуточного результата
умножения исходных элементов помещается в 16-битный элемент окончательного
результата. Результат помещается в операнд приемник.
Флаги: не изменяются.
[pic]
Исключения: РМ: #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-битный элемент
результата (операнд приемник). Флаги: не изменяются.
[pic]
Исключения: РМ: #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] [pic] источник[31-0];
• источник — ХММ-регистр или ячейка памяти: приемник[63-0}(приемник[31-
0] [pic]источник[31-0]; приемник[127-64](приемник[95-64][pic]источник[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
Действие: для каждой пары байт двух упакованных учетверенных слов
операндов источник и приемник вычислить модуль разности, после чего сложить
полученные модули. Результат записать в младшее слово каждого из двух
упакованных учетверенных слов приемника, старшие три слова в упакованных
учетверенных словах приемника обнулить. Принцип работы программы поясняет
схема ниже.
Флаги: не изменяются.
[pic]
Исключения: РМ: #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 поясняет следующая схема:
[pic]
Флаги: не изменяются.
Исключения: РМ: #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 поясняет
следующая схема.
[pic]
Флаги: не изменяются.
Исключения: РМ: #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 поясняет схема,
показанная далее.
[pic]
Флаги: не изменяются.
Исключения: РМ: #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 с.: ил.
Страницы: 1, 2, 3, 4, 5
|