Рефераты

Форматы данных и команды их обработки процессоров 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


© 2010 Современные рефераты