Files
NASM/docs/x86-64_asm_sheet.ru.md
Пытков Роман 6ef051900a всякое
2025-09-21 19:25:45 +03:00

58 KiB
Raw Blame History

Шпаргалка по x8664 ASM

Адресация

  • Без сегментации (кроме fs и gs для специальных целей, например, потоков)

  • Относительно базового регистра

    • используется для данных в стеке, массивов, структур и членов классов
    • [base + index * scale + immediate_offset]
    • base обязателен, может быть любым 64битным регистром
    • index может быть любым 64битным регистром, кроме rsp
    • scale может быть 1, 2, 4 или 8
    • immediate_offset (в GAS называется displacement) — смещение относительно базового регистра
    • Синтаксис GAS: immediate_offset(base, index, scale)
  • Относительно RIP (также PCrelative)

    • используется для статических данных
    • содержит 32битное знаково расширяемое смещение относительно указателя команд
    • явно задаётся в NASM через mov eax [rel label] или директивы default rel / default abs (в противном случае используется 32битная абсолютная адресация)
    • явно задаётся в GAS через mov eax label(%rip)
  • 32битная абсолютная адресация

    • 32битный константный адрес, знаково расширяемый до 64 бит
    • работает для адресов ниже 2^31
    • не используйте для простых операндов памяти: RIPrelative короче, быстрее (не нужны релокации) и работает везде
    • используется для доступа к статическим массивам с индексным регистром, например mov ebx, [intarray + rsi*4], однако это не работает для DLL в Windows и Linux, а также для исполняемых файлов и DLL в macOS, потому что адреса выше 2^32 (gcc и clang используют это для Linuxисполняемых файлов; для Windowsисполняемых MASM использует адресацию относительно базы образа)
    • альтернативный, работающий везде вариант: сначала загрузить адрес статического массива в rbx через lea с RIPrelative адресом, а затем адресовать относительно этого базового регистра (lea rbx, [array], затем mov eax, [rbx + rcx*4]); другие статические массивы затем можно адресовать относительно (mov [(array2-array1) + rbx + rcx*4], eax)
  • 64битная абсолютная адресация

    • mov eax, dword [qword a]
    • применима только с mov и регистрами al, ax, eax или rax (источник или приёмник)
    • не может содержать сегмент, базовый или индексный регистр

Позиционно‑независимый код (PIC)

  • Проще и быстрее, чем 32битная техника GOT (Global Offset Table), поскольку RIPrelative уже позиционно‑независим (заметьте, что описанная выше техника доступа к статическим массивам с индексным регистром также позиционно‑независима)

Регистры общего назначения

bit 0 - 63 bit 0 - 31 bit 0 - 15 bit 8 - 15 bit 0 - 7
rax eax ax ah al
rbx ebx bx bh bl
rcx ecx cx ch cl
rdx edx dx dh dl
rsi esi si sil
rdi edi di dil
rbp ebp bp bpl
rsp esp sp spl
r8 r8d r8w r8b
r9 r9d r9w r9b
r10 r10d r10w r10b
r11 r11d r11w r11b
r12 r12d r12w r12b
r13 r13d r13w r13b
r14 r14d r14w r14b
r15 r15d r15w r15b
rflags flags
rip

Регистр rflags

  • CF (Carry Flag, бит 0) — устанавливается, если арифметическая операция генерирует перенос или заём из старшего бита результата; очищается иначе. Флаг показывает переполнение для беззнаковой арифметики. Также применяется в многоточечной (многословной) арифметике.
  • PF (Parity Flag, бит 2) — устанавливается, если младший байт результата содержит чётное число единиц; очищается иначе.
  • AF (Auxiliary carry Flag, бит 4) — устанавливается, если операция вызывает перенос или заём из бита 3 результата; очищается иначе. Используется в двоично‑десятичной (BCD) арифметике.
  • ZF (Zero Flag, бит 6) — устанавливается, если результат равен нулю; очищается иначе.
  • SF (Sign Flag, бит 7) — устанавливается равным старшему биту результата, то есть знаковому биту знакового целого (0 — положительное, 1 — отрицательное).
  • OF (Overflow Flag, бит 11) — устанавливается, если целочисленный результат слишком велик (без учёта знакового бита), чтобы поместиться в операнд назначения: слишком большой положительный или слишком маленький отрицательный; очищается иначе. Показывает переполнение для знаковой (дополнительный код) арифметики.

Режимы насыщения и циклического переполнения (набора инструкций)

  • Циклическая арифметика (wraparound) — истинный выход за диапазон усечётся (перенос/переполнение игнорируется, возвращаются только младшие биты результата). Подходит, когда диапазон операндов контролируется. Иначе возможны большие ошибки. Пример: сложение двух больших знаковых чисел может вызвать положительное переполнение и дать отрицательный результат.
  • Арифметика со знаковым насыщением — выход за диапазон ограничивается представимым диапазоном знаковых целых для данного размера. Например, при положительном переполнении для знаковых слов результат насыщается до 7FFFH (наибольшее положительное 16битное); при отрицательном — до 8000H.
  • Арифметика с беззнаковым насыщением — выход за диапазон ограничивается представимым диапазоном беззнаковых целых данного размера. Положительное переполнение для беззнаковых байтов даёт FFH, отрицательное — 00H.

Стековые кадры

Инструкции передачи данных

  • MOV — Перемещение данных между регистрами общего назначения; между памятью и регистрами общего назначения или сегментными; загрузка непосредственных значений в регистры общего назначения.
  • CMOVcc — Условное перемещение.
  • XCHG — Обмен значениями.
  • BSWAP — Перестановка байтов.
  • XADD — Обмен с добавлением.
  • CMPXCHG — Сравнить и обменять.
  • CMPXCHG8B / CMPXCHG16B — Сравнить и обменять 8/16 байт.
  • PUSH — Поместить на стек.
  • POP — Снять со стека.
  • PUSHA / PUSHAD — Поместить все регистры общего назначения на стек.
  • POPA / POPAD — Снять все регистры общего назначения со стека.
  • CWD / CDQ / CQO — Расширить слово до двойного слова / двойное слово до квадрослова.
  • CBW / CWDE / CDQE — Расширить байт до слова / слово до двойного слова в регистре rax.
  • MOVSX / MOVSXD — Перемещение с знаковым расширением.
  • MOVZX — Перемещение с нулевым расширением.

Инструкции целочисленной арифметики

  • ADCX — Беззнаковое сложение с переносом.
  • ADOX — Беззнаковое сложение с переполнением.
  • ADD — Сложение целых.
  • ADC — Сложение с переносом.
  • SUB — Вычитание.
  • SBB — Вычитание с заёмом.
  • IMUL — Умножение со знаком.
  • MUL — Умножение без знака.
  • IDIV — Деление со знаком.
  • DIV — Деление без знака.
  • INC — Инкремент.
  • DEC — Декремент.
  • NEG — Изменить знак (двойка‑дополнение).
  • CMP — Сравнение.

Логические инструкции

  • AND — Побитовое И.
  • OR — Побитовое ИЛИ.
  • XOR — Побитовое исключающее ИЛИ.
  • NOT — Побитовое НЕ.

Сдвиги и ротации

  • SAL / SAR / SHL / SHR — Арифметический/логический сдвиг влево/вправо.
  • SHLD — Двойной сдвиг влево.
  • SHRD — Двойной сдвиг вправо.
  • RCL / RCR / ROL / ROR — Ротация влево/вправо и через перенос.

Битовые и байтовые инструкции

  • BT — Тест бита.
  • BTS — Тест и установка бита.
  • BTR — Тест и сброс бита.
  • BTC — Тест и инверсия бита.
  • BSF — Поиск первого (младшего) установленного бита.
  • BSR — Поиск последнего (старшего) установленного бита.
  • SETcc — Установить байт по условию.
  • TEST — Логическое сравнение (AND, флаги).
  • CRC32 — Аппаратное ускорение вычисления CRC для быстрого контроля целостности данных.
  • POPCNT — Подсчёт количества единичных битов во втором операнде с возвратом счётчика в первый (регистр назначения).

Инструкции передачи управления

  • JMP — Безусловный переход.
  • Jcc — Переход при выполнении условия (операнд RIPrelative).
  • LOOP / LOOPcc — Цикл с счётчиком в rcx.
  • CALL — Вызов процедуры.
  • RET — Возврат из процедуры.
  • IRET / IRETD / IRETQ — Возврат из прерывания.
  • INT n / INTO / INT 3 — Вызов обработчика прерывания.
  • ENTER — Высокоуровневый вход в процедуру.
  • LEAVE — Высокоуровневый выход из процедуры.

Строковые инструкции

Инструкции управления rflags

  • STC — Установить флаг переноса.
  • CLC — Очистить флаг переноса.
  • CMC — Инвертировать флаг переноса.
  • CLD — Очистить флаг направления.
  • STD — Установить флаг направления.
  • LAHF — Загрузить флаги в регистр ah.
  • SAHF — Сохранить регистр ah в флаги.
  • PUSHF / PUSHFQ — Поместить rflags на стек.
  • POPF / POPFQ — Снять rflags со стека.
  • STI — Установить флаг прерываний.
  • CLI — Очистить флаг прерываний.

Прочие инструкции

  • LEA — Загрузка эффективного адреса.
  • NOP — Пустая операция.
  • UD — Неопределённая инструкция.
  • XLAT / XLATB — Табличное преобразование байта.
  • CPUID — Идентификация процессора.
  • MOVBE — Перемещение данных с перестановкой байтов.
  • PREFETCHW — Предвыборка данных в кэш с ожиданием записи.
  • CLFLUSHСброс и инвалидация операнда памяти и связанной линии кэша на всех уровнях иерархии кэшей процессора.
  • CLFLUSHOPTТо же, с оптимизацией пропускной способности памяти.
  • RDRAND — Получение случайного числа, сгенерированного аппаратно.
  • RDSEED — Получение зерна (seed) для ГСЧ из аппаратного источника.

Сохранение/восстановление расширенных состояний в пользовательском режиме

  • XSAVE — Сохранить расширенные состояния процессора в память.
  • XSAVEC — Сохранить расширенные состояния с уплотнением.
  • XSAVEOPT — Оптимизированное сохранение расширенных состояний.
  • XRSTOR — Восстановить расширенные состояния из памяти.
  • XGETBV — Прочитать состояние расширенного управляющего регистра.

Манипуляции битами (BMI1, BMI2)

  • ANDN — Побитовое AND первого операнда с инвертированным вторым.
  • BEXTR — Извлечение непрерывного диапазона битов.
  • BLSI — Извлечь младший установленный бит.
  • BLSMSK — Установить в 1 все младшие биты ниже первого установленного.
  • BLSR — Сбросить младший установленный бит.
  • BZHI — Обнулить старшие биты, начиная с указанной позиции.
  • LZCNT — Подсчёт ведущих нулей.
  • MULX — Беззнаковое умножение без изменения флагов.
  • PDEP — Параллельная «загрузка» битов по маске.
  • PEXT — Параллельное «извлечение» битов по маске.
  • RORX — Ротация вправо без изменения флагов.
  • SARX / SHLX / SHRX — Арифметический/логический сдвиг без изменения флагов.
  • TZCNT — Подсчёт замыкающих нулей (с конца).

Обзор x87 FPU

  • Состояние x87 FPU отображается на состояние MMX; при переходах к MMXинструкциям нужно соблюдать осторожность, чтобы избежать неконсистентности результатов.

Инструкции передачи данных x87 FPU

  • FLD — Загрузка числа с плавающей точкой.
  • FST / FSTP — Сохранить число с/без извлечения из стека FPU.
  • FILD — Загрузка целого.
  • FIST / FISTP — Сохранить целое с/без извлечения.
  • FBLD — Загрузка BCD.
  • FBSTP — Сохранение BCD и извлечение.
  • FXCH — Обмен регистров.
  • FCMOVcc — Условное перемещение (FPU).

Базовая арифметика x87 FPU

  • FADD / FADDP / FIADD — Сложение с плавающей точкой.
  • FSUB / FSUBP / FISUB — Вычитание с плавающей точкой.
  • FSUBR / FSUBRP / FISUBR — Вычитание в обратном порядке.
  • FMUL / FMULP / FIMUL — Умножение с плавающей точкой.
  • FDIV / FDIVP / FIDIV — Деление с плавающей точкой.
  • FDIVR / FDIVRP / FIDIVR — Деление в обратном порядке.
  • FPREM — Частный остаток.
  • FPREM1 — Частный остаток (IEEE).
  • FABS — Модуль.
  • FCHS — Смена знака.
  • FRNDINT — Округление до целого.
  • FSCALE — Масштабирование по степени двойки.
  • FSQRT — Квадратный корень.
  • FXTRACT — Извлечение показателя и мантиссы.

Сравнения x87 FPU

  • FCOM / FCOMP / FCOMPP — Сравнение чисел с плавающей точкой.
  • FUCOM / FUCOMP / FUCOMPP — Неупорядоченное сравнение чисел с плавающей точкой.
  • FICOM / FICOMP — Сравнение целых.
  • FCOMI / FCOMIP / FUCOMI / FUCOMIP — Сравнение чисел с плавающей точкой с установкой флагов rflags.
  • FTST — Тест (сравнение с 0.0).
  • FXAM — Анализ (exam) числа с плавающей точкой.

Трансцендентные функции x87 FPU

  • FSIN — Синус.
  • FCOS — Косинус.
  • FSINCOS — Синус и косинус.
  • FPTAN — Частичная тангенс‑функция.
  • FPATAN — Частичная арктангенс‑функция.
  • F2XM1 — 2^x 1.
  • FYL2X — y log2(x).
  • FYL2XP1 — y log2(x + 1).

Загрузка констант x87 FPU

Управление x87 FPU

  • FINCSTP — Инкремент указателя стека FPU.
  • FDECSTP — Декремент указателя стека FPU.
  • FFREE — Освободить регистр FPU.
  • FINIT / FNINIT — Инициализация FPU.
  • FCLEX / FNCLEX — Очистка флагов исключений FPU.
  • FSTCW / FNSTCW — Сохранить управляющее слово FPU.
  • FLDCW — Загрузить управляющее слово FPU.
  • FSTENV / FNSTENV — Сохранить окружение FPU.
  • FLDENV — Загрузить окружение FPU.
  • FSAVE / FNSAVE — Сохранить состояние FPU.
  • FRSTOR — Восстановить состояние FPU.
  • FSTSW / FNSTSW — Сохранить статусное слово FPU.
  • WAIT / FWAIT — Ожидание готовности FPU.
  • FNOP — Пустая операция FPU.

Управление состоянием x87 FPU и SIMD

  • FXSAVE — Сохранить состояние x87 FPU и SIMD.
  • FXRSTOR — Восстановить состояние x87 FPU и SIMD.

Обзор MMX

  • SIMDмодель вычислений для 64битных упакованных целых.
  • Восемь 64битных регистров данных MMX.
  • Три новых типа упакованных данных:
    • 64битные упакованные байтовые целые (со знаком и без)
    • 64битные упакованные словные целые (со знаком и без)
    • 64битные упакованные двойные слова (со знаком и без)
  • Состояние MMX отображается на состояние x87 FPU; при переходах к инструкциям x87 FPU требуется осторожность во избежание неконсистентности результатов.

Передача данных MMX

  • MOVD / MOVQ — Перемещение двойного/квадрослова между MMX и памятью/регистрами.

Преобразования MMX

  • PACKSSWB / PACKSSDW — Упаковка слов/двойных слов в байты со знаковым насыщением.
  • PACKUSWB — Упаковка слов в байты с беззнаковым насыщением.
  • PUNPCKHBW / PUNPCKHWD / PUNPCKHDQ — Распаковка старших байтов/слов/двойных слов.
  • PUNPCKLBW / PUNPCKLWD / PUNPCKLDQ — Распаковка младших байтов/слов/двойных слов.

Упакованная арифметика MMX

  • PADDB / PADDW / PADDD — Сложение упакованных байтов/слов/двойных слов.
  • PADDSB / PADDSW — Сложение упакованных знаковых байтов/слов со знаковым насыщением.
  • PADDUSB / PADDUSW — Сложение упакованных беззнаковых байтов/слов с беззнаковым насыщением.
  • PSUBB / PSUBW / PSUBD — Вычитание упакованных байтов/слов/двойных слов.
  • PSUBSB / PSUBSW — Вычитание упакованных знаковых байтов/слов со знаковым насыщением.
  • PSUBUSB / PSUBUSW — Вычитание упакованных беззнаковых байтов/слов с беззнаковым насыщением.
  • PMULHW — Умножение упакованных знаковых слов с сохранением старшей части результата.
  • PMULLW — Умножение упакованных знаковых слов с сохранением младшей части.
  • PMADDWD — Умножение и сложение упакованных слов.

Сравнения MMX

  • PCMPEQB / PCMPEQW / PCMPEQD — Сравнение упакованных байтов/слов/двойных слов на равенство.
  • PCMPGTB / PCMPGTW / PCMPGTD — Сравнение упакованных знаковых байтов/слов/двойных слов «больше чем».

Логика MMX

  • PAND — Побитовое И.
  • PANDN — Побитовое И‑НЕ.
  • POR — Побитовое ИЛИ.
  • PXOR — Побитовое исключающее ИЛИ.

Сдвиги и ротации MMX

  • PSLLW / PSLLD / PSLLQ — Логический сдвиг упакованных слов/двойных слов/квадрослов влево.
  • PSRLW / PSRLD / PSRLQ — Логический сдвиг упакованных слов/двойных слов/квадрослов вправо.
  • PSRAW / PSRAD — Арифметический сдвиг упакованных слов/двойных слов вправо.

Управление состоянием MMX

  • EMMS — Очистить состояние MMX.

Обзор SSE

  • Расширяет SIMDмодель, добавляя операции над упакованными и скалярными числами одиночной точности в 128битных регистрах.
  • Шестнадцать (в 32битном режиме — восемь) 128битных регистров XMM.
  • 128битные инструкции для упакованных и скалярных чисел одиночной точности.
  • Расширения MMXинструкций новыми операциями над упакованными целыми в регистрах MMX.
  • Явная предвыборка данных, управление кэшируемостью данных и упорядочиванием операций записи.

Передача данных SSE

  • MOVAPS — Перемещение четырёх выровненных упакованных чисел одиночной точности между XMM и памятью.
  • MOVUPS — Перемещение четырёх невыровненных упакованных чисел одиночной точности между XMM и памятью.
  • MOVHPS — Перемещение двух чисел одиночной точности из/в старшую квадрословную часть XMM и память.
  • MOVHLPS — Перемещение двух чисел из старшей части одного XMM в младшую часть другого XMM.
  • MOVLPS — Перемещение двух чисел одиночной точности из/в младшую квадрословную часть XMM и память.
  • MOVLHPS — Перемещение двух чисел из младшей части одного XMM в старшую часть другого XMM.
  • MOVMSKPS — Извлечь маску знаков из четырёх упакованных чисел одиночной точности.
  • MOVSS — Перемещение скалярного числа одиночной точности между XMM и памятью.

Арифметика SSE (FP32)

  • ADDPS — Сложение упакованных чисел одиночной точности.
  • ADDSS — Сложение скалярных чисел одиночной точности.
  • SUBPS — Вычитание упакованных чисел одиночной точности.
  • SUBSS — Вычитание скалярных чисел одиночной точности.
  • MULPS — Умножение упакованных чисел одиночной точности.
  • MULSS — Умножение скалярных чисел одиночной точности.
  • DIVPS — Деление упакованных чисел одиночной точности.
  • DIVSS — Деление скалярных чисел одиночной точности.
  • RCPPS — Обратные значения (1/x) для упакованных чисел.
  • RCPSS — Обратное значение для скаляра.
  • SQRTPS — Квадратные корни упакованных чисел.
  • SQRTSS — Квадратный корень скалярного числа.
  • RSQRTPS — Обратные квадратные корни упакованных чисел.
  • RSQRTSS — Обратный квадратный корень скаляра.
  • MAXPS — Максимумы упакованных чисел одиночной точности.
  • MAXSS — Максимум скаляра одиночной точности.
  • MINPS — Минимумы упакованных чисел одиночной точности.
  • MINSS — Минимум скаляра одиночной точности.

Сравнения SSE

  • CMPPS — Сравнение упакованных чисел одиночной точности.
  • CMPSS — Сравнение скалярных чисел одиночной точности.
  • COMISS — Упорядоченное сравнение скаляров и установка флагов rflags.
  • UCOMISS — Неупорядоченное сравнение скаляров и установка флагов rflags.

Логика SSE

  • ANDPS — Побитовое И упакованных чисел одиночной точности.
  • ANDNPS — Побитовое И‑НЕ упакованных чисел.
  • ORPS — Побитовое ИЛИ упакованных чисел.
  • XORPS — Побитовое XOR упакованных чисел.

Перестановки и распаковка SSE

  • SHUFPS — Перестановка значений в упакованных операндах.
  • UNPCKHPS — Распаковка и чередование двух старших значений из двух операндов.
  • UNPCKLPS — Распаковка и чередование двух младших значений из двух операндов.

Преобразования SSE

  • CVTPI2PS — Преобразование упакованных двойных слов в упакованные числа одиночной точности.
  • CVTSI2SS — Преобразование двойного слова в скаляр одиночной точности.
  • CVTPS2PI — Преобразование упакованных чисел одиночной точности в упакованные двойные слова.
  • CVTTPS2PIТо же с усечением.
  • CVTSS2SI — Преобразование скаляра одиночной точности в двойное слово.
  • CVTTSS2SIТо же с усечением.

Управление MXCSR (SSE)

  • LDMXCSR — Загрузка регистра MXCSR.
  • STMXCSR — Сохранение состояния MXCSR.

SSE: 64битные целые (расширения MMX)

  • PAVGB / PAVGW — Среднее значение упакованных беззнаковых байтов.
  • PEXTRW — Извлечь слово.
  • PINSRW — Вставить слово.
  • PMAXUB — Максимум упакованных беззнаковых байтов.
  • PMAXSW — Максимум упакованных знаковых слов.
  • PMINUB — Минимум упакованных беззнаковых байтов.
  • PMINSW — Минимум упакованных знаковых слов.
  • PMOVMSKB — Маска байтов (перенос знаков в маску).
  • PMULHUW — Умножение упакованных беззнаковых слов, сохранение старшей части.
  • PSADBW — Сумма абсолютных разностей.
  • PSHUFW — Перестановка слов в регистре MMX.

SSE: кэшируемость, предвыборка и упорядочивание

  • MASKMOVQ — Нетемпоральная запись выбранных байтов из MMX в память.
  • MOVNTQ — Нетемпоральная запись квадрослова из MMX в память.
  • MOVNTPS — Нетемпоральная запись четырёх упакованных чисел одиночной точности из XMM в память.
  • PREFETCHh — Загрузка 32 и более байт из памяти в выбранный уровень кэша.
  • SFENCE — Сериализация операций записи.

Обзор SSE2

  • Упакованные и скалярные 128битные числа двойной точности.
  • Дополнительные инструкции для 64 и 128битных упакованных байтов/слов/двойных слов/квадрослов.
  • 128битные версии целочисленных инструкций из MMX и SSE.
  • Дополнительные инструкции управления кэшируемостью и упорядочиванием инструкций.

SSE2: перемещение данных FP64

  • MOVAPD — Перемещение двух выровненных упакованных чисел двойной точности между XMM и памятью.
  • MOVUPD — Перемещение двух невыровненных упакованных чисел двойной точности между XMM и памятью.
  • MOVHPD — Перемещение старшего элемента двойной точности из/в старшую часть XMM и память.
  • MOVLPD — Перемещение младшего элемента двойной точности из/в младшую часть XMM и память.
  • MOVMSKPD — Извлечь маску знаков из двух упакованных чисел двойной точности.
  • MOVSD — Перемещение скалярного числа двойной точности между XMM и памятью.

SSE2: арифметика FP64

  • ADDPD — Сложение упакованных чисел двойной точности.
  • ADDSD — Сложение скалярных чисел двойной точности.
  • SUBPD — Вычитание упакованных чисел двойной точности.
  • SUBSD — Вычитание скалярных чисел двойной точности.
  • MULPD — Умножение упакованных чисел двойной точности.
  • MULSD — Умножение скалярных чисел двойной точности.
  • DIVPD — Деление упакованных чисел двойной точности.
  • DIVSD — Деление скалярных чисел двойной точности.
  • SQRTPD — Квадратные корни упакованных чисел двойной точности.
  • SQRTSD — Квадратный корень скалярного числа двойной точности.
  • MAXPD — Максимумы упакованных чисел двойной точности.
  • MAXSD — Максимум скаляра двойной точности.
  • MINPD — Минимумы упакованных чисел двойной точности.
  • MINSD — Минимум скаляра двойной точности.

SSE2: логические операции FP64

  • ANDPD — Побитовое И упакованных чисел двойной точности.
  • ANDNPD — Побитовое И‑НЕ упакованных чисел двойной точности.
  • ORPD — Побитовое ИЛИ упакованных чисел двойной точности.
  • XORPD — Побитовое XOR упакованных чисел двойной точности.

SSE2: сравнения FP64

  • CMPPD — Сравнение упакованных чисел двойной точности.
  • CMPSD — Сравнение скаляров двойной точности.
  • COMISD — Упорядоченное сравнение скаляров двойной точности с установкой rflags.
  • UCOMISD — Неупорядоченное сравнение скаляров двойной точности с установкой rflags.

SSE2: перестановки и распаковка FP64

  • SHUFPD — Перестановка значений в упакованных операндах двойной точности.
  • UNPCKHPD — Распаковка и чередование старших значений из двух операндов.
  • UNPCKLPD — Распаковка и чередование младших значений из двух операндов.

SSE2: преобразования

  • CVTPD2PI — Преобразование упакованных чисел двойной точности в упакованные двойные слова.
  • CVTTPD2PIТо же с усечением.
  • CVTPI2PD — Преобразование упакованных двойных слов в упакованные числа двойной точности.
  • CVTPD2DQ — Преобразование упакованных чисел двойной точности в упакованные двойные слова.
  • CVTTPD2DQТо же с усечением.
  • CVTDQ2PD — Преобразование упакованных двойных слов в упакованные числа двойной точности.
  • CVTPS2PD — Преобразование упакованных чисел одиночной в двойную точность.
  • CVTPD2PS — Преобразование упакованных чисел двойной в одиночную точность.
  • CVTSS2SD — Преобразование скаляра одиночной в двойную точность.
  • CVTSD2SS — Преобразование скаляра двойной в одиночную точность.
  • CVTSD2SI — Преобразование скаляра двойной точности в двойное слово.
  • CVTTSD2SIТо же с усечением.
  • CVTSI2SD — Преобразование двойного слова в скаляр двойной точности.

SSE2: FP32 (расширения SSE)

  • CVTDQ2PS — Преобразование упакованных двойных слов в упакованные числа одиночной точности.
  • CVTPS2DQ — Преобразование упакованных чисел одиночной точности в упакованные двойные слова.
  • CVTTPS2DQТо же с усечением.

SSE2: целочисленные инструкции

  • MOVDQA — Перемещение выровненного двойного квадрослова.
  • MOVDQU — Перемещение невыровненного двойного квадрослова.
  • MOVQ2DQ — Перемещение квадрослова из MMX в XMM.
  • MOVDQ2Q — Перемещение квадрослова из XMM в MMX.
  • PMULUDQ — Умножение упакованных беззнаковых двойных слов.
  • PADDQ — Сложение упакованных квадрослов.
  • PSUBQ — Вычитание упакованных квадрослов.
  • PSHUFLW — Перестановка младших слов.
  • PSHUFHW — Перестановка старших слов.
  • PSHUFD — Перестановка двойных слов.
  • PSLLDQ — Логический сдвиг двойного квадрослова влево.
  • PSRLDQ — Логический сдвиг двойного квадрослова вправо.
  • PUNPCKHQDQ — Распаковка старших квадрослов.
  • PUNPCKLQDQ — Распаковка младших квадрослов.

SSE2: кэшируемость и упорядочивание

  • CLFLUSHСброс линии кэша.
  • LFENCE — Сериализация операций чтения.
  • MFENCE — Сериализация операций чтения и записи.
  • PAUSE — Улучшает производительность «циклов активного ожидания» (spinwait).
  • MASKMOVDQU — Нетемпоральная запись выбранных байтов из XMM в память.
  • MOVNTPD — Нетемпоральная запись двух упакованных чисел двойной точности из XMM в память.
  • MOVNTDQ — Нетемпоральная запись двойного квадрослова из XMM в память.
  • MOVNTI — Нетемпоральная запись двойного слова из регистра общего назначения в память.

Ссылки

Таблицы инструкций

Примеры

Утилиты