Format d’instruction MASM
Syntaxe
Les instructions sont écrites dans le code source en fonction de cette syntaxe :
préfixeopérande-list mnemonique
Pour plus d’informations sur les définitions d’instructions, les options et l’encodage, consultez les manuels de programmation du fabricant du processeur. Certaines instructions et options d’instruction peuvent ne pas être prises en charge par l’assembleur de macros Microsoft.
Préfixe
Vous pouvez préfixer certaines instructions avec des mots clés qui définissent des options pour la façon dont l’instruction est encodée. Les REP
mots clés et les REPNE
REPNZ
REPZ
instructions REPE
de chaîne sont utilisés avec des instructions de chaîne pour effectuer memcpy
ou strlen
des types d’opérations dans une seule instruction. Le LOCK
mot clé effectue certaines opérations sur les opérandes de mémoire atomiques. Vous pouvez la combiner avec les XACQUIRE
mots clés et XRELEASE
effectuer des opérations HLE (Hardware Lock Elision) sur les processeurs pris en charge, ce qui permet un parallélisme transactionnel plus important dans certains cas.
Les préfixes restants contrôlent la façon dont les instructions AVX sont encodées. Les instructions AVX sont encodées à l’aide d’un VEX
préfixe, qui s’affiche avant l’opcode. Il prend la place de certains préfixes d’instructions d’octets et d’octets de prospects opcode. De nombreuses instructions AVX sont également des instructions AVX-512, qui sont encodées à l’aide d’un EVEX
préfixe qui prend en charge d’autres options. MASM tente d’encoder des instructions aussi compactement que possible, mais ces mots clés permettent davantage de contrôle sur l’encodage à utiliser avec une instruction particulière. Ils sont également utilisés pour forcer la génération de formulaires d’instruction AVX qui ont été introduits après l’instruction AVX-512 correspondante. Par exemple, vex vpdpbusd
spécifie le formulaire AVX-VNNI des VPDPBUSD
instructions plutôt que le formulaire AVX512-VNNI. Lorsqu’une instruction AVX s’affiche sans mot clé de préfixe explicite, l’encodage choisi dépend du paramètre d’encodage AVX actuel. La OPTION AVXENCODING
directive vous permet de modifier ce paramètre.
Les VEX2
options , et VEX
EVEX
les options VEX3
sont disponibles dans Visual Studio 2019 version 16.7 et ultérieures.
Mot clé | Utilisation |
---|---|
REP |
Répétez l’opération de chaîne par le nombre dans (E)CX. |
REPE REPZ |
Répétez l’opération de chaîne pendant que la comparaison est égale, limitée par le nombre dans (E)CX. |
REPNE REPNZ |
Répétez l’opération de chaîne pendant que la comparaison n’est pas égale, limitée par le nombre dans (E)CX. |
LOCK |
Effectuez l’opération atomiquement sur un opérande de mémoire. |
XACQUIRE |
Commencez une transaction HLE, souvent utilisée avec LOCK un préfixe. |
XRELEASE |
Effectuez une transaction HLE, souvent utilisée avec LOCK un préfixe. |
VEX |
Encoder une instruction AVX à l’aide d’un VEX préfixe. |
VEX2 |
Encoder une instruction AVX à l’aide d’un préfixe de 2 octets VEX . |
VEX3 |
Encoder une instruction AVX à l’aide d’un préfixe de 3 octets VEX . |
EVEX |
Encoder une instruction AVX à l’aide d’un EVEX préfixe. |
Mnémotechnique
Le mnémonique identifie une instruction particulière, qui détermine les préfixes et les modèles d’opérande autorisés.
Liste d’opérandes
La plupart des instructions utilisent une liste d’opérandes pour spécifier les opérandes de source et de destination explicites dans l’instruction. La liste d’opérandes peut contenir des références mémoire, des registres et des valeurs constantes. Chaque instruction permet uniquement à certains types d’opérandes d’apparaître à chaque position dans la liste d’opérandes. À l’exception MOVS
des instructions et CMPS
des instructions, un seul des opérandes peut être une référence mémoire ; tous les autres opérandes doivent être des références ou des constantes.
Options AVX-512
Certaines instructions AVX-512 permettent de spécifier d’autres options. Ces options sont les suivantes : masquage, masquage zéro, diffusion incorporée, arrondi incorporée et suppression des exceptions.
Le masquage permet d’appliquer une opération uniquement aux éléments sélectionnés d’un vecteur. Cette option est contrôlée en plaçant un registre de masque à partir de {k1}
l’opérande {k7}
de destination. Si le registre de masque est suivi {z}
, tous les éléments non sélectionnés de la destination sont définis sur zéro. Cette alternative est appelée masquage zéro.
La diffusion incorporée permet d’appliquer une valeur scalaire en mémoire à tous les éléments d’un vecteur. Cette option est activée en ajoutant la taille de l’élément et le mot clé BCST
à l’opérande de mémoire, ce qui est similaire à l’utilisation des PTR
références de mémoire normales.
L’arrondi incorporé contrôle le mode d’arrondi pour une instruction à virgule flottante individuelle, sans avoir à définir et réinitialiser le mode global d’arrondi. Elle est activée en suivant l’instruction avec le mode arrondi placé entre accolades. Lorsqu’elle est activée, elle supprime également toutes les exceptions pour cette instruction uniquement. Les instructions à virgule flottante qui ne sont pas arrondies peuvent également supprimer toutes les exceptions à l’aide d’une option similaire.
; 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
Modes d’arrondi
Mode | Effet |
---|---|
rn-sae |
Arrondi à la plus proche, les liens vers même, suppriment toutes les exceptions. |
rz-sae |
Arrondi à zéro, supprime toutes les exceptions. |
rd-sae |
Arrondir (vers l’infini négatif), supprimer toutes les exceptions. |
ru-sae |
Arrondir (vers l’infini positif), supprimer toutes les exceptions. |
sae |
Supprimez toutes les exceptions (sans arrondi nécessaire). |
Voir aussi
Informations de référence sur Microsoft Macro Assembler
Manuels de programmation du fabricant de processeurs