Рефераты

Форматы данных и команды их обработки процессоров Pentium III, Pentium IV

WC (Write Combining — память с комбинированной записью). При этом операции

упорядочивания, осуществляемые командами SFENCE или MFENCE, необходимо

использовать совместно с командами MASKMOVEDQU. Для многопроцессорной

конфигурации это особенно важно, так как различным процессорам могут

требоваться различные типы памяти для чтения/записи ячейки приемника.

Исключения: PM: #GP(0): 37 (в том числе при нулевой маске); #NM: 3;

#PF(fault-code); #SS(0): 13 (в том числе при нулевой маске); #UD: 10, 12,

15; RM: #GP: 13 (в том числе при нулевой маске); #NM: 3; #UD: 17,19, 22;

VM: исключения реального режима; #PF(fault-code).

MAXPD приемник, источник

MAXPD (return MAXimum Packed Double-precision floating-point values) —

возврат максимальных упакованных значений с плавающей точкой двойной

точности.

Синтаксис: MAXPD rxmm1, rxmm2/m128

Машинный код: 66 0F 5F /r

Действие: сравнить упакованные значения с плавающей точкой двойной

точности в источнике и приемнике и заместить максимальными из них

соответствующие упакованные значения в приемнике. Если значение в источнике

— SNAN (не QNAN), то оно помещается в приемник. Если только одно значение в

приемнике или источнике — не число NaN (SNaN или QNAN), то в приемник

помещается содержимое источника, которое может быть либо NAN, либо

правильным значением числа с плавающей точкой.

Исключения: SIMD (NE): #I (в том числе, если источник = QNaN), #D; PM:

#GP(0): 37, 42; #SS(0): 1;#NM: 3; #PF(fault-code); #UD: 10-12, 15; #XM; RM:

#GP: 13, 16; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима;

#PF(fault-code).

MAXSD приемник, источник

MAXSD (return MAXimum Scalar Double-precision floating-point value) —

возврат максимального скалярного значения с плавающей точкой двойной

точности.

Синтаксис: MAXSD rxmm1, rxmm2/m64

Машинный код: F2 0F 5F /r

Действие: сравнить значения с плавающей точкой двойной точности в

разрядах [63-0] источника и приемника и заместить максимальным из них

значение в разрядах [63-0] приемника. Если значение в источнике — SNAN (не

QNAN), то оно помещается в приемник. Если только одно значение в приемнике

или источнике — не число NaN (SNaN или QNAN), то в приемник помещается

содержимое источника, которое может быть либо NAN, либо правильным

значением числа с плавающей точкой. Значение в разрядах [127-64] приемника

не изменяется.

Исключения: SIMD (NE): #I (в том числе, если источник = QNaN), #D; PM:

#GP(0): 37; #SS(0): 1; #NM: 3; #PF(fault-code); #UD: 10-12, 15; #ХМ;

#АС(0)_срl3; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения

реального режима; #PF(fault-code); #AC(0)_u.

MFENCE

MFENCE (Memory FENCE) — упорядочить операции загрузки и сохранения.

Синтаксис: MFENCE

Машинный код: 0F AE /6

Действие: выполнить упорядочивание команд загрузки из памяти и

сохранения в памяти, которые были инициированы перед этой командой MFENCE.

Эта операция гарантирует, что каждая команда загрузки и сохранения, за

которой следует в программе команда MFENCE, глобально видима перед любой

другой командой загрузки и сохранения, за которой следует команда MFENCE.

Команда MFENCE упорядочивается относительно команд загрузки и сохранения,

других команд LFENCE, MFENCE, SFENCE и любых команд упорядочивания

(сериализации, типа команды CPUID).

Исключения: отсутствуют.

MINPD приемник, источник

MINPD (return MINimum Packed Double-precision floating-point values) —

возврат минимальных упакованных значений с плавающей точкой двойной

точности.

Синтаксис: MINPD xmm1, xmm2/m128

Машинный код: 66 0F 5D /r

Действие: сравнить упакованные значения с плавающей точкой двойной

точности в источнике и приемнике и заместить минимальными из них

соответствующие упакованные значения в приемнике. Если значение в источнике

— SNAN (не QNAN), то оно помещается в приемник. Если только одно значение в

приемнике или источнике — не число NaN (SNaN или QNAN), то в приемник

помещается содержимое источника, которое может быть либо NAN, либо

правильным значением числа с плавающей точкой.

Исключения: SIMD (NE): #I (в том числе, если источник == QNaN), #D;

PM: #GP(0): 37, 42; #SS(0): 1; #NM: 3; #PF(fault-code); #UD: 10-12, 15;

#XM; RM: #GP: 13, 16; #NM: 3; #UD: 17-19, 22; #ХМ; VM: исключения реального

режима; #PF(fault-code).

MINSD приемник, источник

MINSD (return MINimum Scalar Double-precision floating-point value) —

возврат минимального скалярного значения с плавающей точкой двойной

точности.

Синтаксис: MINSD xmm1, xmm2/m64

Машинный код: F2 0F 5D /r

Действие: сравнить значения с плавающей точкой двойной точности в

разрядах [63-0] источника и приемника и заместить минимальным из них

значение в разрядах [63-0] приемника. Если значение в источнике — SNAN (не

QNAN), то оно помещается в приемник. Если только одно значение в приемнике

или источнике — не число NaN (SNaN или QNAN), то в приемник помещается

содержимое источника, которое может быть либо NAN, либо правильным

значением числа с плавающей точкой. Значение в разрядах [127-64] приемника

не изменяется.

Исключения: SIMD (NE): #I (в том числе, если источник = QNaN), #D; PM:

#GP(0): 37; #SS(0): 1; #NM: 3; #PF(fault-code); #UD: 10-12, 15; #ХМ;

#АС(0)_ср13; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения

реального режима; #PF(fault-code); #AC(0)_u.

MOVAPD приемник, источник

MOVAPD (MOVe Aligned Packed Double-precision floating-point values) —

перемещение упакованных выровненных значений с плавающей точкой двойной

точности.

Синтаксис и машинный код:

0F 28 /r MOVAPS xmm1, xmm2/m128

0F 29 /r MOVAPS xmm2/m128, xmm1

Действие: переместить два двойных учетверенных слова (содержащих два

упакованных значения с плавающей точкой двойной точности) из источника в

приемник. Операнд в памяти должен быть выровнен на 16-байтовой границе.

Исключения: 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).

MOVD приемник, источник

MOVD (Move Double word) — перемещение двойного слова между ХММ-регист-

ром и 32-разрядным регистром (ячейкой памяти).

Синтаксис и машинный код:

66 0F 6Е /r MOVD rxmm, r/m32

66 0F 7E /r MOVD r/m32, rxmm

Действие:

• Если приемник является ХММ-регистром, поместить в биты 0-31

приемника значение источника, поместить в биты 32-127 приемника нулевое

значение.

• Если приемник является 32-разрядной ячейкой памяти или регистром

общего назначения, то поместить в приемник значение бит 0-31 источника (ХММ-

регистра).

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

Исключения: РМ: #GP(0): 1, 2; #MF; #PF(fault-code); #SS(0): 1; #UD:

10, 12, 15; #NM 3; #AC(0)_cpl3; RM: #GP: 13; #MF; #NM: 3; #UD: 17,19,22;

VM: #PF(fault-code); #AC(0)_u.

MOVDQA приемник, источник

MOVDQA (MOVe Aligned Double Quadword) — перемещение выровненных 128

бит из источника в приемник.

Синтаксис и машинный код:

66 0F 6F /r MOVDQA rxmm1, rxmm2/m128

66 0F 7F /r MOVDQA rxmm2/m128, rxmml

Действие: переместить содержимое источника в приемник. Операнд в

памяти должен быть выровнен на 16-байтовой границе.

Исключения: РМ: #GP(0): 2,42; #NM: 3; #SS(0): 1; RM: #GP: 13,16; #NM:

3; #UD: 17, 19, 22; #PF(fault-code); VM: исключения реального режима;

#PF(fault-code).

MOVDQU приемник, источник

MOVDQU (MOVe Unaligned Double Quadword description) — перемещение

невыровненных 128 бит из источника в приемник.

Синтаксис и машинный код:

F3 0F 6F /r MOVDQU xmm1, xmm2/m128

F3 0F 7F /r MOVDQU xmm2/m128, xmm1

Действие: переместить содержимое источника в приемник.

Исключения: РМ: #GP(0): 2; #NM: 3; #PF(fault-code); #SS(0): 1; #UD:

10,12,15; RM: #GP: 13; #NM: 3; #UD: 17,19,22; VM: исключения реального

режима; #PF(fault-code).

MOVDQ2Q приемник, источник

MOVDQ2Q (MOVe Quadword from XMM to MMX register description) —

перемещение младшего учетверенного слова ХММ-регистра в ММХ-регистр.

Синтаксис: MOVDQ2Q mm, xmm

Машинный код: F2 0F D6

Действие: переместить содержимое источника в приемник по схеме:

приемник ( источник[63-0].

Исключения: РМ: #NM: 3; #UD: 10, 12, 15; #MF; RM: исключения

защищенного

режима; VM: исключения защищенного режима.

MOVHPD приемник, источник

MOVHPD (MOVe High Packed Double-precision floating-point value) —

перемещение старшего упакованного значения с плавающей точкой двойной

точности.

Синтаксис и машинный код:

66 0F 16 /r MOVHPD rxmm, m64

66 0F 17 /r MOVHPD m64, rxmm

Действие: переместить учетверенное слово (содержащее упакованное

значение с плавающей точкой двойной точности) из источника в приемник.

Источник и приемник могут быть либо ХММ-регистром, либо 64-разрядной

ячейкой памяти (но не одновременно). Для регистрового операнда перемещению

подвергается старшее учетверенное слово (разряды [64-127]). Младшее

учетверенное слово ХММ-регистра (разряды [0-63]) не изменяется.

Исключения: РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD:

10, 13, 19; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 12,13,17; VM: исключения

реального режима; #PF(fault-code); #AC(0)_u.

MOVLPD приемник, источник

MOVLPD (MOVe Low Packed Double-precision floating-point value) —

перемещение младшего упакованного значения с плавающей точкой двойной

точности.

Синтаксис и машинный код:

66 0F 12 /r MOVLPD rxmm, m64

66 0F 13 /r MOVLPD m64, rxmm

Действие: переместить учетверенное слово (содержащее упакованное

значение с плавающей точкой двойной точности) из источника в приемник.

Источник и приемник могут быть либо ХММ-регистром, либо 64-разрядной

ячейкой памяти (но не одновременно). Для регистрового операнда перемещению

подвергается младшее учетверенное слово (разряды [0-63]). Старшее

учетверенное слово ХММ-регистра (разряды [64-127]) не изменяется.

Исключения: РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD:

10, 12, 13; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17,19,20; VM: исключения

реального режима; #PF(fault-code); #AC(0)_u.

MOVMSKPD приемник, источник

MOVMSKPD (extract Packed Double-precision floating-point sign MaSK) —

извлечение 2-битной знаковой маски упакованных значений с плавающей точкой

двойной точности.

Синтаксис: MOVMSKPD r32, rxmm

Машинный код: 66 0F 50 /r

Действие: извлечь знаковые разряды из упакованных значении с плавающей

точкой двойной точности операнда источник (ХММ-регистр) и сохранить

полученную знаковую маску в двух младших битах операнда приемник (32-битный

общий регистр).

Исключения: РМ: #NM: 3; #ХМ; #UD: 10-12,15; RM: исключения защищенного

режима; VM: исключения защищенного режима.

MOVNTDQ приемник, источник

MOVNTDQ (store Double Quadword using Non-Temporal hint description) —

сохранение двойного учетверенного слова из ХММ-регистра в память без

использования кэша.

Синтаксис: 66 0F E7 /r

Машинный код: MOVNTDQ m128, rxmm

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

реального режима; #PF(fault-code).

MOVNTI приемник, источник

MOVNTI (store doubleword using Non-Temporal hint description) —

сохранение двойного слова из 32-разрядного регистра общего назначения в

память без использования кэша.

Синтаксис: MOVNTI m32, r32

Машинный код: 0F C3 /r

Исключения: РМ: #GP(0): 37; #PF(fault-code); #SS(0): 13; #UD: 15; RM:

#GP: 13, 16; #NM: 3; #UD: 22; VM: исключения реального режима; #PF(fault-

code).

MOVNTPD приемник, источник

MOVNTPD (store Packed Double-Precision floating-point values using Non-

Temporal hint) — сохранение упакованных значений с плавающей точкой двойной

точности из ХММ-регистра в память без использования кэша.

Синтаксис: MOVNTPD m128, rxmm

Машинный код: 66 0F 2В /r

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

реального режима; #PF(rault-code).

MOVQ приемник, источник

MOVQ (Move Quadword) — переместить учетверенное слово.

Синтаксис и машинный код:

F3 0F 7E MOVQ rxmm1, rxmm2/m64

66 0F D6 MOVQ rxmm2/m64, rxmm1

Действие:

• Если приемник и источник являются ХММ-регистрами, то изменить

содержимое приемника следующим образом: приемник[63-0](источник[63-0];

разряды приемник[127-64] не изменяются.

• Если приемник — 64-разрядная ячейка памяти, то изменить содержимое

приемника следующим образом: приемник[63-0](источник[63-0].

• Если источник — 64-разрядная ячейка памяти, то изменить содержимое

приемника следующим образом: приемник[63-0](источник[63-0], приемник[63-

0](0000000000000000h.

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

Исключения: РМ: #GP(0): 1, 2; #SS(0): 1; #UD: 10,12,15; #NM: 3; #MF;

#PF(fault-code); #AC(0)_cpl3; RM: #GP: 13; #MF; #NM: 3; #UD: 17,19, 22; VM:

исключения В реального режима; #PF(fault-code); #AC(0)_u.

MOVQ2DQ приемник, источник

MOVQ2DQ (MOVe Quadword from MMX to XMM register description) —

перемещение учетверенного слова из ММХ-регистра в младшее учетверенное

слово ХММ-регистра.

Синтаксис: MOVQ2DQ rxmm, rmmx

Машинный код: F3 0F D6

Действие: переместить содержимое источника в приемник по схеме:

приемник[63-0] ( источник; приемник[127-64] ( 00000000000000000h.

Исключения: РМ: #NM: 3; #UD: 10, 12, 15; #MF; RM: исключения

защищенного режима; VM: исключения защищенного режима.

MOVSD приемник, источник

MOVSD (MOVe Scalar Double-precision floating-point value) —

перемещение скалярного значения с плавающей точкой двойной точности.

Синтаксис и машинный код:

F2 0F 10 /r MOVSD rxmm1, rxmm2/m64

F2 0F 11 /r MOVSD rxmm2/m64, rxmm1

Действие: переместить скалярное значение с плавающей точкой двойной

точности из разрядов [0-63] источника в разряды [0-63] приемника. Если

операнды — ХММ-регистры, то разряды [64-127] приемника не изменяются. Если

источник -ячейка памяти, то разряды [64-127] приемника обнуляются.

Исключения: РМ: #GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM;

#UD:

10-12,15; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17-19,22; #ХМ; VM:

исключения реального режима; #PF(fault-code); #AC(0)_u.

MOVUPD приемник, источник

MOVUPD (MOVe Unaligned Packed Double-precision floating-point values)

— перемещение невыровненных упакованных значений с плавающей точкой двойной

точности.

Синтаксис и машинный код:

66 0F 10 /r MOVUPD xmm1, xmm2/m128

66 0F 11 /r MOVUPD xmm2/m128, xmm1

Действие: переместить два двойных учетверенных слова (содержащих два

упакованных значения с плавающей точкой двойной точности) из источника в

приемник. Не требуется выравнивания операнда в памяти на 16-байтовой

границе.

Исключения: РМ: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD:

10-12, 15; #XM; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения

реального режима; #PF(fault-code).

MULPD приемник, источник

MULPD (MULtiply Packed Double-precision floating-point values) —

умножение упакованных значений с плавающей точкой двойной точности.

Синтаксис: MULPD rxmm1, rxmm2/m128

Машинный код: 66 0F 59 /r

Действие: умножить пары упакованных значений с плавающей точкой

двойной точности источника и приемника по схеме: приемник[63-0](приемник[63-

0][pic]источник[63-0]; приемник[127-64](приемник[127-64][pic]источник[127-

64].

Исключения: SIMD (NE): #O, #U, #I, #Р, #D; PM: #GP(0): 37, 42; #SS(0):

13; #NM: 3; #PF(fault-code); #UD: 10-12, 15; #XM; RM: #GP: 13, 16; #NM: 3;

#UD: 17-19, 22; #XM; VM: исключения реального режима; #PF(fault-code).

MULSD приемник, источник

MULSD (MULtiply Scalar Double-precision floating-point values) —

умножение скалярных упакованных значений с плавающей точкой двойной

точности.

Синтаксис: MULSD rxmm1, rxmm2/m64

Машинный код: F2 0F 59 /r

Действие: умножить младшие упакованные значения с плавающей точкой

двойной точности источника и приемника по схеме: приемник[63-0](приемник[63-

0] [pic]источник[63-0]; приемник[127-64] — не изменяется.

Исключения: SIMD (NE): #O, #U, #I, #Р, #D; PM: #GP(0): 37; #SS(0): 13;

#NM: 3; #PF(fault-code); #UD: 10-12, 15; #XM; #AC(0)_cpl3; RM: #GP: 13;

#NM: 3; #UD: 17-19, 22; #ХМ; VM: исключения реального режима; #PF(fault-

code); #AC(0)_u.

ORPD приемник, источник

ORPD (bitwise logical OR 0F Double-precision floating-point values) —

поразрядное логическое ИЛИ над упакованными значениями с плавающей точкой

двойной точности.

Синтаксис: ORPD xmm1, xmm2/m128

Машинный код: 66 0F 56 /r

Действие: выполнить операцию поразрядного логического ИЛИ над парами

упакованных значений с плавающей точкой двойной точности в приемнике и

источнике по схеме: приемник[127-0](приемник[127-0]) побитное_ОR

источник[127-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).

PACKSSWB/PACKSSDW приемник, источник

PACKSSWB (Pack with Signed Saturation Words to Bytes) — упаковка со

знаковым насыщением слов в байты. PACKSSDW (Pack with Signed Saturation

Double Words to Words) — упаковка со знаковым насыщением двойных слов в

слова.

Синтаксис и машинный код:

66 0F 63 /r PACKSSWB rxmm1, rxmm2/m128

66 0F 6В /r PACKSSDW rxmm1, rxmm2/m128

Действие: команды преобразуют шестнадцать/восемь элементов размером в

слово/двойное слово из источника и приемника в шестнадцать/восемь элементов

в операнде приемник размером в байт/слово (см. рисунок ниже). Если значение

элемента источника превышает допустимое значения элемента приемника, то в

элементе приемника формируется предельный результат в соответствии с

принципом знакового насыщения:

• PACKSSWB — 07fh для положительных чисел и 080h для отрицательных;

• PACKSSDW — 07fffh для положительных чисел и 08000h для

отрицательных.

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

[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).

PACKUSWB приемник, источник

PACKUSWB (PACK with Unsigned Saturation Description) — упаковка с

беззнаковым насыщением слов в байты.

Синтаксис: PACKUSWB rxmm1, rxmm2/m128

Машинный код: 66 0F 67 /r

Действие: команда преобразует шестнадцать элементов из источника и

приемника размером в слово в шестнадцать элементов в приемнике размером в

байт (см. рисунок ниже). Если пересылаемое значение больше допустимого для

поля приемника, то в нем формируется предельный результат в соответствии с

принципом беззнакового насыщения, что соответствует значениям 0Ffh для

положительных чисел и 00h для отрицательных.

[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).

PADDB/PADDW/PADDD приемник, источник

PADDB (Packed ADDition Bytes) — сложение упакованных байт. PADDW

(Packed ADDition Words) — сложение упакованных слов. PADDD (Packed ADDition

Double words) — сложение упакованных двойных слов.

Синтаксис и машинный код:

66 0F FC /r PADDB rxmm1, rxmm2/m128

66 0F FD /r PADDW rxmm1, rxmm2/m128

66 0F FE /r PADDD rxmm1, rxmm2/m128

Действие: команда в зависимости от кода операции складывает

соответствующие элементы операндов источника и приемника размером

байт/слово/двойное слово. При возникновении переполнения результат

формируется в соответствии с принципом циклического переполнения и

помещается в операнд приемник.

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

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

PADDQ приемник, источник

PADDQ (ADD Packed Quadword integers description) — сложение

учетверенных слов.

Синтаксис и машинный код:

0F D4 /r PADDQ rmmx1 ,rmmx2/m64

66 0F D4 /r PADDQ rxmm1,rxmm2/m128

Действие: сложить 64-битные целые значения в источнике и приемнике.

Исходя из типа источника, возможны две схемы умножения:

• источник — ММХ-регистр или ячейка памяти m64: приемник[63-0](прием-

ммк[63-0] + источник[63-0], приемник — ММХ-регистр;

• источник — ХММ-регистр или ячейка памяти: приемник[63-0](приемник[63-

0] + источник[63-0]; приемник[127-64.](приемник[127-64] + источник[127-64].

В результате выполнения команды PADDQ регистр EFLAGS не отражает факта

возникновения ситуации переполнения или переноса. Когда результат умножения

слишком большой, чтобы быть представленным в 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).

PADDSB/PADDSW приемник, источник

PADDSB (Packed ADDition signed Bytes with Saturation) — сложение

упакованных бант со знаковым насыщением. PADDSW (Packed ADDition signed

Words with Saturation) — сложение упакованных слов со знаковым насыщением.

Синтаксис и машинный код:

66 0F EC /r PADDSB rxmm1, rxmm2/m128

66 0F ED /r PADDSW rxmm1, rxmm2/m128

Действие: команда в зависимости от кода операции складывает

соответствующие элементы операндов источника и приемника размером

байт/слово с учетом знака. При возникновении переполнения результат

формируется в соответствии с принципом знакового насыщения:

• PADDSB — 07fh для положительных чисел и 080h для отрицательных;

• PADDSW — 07fffh для положительных чисел и 08000h для отрицательных.

Результат помещается в операнд приемник.

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

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

PADDUSB/PADDUSW приемник, источник

PADDUSB (Packed ADDition unsigned Bytes with Unsigned Saturation) —

сложение упакованных байт с беззнаковым насыщением. PADDUSW (Packed

ADDition unsigned Words with Unsigned Saturation) — сложение упакованных

слов с беззнаковым насыщением.

Синтаксис и машинный код:

66 0F DC /r PADDUSB rxmm1, rxmm2/m128

66 0F DD /r PADDUSW rxmm1, rxmm2/m128

Действие: команда в зависимости от кода операции складывает без учета

знака соответствующие элементы операндов источника и приемника размером

байт/слово. При возникновении переполнения результат формируется в

приемнике в соответствии с принципом беззнакового насыщения:

• PADDUSB – 0ffh и 00h для результатов сложения соответственно больших

или меньших максимально/минимально представимых значений в беззнаковом

байте;

• PADDUSW – 0ffffh и 0000h для результатов сложения соответственно

больших или меньших максимально/минимально представимых значений в

беззнаковом слове.

Результат помещается в операнд приемник.

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

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

PAND приемник, источник

PAND (Packed logical AND) — упакованное логическое И.

Синтаксис: PAND rxmm1, rxmm2/m128

Машинный код: 66 0F DB /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).

PANDN приемник, источник

PANDN (Packed logical AND Not) — упакованное логическое И-НЕ.

Синтаксис: PANDN rxmm1, rxmm2/m128

Машинный код: 66 0F DF /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).

PAUSE

PAUSE (Spin Loop Hint) — улучшить выполнение цикла ожидания-занятости.

Синтаксис: PAUSE

Машинный код: F3 90

Действие: улучшить выполнение цикла ожидания-занятости (spin-wait

loops). При выполнении подобных циклов процессор Pentium 4 испытывает

проблему при завершении цикла, обнаруживая возможное нарушение доступа к

памяти. Команда PAUSE подсказывает процессору, что данная кодовая

последовательность — цикл ожидания-занятости. Процессор использует эту

подсказку, чтобы игнорировать возможную ситуацию нарушения доступа к памяти

в большинстве случаев. Это улучшает работу процессора вплоть до

значительного снижения его энергопотребления. По этой причине рекомендуется

включать команду PAUSE во все циклы ожидания-занятости.

Исключения: отсутствуют.

PAVGB/PAVGW приемник, источник

PAVGB/PAVGW (Packed Average) — упакованное среднее.

Синтаксис и машинный код:

66 0F E0 /r PAVGB rxmm1, rxmm2/m128

66 0F E3 /r PAVGW rxmm1, rxmm2/m128

Действие: выполнить параллельное сложение байт/слов источника и

приемника и сдвинуть результат сложения на один разряд вправо (деление на

2).

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

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

PCMPEQB/PCMPEQW/PCMPEQD приемник, источник

PCMPEQB (Packed CoMPare for Equal Byte) — сравнение на равенство

упакованных байт. PCMPEQW (Packed CoMPare for Equal Word) — сравнение на

равенство упакованных слов. PCMPEQD (Packed CoMPare for Equal Double word)

— сравнение на равенство упакованных двойных слов.

Синтаксис и машинный код:

66 0F 74 /r PCMPEQB rxmm1, rxmm2/m128

66 0F 75 /r PCMPEQW rxmm1, rxmm2/m128

66 0F 76 /r PCMPEQD rxmm1, rxmm2/m128

Действие: команды сравнивают на равенство элементы источника и

приемника и

формируют элементы результата по следующему принципу:

• если элемент источника равен соответствующему элементу приемника, то

элемент результата в зависимости от применяемой команды устанавливается

равным одному из следующих значений: 0ffh, 0ffffh, 0ffffffffh;

• если элемент источника не равен соответствующему элементу приемника,

то элемент результата в зависимости от применяемой команды устанавливается

равным одному из следующих значений: 00h, 0000h, 00000000h.

Результат помещается в операнд приемник.

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

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

PCMPGTB/PCMPGTW/PCMPGTD приемник, источник

PCMPGTB (Packed CoMPare for Greater Than Byte) — сравнение по условию

"больше чем" упакованных байт. PCMPGTW (Packed CoMPare for Greater Than

Word) — сравнение по условию "больше чем" упакованных слов. PCMPGTD (Packed

CoMPare for Greater Than Double word) — сравнение но условию "больше чем"

упакованных двойных слов.

Синтаксис и машинный код:

66 0F 64 /r PCMPGTB rxmm1, rxmm2/m128

66 0F 65 /r PCMPGTW rxmm1, rxmm2/m128

66 0F 66 /r PCMPGTD rxmm1, rxmm2/m128

Действие: команда производит сравнение по условию "больше чем"

элементов операндов источника и приемника и формирует элементы результата

по следующему принципу:

• если элемент приемника больше соответствующего элемента источника,

то элемент результата в зависимости от применяемой команды устанавливается

равным одному из следующих значений: 0ffh, 0ffffh, 0ffffffffh;

• если элемент приемника не больше соответствующего элемента

источника, то элемент результата в зависимости от применяемой команды

устанавливается равным одному из следующих значений: 00h, 0000h, 00000000h.

Результат помещается в операнд приемник.

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

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

PEXTRW приемник, источник, маска

PEXTRW (Extract Word) — извлечение 16-битного слова из ХММ-рстистра по

маске.

Синтаксис: PEXTRW r32, rxmm, imm8

Машинный код: 66 0F C5 /r i8

Действие: команда выделяет четыре младших бита непосредственного

операнда маска. Их значение определяет номер слова в операнде источник (ХММ-

регистр). Данное слово перемещается в младшие 16 бит операнда приемник,

представляющего собой 32-разрядный регистр общего назначения. Старшие 16

бит этого регистра обнуляются.

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

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

PINSRW приемник, источник, маска

PINSRW (Insert Word) — вставка 16-битного слова в регистр ММХ.

Синтаксис: PINSRW rxmm, r32/m16, imm8

Машинный код: 66 0F C4 /r i8

Действие: команда выделяет четыре младших бита непосредственного

операнда маска. Их значение определяет номер слова в операнде приемник,

который представляет собой ХММ-регистр. В это слово будут перемещены

младшие 16 бит операнда источник, который представляет собой 32-разрядный

регистр общего назначения или 16-битную ячейку памяти.

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

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

PMADDWD приемник, источник

PMADDWD (Packed Multiply and ADD Word to Double word) — упакованное

знаковое умножение знаковых слов операндов источник и приемник с

последующим сложением промежуточных результатов в формате двойного слова.

Синтаксис: PMADDWD rxmm1, rxmm2/m128

Машинный код: 66 0F F5 /r

Действие: работа команды аналогична команде блока MMX PMADDWD, за

исключением того, что вместо ММХ-регистров используются ХММ-регистры и

разрядность операндов в памяти повышается до 128 бит.

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

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

PMAXSW приемник, источник

PMAXSW (MAXimum 0F Packed Signed Word integers) — возврат максимальных

упакованных знаковых слов.

Синтаксис: PMAXSW rxmmi, 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).

PMAXUB приемник, источник

PMAXUB (MAXimum 0F Packed Unsigned Byte integers) — возврат

максимальных упакованных беззнаковых байт.

Синтаксис: PMAXUB rxmmi, rxmm2/m128

Машинный код: 66 0F DE /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: исключения

реального режима; ftPF(fault-code).

PMINSW приемник, источник

PMINSW (MINimum of Packed Signed Word integers) — возврат минимальных

упакованных знаковых слов.

Синтаксис: PMINSW rxmmi, rxmm2/m128

Машинный код: 66 0F EA /r

Действие: для каждой пары элементов (размером 16 бит) источника и

приемника команда определяет наименьший с учетом знака и заменяет им

соответствующий элемент приемника.

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

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

PMINUB приемник, источник

PMINUB (MINimum of Packed Unsigned Byte integers) — возврат

минимальных упакованных беззнаковых бант.

Синтаксис: PMINUB rxmmi, rxmm2/m128

Машинный код: 66 0F DA /r

Действие: для каждой пары байтовых элементов источника и приемника

команда определяет наименьший без учета знака и заменяет им соответствующий

элемент

приемника.

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

Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3;

#PF(lault-code); RM: #GP: 13,16; #UD: 17,19, 22; #NM: 3; VM: исключения

реального режима; #PF(fault-code).

PMOVMSKB приемник, источник

PMOVMSKB (MOVe Byte MaSK) — перемещение байтовой маски в целочисленный

регистр.

Синтаксис: PMOVMSKB r32, rxmm

Машинный код: 66 0F D7 /r

Действие: команда извлекает и копирует значения старшего бита каждого

из упакованных байт ХММ-регистра в младшие 16 бит 32-битного целочисленного

регистра общего назначения. Остальные разряды целочисленного регистра

обнуляются.

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

Исключения: РМ: #UD: 10, 12,15; #NM: 3; RM: исключения защищенного

Страницы: 1, 2, 3, 4, 5


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