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 для отрицательных.
Результат помещается в операнд приемник. Флаги: не изменяются.
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 для результатов вычитания меньших нуля.
Результат помещается в операнд приемник.
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
Действие: команда производит побитовую операцию логическое исключающее ИЛИ над всеми битами операндов источник и приемник. Результат помещается в операнд приемник. Флаги: не изменяются.
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].
Литература
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