• 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 поясняет следующая схема.
Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-codc); RM: #GP: 13,16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fanlt-code).
PSHUFLW приемник, источник, маска
PSHUFLW (SHUFfle Packed Low Words) — копирование слов из младшего учетверенного упакованного слова ХММ-онераида источник в младшее учетверенное упакованное слово ХММ-онеранда приемник.
Синтаксис: PSHUFLW rxmm1, rxmm2/m128, imm8
Машинный код: F2 0F 70 /r i8
Действие: на основе значения пар бит маски копировать слова из младшего учетверенного слова источника в младшее учетверенное слово приемника. Каждая пара бит маски определяет номер слова источника для перемещения в приемник следующим образом: • маска[1:0]:
• 00 приемник[00..15] ( источник[00..15];
• 01 приемник[00..15] ( источник[16..31];
• 10 приемник[00..15] ( источник[32..47];
• 11 приемник[00..15] ( источник[48..63]; • маска[3:2]:
• 00 приемник[16...31] ( источник[00..15];
• 01 приемник[16...31] ( источник[16...31];
• 10 приемник[16...31] ( источгшк[32..47];
• 11 приемник[16...31] ( источник[48...63]; • маска[5:4]:
• 00 приемник[32..47] ( источник[00..15];
• 01 приемник[32..47] ( источник[16..31];
• 10 приемник[32..47] ( источник[32..47];
• 11 приемник[32..47] ( источник[48..63]; • маска[7:6]:
• 00 приемник[47...63] ( источник[00..15];
• 01 приемник[47...63] ( источник[16..31];
• 10 приемник[47...63] ( истспник[32..47];
• 11 приемник[47...63] ( источник[48..63].
Если использовать один и тот же ХММ-регистр в качестве источника и приемника, то можно выполнять любые перестановки слов в пределах младшего учетверенного слова одного ХММ-регистра, в том числе и инициализацию значением одного слова других слов. Работу команды PSHUFLW поясняет схема, показанная далее.
Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13, 16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).
PSLLDQ приемник, количество сдвигов
PSLLDQ (Shift Double Quadword Left Logical) — логический сдвиг влево приемника на число байт количество _сдвигов.
Синтаксис: PSLLDQ xmm1, imm8
Машинный код: 66 0F 73 /7 i8
Действие: сдвиг влево приемника на число байт, указанных непосредственным операндом количество _сдвигов. Освобождаемые слева младшие байты обнуляются. Если значение, указанное операндом количество _сдвигов, больше чем 15, операнд приемник обнуляется.
Исключения: #UD: 10,12,15; #NM: 3; RM: исключения защищенного режима; VM: исключения защищенного режима.
PSLLW/PSLLD/PSLLQ приемник, количество_сдвигов
PSLLW/PSLLD/PSLLQ (SHIFt packed data Left Logical) — сдвиг влево логический приемника на число бит количество_сдвигов.
Синтаксис и машинный код:
66 0F F1 /r PSLLW rxmrn-l, rxmm2/m128
66 0F 71 /6 ib PSLLW rxmm1, imm8
66 0F F2 /r PSLLD rxmm1, rxmm2/m128
66 0F 72 /6 ib PSLLD rxmm1, imm8
66 0F F3 /r PSLLQ rxmm1, rxmm2/m128
66 0F 73 /6 ib PSLLQ rxmm1, imm8
Действие: сдвиг упакованных элементов приемника (слов, двойных слов, учетверенных слов) влево на число бит, указанных операндом количество _сдвигов. Освобождаемые слева биты замещаются нулевыми. Если значение, указанное операндом количество _сдвигов, больше чем 15 (для слов), 31 (для двойных слов) или 63 (для учетверенных слов), то значение операнда приемник устанавливается равным 0. Операнд количество _сдвигов может быть либо ХММ- регистром (128-разрядной ячейкой памяти), либо непосредственным 8-разрядным операндом. Флаги: не изменяются.
Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).
PSRAW/PSRAD приемник, количество_сдвигов
PSRAW/PSRAD (SHIFt Packed data Right Arithmetic) — сдвиг вправо арифметический приемника на число бит количество_сдвигов.
66 0F Е1 /r PSRAWxmmI, xmm2/m128
66 0F 71/4 i8 PSRAW xmm1, imm8
66 0F E2 /r PSRAD xmm1, xmm2/m128
66 0F 72 /4 i8 PSRAD xmm1, imm8
Действие: сдвиг упакованных элементов приемника (слов, двойных слов) вправо на число бит, указанных операндом количество_сдвигов. Освобождаемые справа биты заполняются значением знакового разряда элемента данных. Если значение, указанное операндом количество_сдвигов, больше чем 15 (для слов) или 31 (для двойных слов), то каждый элемент данных приемника заполняется начальным значением знакового разряда элемента. Операнд количество _сдвигов может быть либо ХММ-регистром (128-разрядной ячейкой памяти), либо непосредственным 8-разрядным операндом.
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) — вычитание учетверенных слов.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14