Бөлісу құралы:


Формат инструкции MASM

Синтаксис

Инструкции написаны в исходном коде в соответствии с этим синтаксисом:

префиксmnemonicoperand-list

Дополнительные сведения об определениях инструкций, параметрах и кодировке см. в руководствах по программированию изготовителя процессора. Некоторые инструкции и параметры инструкций могут не поддерживаться сборщиком макросов Майкрософт.

Префикс

Можно префиксировать некоторые инструкции с помощью ключевое слово, которые задают параметры кодирования инструкции. Для REPREPZREPEвыполнения или strlen выполнения memcpy операций в одной инструкции используются ключевое слово и REPNEREPNZ ключевое слово. Ключевое слово LOCK делает определенные операции с операнды памяти атомарными. Его можно объединить с XACQUIRE ключевое слово XRELEASE для аппаратной блокировки Elision (HLE) на поддерживаемых процессорах, что позволяет повысить параллелизм транзакций в определенных случаях.

Остальные префиксы управляют кодированием инструкций AVX. Инструкции AVX кодируются с помощью VEX префикса, который отображается перед опкодом. Оно занимает место определенных префиксов инструкций байтов и байтов свинца в opcode. Многие инструкции AVX также являются инструкциями AVX-512, которые кодируются с помощью EVEX префикса, поддерживающего дополнительные параметры. MASM пытается кодировать инструкции как можно более компактно, но эти ключевое слово позволяют больше управлять кодировкой, используемой с определенной инструкцией. Они также используются для принудительного создания форм инструкций AVX, которые были представлены после соответствующей инструкции AVX-512. Например, vex vpdpbusd указывает форму AVX-VNNI инструкций VPDPBUSD , а не форму AVX512-VNNI. Если инструкция AVX отображается без явного префикса ключевое слово, выбранная кодировка зависит от текущего параметра кодирования AVX. Директива OPTION AVXENCODING позволяет изменить этот параметр.

Параметры VEX2и EVEX параметры VEXVEX3доступны в Visual Studio 2019 версии 16.7 и более поздних версиях.

Ключевое слово Использование
REP Повторите операцию строки счетчиком в (E)CX.
REPE
REPZ
Повторите операцию строки, пока сравнение равно, ограничено числом в (E)CX.
REPNE
REPNZ
Повторите операцию строки, пока сравнение не равно, ограничено числом в (E)CX.
LOCK Выполните операцию атомарно в операнде памяти.
XACQUIRE Чните транзакцию HLE, чаще всего используемую с LOCK префиксом.
XRELEASE Выполните транзакцию HLE, чаще всего используемую с LOCK префиксом.
VEX Кодирование инструкции AVX с помощью VEX префикса.
VEX2 Кодирование инструкции AVX с помощью префикса 2-байтов VEX .
VEX3 Кодирование инструкции AVX с помощью префикса 3-байтов VEX .
EVEX Кодирование инструкции AVX с помощью EVEX префикса.

Мнемонические

Mnemonic определяет определенную инструкцию, которая определяет префиксы и шаблоны операнда, которые разрешены.

Список Операндов

Большинство инструкций используют список операндов, чтобы указать явные исходные и конечные операнды инструкции. Список операндов может содержать ссылки на память, регистры и константы. Каждая инструкция позволяет отображать только определенные типы операндов на каждой позиции в списке операндов. MOVSCMPS Кроме инструкций, только один из операндов может быть ссылкой на память; все остальные операнды должны быть регистрировать ссылки или константы.

Параметры AVX-512

Некоторые инструкции AVX-512 позволяют указать дополнительные параметры. Эти варианты: маскирование, нулевое маскирование, внедренное широковещательное развертывание, внедренное округление и подавление исключений.

Маскирование позволяет применять операцию только к выбранным элементам вектора. Этот параметр управляется путем размещения регистра маски после {k1}{k7} целевого операнда. Если за регистром {z}маски следует, все не выбранные элементы назначения равны нулю. Эта альтернатива называется нулевой маскировки.

Внедренная трансляция позволяет применять скалярное значение в памяти ко всем элементам вектора. Этот параметр включен путем добавления размера элемента и ключевое слово BCST в операнду памяти, которая аналогична использованию PTR для обычных ссылок на память.

Внедренное округление управляет режимом округления для отдельной инструкции с плавающей запятой, не устанавливая и сбрасывая глобальный режим округления. Он включен, следуя инструкции с режимом округления, заключенным в фигурные скобки. Если этот параметр включен, он также подавляет все исключения только для этой инструкции. Инструкции с плавающей запятой, которые не округляются, также могут подавлять все исключения с помощью аналогичного параметра.

  ; Examples of AVX-512 options
  vaddps xmm1 {k1}, xmm2, xmm3            ; merge-masking
  vsubps ymm0 {k4}{z}, ymm1, ymm2         ; zero-masking
  vmulps zmm0, zmm1, dword bcst scalar    ; embedded broadcast
  vdivps zmm0, zmm1, zmm2 {rz-sae}        ; embedded rounding
  vmaxss xmm1, xmm2, xmm3 {sae}           ; suppress all exceptions

Режимы округления

Режим Действие
rn-sae Округление до ближайшего, связей с даже, подавление всех исключений.
rz-sae Округляется к нулю, подавляя все исключения.
rd-sae Округление (к отрицательной бесконечности), подавление всех исключений.
ru-sae Округление (к положительной бесконечности), подавление всех исключений.
sae Подавление всех исключений (округление не требуется).

См. также

Справочные материалы по ассемблеру Microsoft Macro Assembler
Руководства по программированию для изготовителей процессоров