Смекни!
smekni.com

Форматы данных и команды их обработки процессоров Pentium III, Pentium IV (стр. 17 из 18)

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

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