Рефераты. Форматы данных и команды их обработки процессоров Pentium III, Pentium IV p> Синтаксис и машинный код:

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, 6, 7, 8, 9, 10, 11, 12, 13, 14



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.