Sdílet prostřednictvím


Formát instrukce MASM

Syntaxe

Pokyny jsou napsány ve zdrojovém kódu podle této syntaxe:

prefix mnemonic operand-list

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á REPslova , , REPNEREPEREPZa 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 VEX2sadě Visual Studio 2019 verze 16.7 a EVEX novější jsou k dispozici možnosti a VEX3VEXmož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