Formato di istruzioni MASM
Sintassi
Le istruzioni vengono scritte nel codice sorgente in base a questa sintassi:
Per informazioni su definizioni di istruzioni, opzioni e codifica, vedere i manuali di programmazione del produttore del processore. Alcune istruzioni e opzioni di istruzioni potrebbero non essere supportate dall'assembler macro Di Microsoft.
Prefisso
È possibile anteporre alcune istruzioni con parole chiave che impostano le opzioni per la codifica dell'istruzione. Le REP
parole chiave , REPNE
REPE
REPZ
, , e REPNZ
vengono usate con istruzioni stringa per eseguire memcpy
o strlen
tipi di operazioni in un'unica istruzione. La LOCK
parola chiave rende atomiche determinate operazioni sugli operandi di memoria. È possibile combinarla con le XACQUIRE
parole chiave e XRELEASE
per eseguire L'Elisione blocco hardware (HLE) sui processori supportati, che consente un maggiore parallelismo transazionale in determinati casi.
I prefissi rimanenti controllano la codifica delle istruzioni AVX. Le istruzioni AVX vengono codificate usando un VEX
prefisso, che viene visualizzato prima del codice operativo. Prende il posto di determinati prefissi di istruzioni byte e byte opcode lead-in. Molte istruzioni AVX sono anche istruzioni AVX-512, codificate usando un EVEX
prefisso che supporta più opzioni. MASM tenta di codificare le istruzioni nel modo più compatto possibile, ma queste parole chiave consentono un maggiore controllo sulla codifica da usare con una particolare istruzione. Vengono usati anche per forzare la generazione di moduli di istruzioni AVX introdotti dopo l'istruzione AVX-512 corrispondente. Ad esempio, vex vpdpbusd
specifica il formato AVX-VNNI delle VPDPBUSD
istruzioni anziché il modulo AVX512-VNNI. Quando viene visualizzata un'istruzione AVX senza una parola chiave con prefisso esplicito, la codifica scelta dipende dall'impostazione di codifica AVX corrente. La OPTION AVXENCODING
direttiva consente di modificare questa impostazione.
Le VEX2
opzioni , VEX3
, VEX
e EVEX
sono disponibili in Visual Studio 2019 versione 16.7 e successive.
Parola chiave | Utilizzo |
---|---|
REP |
Ripetere l'operazione stringa in base al conteggio in (E)CX. |
REPE REPZ |
Ripetere l'operazione stringa mentre il confronto è uguale, limitato dal conteggio in (E)CX. |
REPNE REPNZ |
Ripetere l'operazione stringa mentre il confronto non è uguale, limitato dal conteggio in (E)CX. |
LOCK |
Eseguire l'operazione in modo atomico su un operando di memoria. |
XACQUIRE |
Avviare una transazione HLE, usata più spesso con LOCK il prefisso . |
XRELEASE |
Completare una transazione HLE, usata più spesso con LOCK il prefisso . |
VEX |
Codificare un'istruzione AVX usando un VEX prefisso. |
VEX2 |
Codificare un'istruzione AVX usando un prefisso a 2 byte VEX . |
VEX3 |
Codificare un'istruzione AVX usando un prefisso a 3 byte VEX . |
EVEX |
Codificare un'istruzione AVX usando un EVEX prefisso. |
Mnemonico
Il mnemonico identifica una particolare istruzione, che determina i prefissi e i modelli di operando consentiti.
Elenco operandi
La maggior parte delle istruzioni usa un elenco di operandi per specificare gli operandi di origine e di destinazione espliciti per l'istruzione. L'elenco di operandi può contenere riferimenti alla memoria, registri e valori costanti. Ogni istruzione consente di visualizzare solo determinati tipi di operandi in ogni posizione nell'elenco degli operandi. Ad eccezione delle MOVS
istruzioni e CMPS
, solo uno degli operandi può essere un riferimento alla memoria. Tutti gli altri operandi devono essere riferimenti o costanti di registrazione.
Opzioni AVX-512
Alcune istruzioni AVX-512 consentono di specificare altre opzioni. Queste opzioni sono: mascheramento, mascheramento zero, trasmissione incorporata, arrotondamento incorporato ed eliminazione delle eccezioni.
La maschera consente di applicare un'operazione solo agli elementi selezionati di un vettore. Questa opzione è controllata inserendo un registro maschera da {k1}
a {k7}
dopo l'operando di destinazione. Se il registro maschera è seguito da {z}
, tutti gli elementi non selezionati della destinazione vengono impostati su zero. Questa alternativa è nota come maschera zero.
Embedded Broadcast consente di applicare un valore scalare in memoria a tutti gli elementi di un vettore. Questa opzione è abilitata aggiungendo le dimensioni dell'elemento e la parola chiave BCST
all'operando di memoria, simile all'uso di PTR
per i riferimenti alla memoria normali.
L'arrotondamento incorporato controlla la modalità di arrotondamento per una singola istruzione a virgola mobile, senza dover impostare e reimpostare la modalità di arrotondamento globale. È abilitato seguendo l'istruzione con la modalità di arrotondamento racchiusa tra parentesi graffe. Se abilitata, elimina anche tutte le eccezioni solo per tale istruzione. Le istruzioni a virgola mobile che non arrotondano possono anche eliminare tutte le eccezioni usando un'opzione simile.
; 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
Modalità di arrotondamento
Modalità | Effetto |
---|---|
rn-sae |
Arrotondare al più vicino, legarsi addirittura, eliminare tutte le eccezioni. |
rz-sae |
Arrotondamento verso zero, eliminare tutte le eccezioni. |
rd-sae |
Arrotondamento verso il basso (verso l'infinito negativo), eliminare tutte le eccezioni. |
ru-sae |
Arrotondamento (verso l'infinito positivo), elimina tutte le eccezioni. |
sae |
Elimina tutte le eccezioni (nessun arrotondamento necessario). |
Vedi anche
Riferimento a Microsoft Macro Assembler
Manuali di programmazione del produttore del processore