Formát instrukce MASM
Syntaxe
Pokyny jsou napsány ve zdrojovém kódu podle této syntaxe:
Informace o definicích instrukcí, možnostech a kódování naleznete v příručkách k programování výrobce procesoru. Některé pokyny a možnosti instrukcí nemusí být podporovány nástrojem Microsoft Macro Assembler.
Předpona
Můžete předponovat některé instrukce klíčovými slovy, která nastavují možnosti kódování instrukce. Klíčová REP
slova , , REPNE
REPE
REPZ
a REPNZ
klíčová slova se používají s řetězcovými instrukcemi k provádění memcpy
nebo strlen
druhů operací v jedné instrukce. Klíčové LOCK
slovo provádí určité operace s operandy paměti atomické. Můžete ho kombinovat s XACQUIRE
klíčovými slovy a XRELEASE
provádět elision hardwaru (HLE) u podporovaných procesorů, což v některých případech umožňuje větší transakční paralelismus.
Zbývající předpony určují, jak jsou instrukce AVX kódovány. Instrukce AVX jsou kódovány pomocí VEX
předpony, která se zobrazí před opcode. Používá místo určitých bajtů instrukční předpony a opcode lead-in bajty. Mnoho instrukcí AVX jsou také instrukce AVX-512, které jsou kódovány pomocí EVEX
předpony, která podporuje více možností. MASM se snaží kódovat instrukce co nejkomprimněji, ale tato klíčová slova umožňují větší kontrolu nad kódováním, které se má použít s konkrétní instrukcí. Používají se také k vynucení generování instrukčních formulářů AVX, které byly zavedeny po odpovídající instrukci AVX-512. vex vpdpbusd
Například určuje formát VPDPBUSD
AVX-VNNI pokynů místo formuláře AVX512-VNNI. Když se zobrazí instrukce AVX bez explicitního klíčového slova předpony, zvolené kódování závisí na aktuálním nastavení kódování AVX. Tato direktiva OPTION AVXENCODING
umožňuje toto nastavení změnit.
V VEX2
sadě Visual Studio 2019 verze 16.7 a EVEX
novější jsou k dispozici možnosti a VEX3
VEX
možnosti.
Klíčové slovo | Využití |
---|---|
REP |
Opakujte operaci řetězce počtem v jazyce (E)CX. |
REPE REPZ |
Opakujte operaci řetězce, zatímco porovnání je stejné, omezené počtem v jazyce (E)CX. |
REPNE REPNZ |
Opakujte operaci řetězce, zatímco porovnání není rovno, omezené počtem v jazyce (E)CX. |
LOCK |
Operaci proveďte atomicky na operandu paměti. |
XACQUIRE |
Zahajte transakci HLE, která se nejčastěji používá s předponou LOCK . |
XRELEASE |
Dokončete transakci HLE, která se nejčastěji používá s LOCK předponou. |
VEX |
Kódujte instrukci AVX pomocí předpony VEX . |
VEX2 |
Kódujte instrukci AVX pomocí předpony 2 bajtů VEX . |
VEX3 |
Kódujte instrukci AVX pomocí předpony 3 bajtů VEX . |
EVEX |
Kódujte instrukci AVX pomocí předpony EVEX . |
Mnemonický
Mnemonic identifikuje konkrétní instrukce, která určuje předpony a operandové vzory, které jsou povoleny.
Seznam operandů
Většina instrukcí používá seznam operandů k určení explicitního zdrojového a cílového operandu pro instrukce. Seznam operandů může obsahovat odkazy na paměť, registry a konstantní hodnoty. Každá instrukce umožňuje, aby se na každé pozici v seznamu operandů zobrazovaly pouze určité typy operandů. MOVS
S výjimkou a CMPS
pokynů může být odkazem na paměť pouze jeden z operandů. Všechny ostatní operandy musí být registrovat odkazy nebo konstanty.
Možnosti AVX-512
Některé pokyny AVX-512 umožňují zadat další možnosti. Tyto možnosti jsou: maskování, nulové maskování, vložené vysílání, vložené zaokrouhlování a potlačení výjimek.
Maskování umožňuje použití operace pouze u vybraných prvků vektoru. Tato možnost je řízena umístěním registrace masky za {k1}
{k7}
cílový operand. Pokud následuje {z}
registr masky, jsou všechny nevybrali prvky cíle nastaveny na nulu. Tato alternativa se označuje jako nulové maskování.
Embedded Broadcast umožňuje použití skalární hodnoty v paměti pro všechny prvky vektoru. Tato možnost je povolena přidáním velikosti prvku a klíčového slova BCST
do operandu paměti, který je podobný použití PTR
pro normální odkazy na paměť.
Vložené zaokrouhlování řídí režim zaokrouhlování pro jednotlivé instrukce s plovoucí desetinou čárkou, aniž by bylo nutné nastavit a resetovat globální režim zaokrouhlování. Povolí se podle pokynů s režimem zaokrouhlování uzavřeným ve složených závorkách. Pokud je tato možnost povolená, potlačí také všechny výjimky pouze pro tuto instrukci. Instrukce s plovoucí desetinou čárkou, které se nezaokrouhlují, můžou také potlačit všechny výjimky pomocí podobné možnosti.
; 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
Režimy zaokrouhlování
Režim | Účinnost |
---|---|
rn-sae |
Zaokrouhlení na nejbližší, shodné vazby na sudé, potlačení všech výjimek |
rz-sae |
Zaokrouhlení směrem k nule, potlačí všechny výjimky. |
rd-sae |
Zaokrouhlení dolů (směrem k zápornému nekonečnu) potlačí všechny výjimky. |
ru-sae |
Zaokrouhlit nahoru (směrem k kladnému nekonečnu), potlačit všechny výjimky. |
sae |
Potlačit všechny výjimky (není potřeba zaokrouhlovat). |
Viz také
Microsoft Macro Assembler – referenční dokumentace
Příručky pro programování výrobce procesoru