Формат инструкции MASM
Синтаксис
Инструкции написаны в исходном коде в соответствии с этим синтаксисом:
Дополнительные сведения об определениях инструкций, параметрах и кодировке см. в руководствах по программированию изготовителя процессора. Некоторые инструкции и параметры инструкций могут не поддерживаться сборщиком макросов Майкрософт.
Префикс
Можно префиксировать некоторые инструкции с помощью ключевое слово, которые задают параметры кодирования инструкции. Для REP
REPZ
REPE
выполнения или strlen
выполнения memcpy
операций в одной инструкции используются ключевое слово и REPNE
REPNZ
ключевое слово. Ключевое слово 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
параметры VEX
VEX3
доступны в 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 определяет определенную инструкцию, которая определяет префиксы и шаблоны операнда, которые разрешены.
Список Операндов
Большинство инструкций используют список операндов, чтобы указать явные исходные и конечные операнды инструкции. Список операндов может содержать ссылки на память, регистры и константы. Каждая инструкция позволяет отображать только определенные типы операндов на каждой позиции в списке операндов. MOVS
CMPS
Кроме инструкций, только один из операндов может быть ссылкой на память; все остальные операнды должны быть регистрировать ссылки или константы.
Параметры 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
Руководства по программированию для изготовителей процессоров
Кері байланыс
https://aka.ms/ContentUserFeedback.
Жақында қолжетімді болады: 2024 жыл бойы біз GitHub Issues жүйесін мазмұнға арналған кері байланыс механизмі ретінде біртіндеп қолданыстан шығарамыз және оны жаңа кері байланыс жүйесімен ауыстырамыз. Қосымша ақпаратты мұнда қараңыз:Жіберу және пікірді көру