Partager via


__asm

Spécifique à Microsoft

Le mot clé d' __asm appelle l'assembly inline et peut être autorisé à chaque fois que le c ou l'instruction C++ est conforme.Il ne peut pas apparaître seul.Il doit être suivi par une instruction assembly, un groupe d'instruction placée entre accolades, ou, pour le moins, une paire d'accolades vide.Le terme « bloc d'__asm  » fait référence ici à une instruction ou groupe d'instructions, si accolades.

[!REMARQUE]

La prise en charge de Visual C++ du mot clé C++ standard asm est limité au fait que le compilateur ne génère pas d'erreur sur le mot clé.Toutefois, un bloc d' asm ne génère pas de code explicite.utilisation __asmau lieu d' asm.

syntaxe :

__asm instruction assembly [; ]

__asm assembly-instruction-liste {} [; ]

Grammaire

  • __asmassembly-instruction;opt

    __asm {assembly-instruction-list};opt

  • assembly-instruction-liste:
    assembly-instruction;opt

    assembly-instruction;assembly-instruction-list;opt

Si utilisé sans accolades, le mot clé d' __asm signifie que le reste de la ligne est une instruction en langage assembleur.En cas de utilisation avec les accolades, cela signifie que chaque ligne entre les accolades est une instruction en langage assembleur.Pour compatibilité avec les versions antérieures, _asm est un synonyme de __asm.

Étant donné que le mot clé d' __asm est un séparateur d'instruction, vous pouvez placer des instructions assembleur sur la même ligne.

avant Visual C++ 2005, l'instruction

__asm int 3

n'a pas causé code natif et générer une fois compilé avec /clr; le compilateur a traduit les instructions à une instruction de saut CLR.

__asm int 3 a maintenant associée à la génération de code natif de la fonction.Si vous souhaitez une fonction pour provoquer un point d'arrêt dans votre code et si vous souhaitez que cette fonction compilée en langage MSIL, utilisez __debugbreak.

Exemple

Le fragment de code suivant est un bloc simple d' __asm entre accolades :

__asm {
   mov al, 2
   mov dx, 0xD007
   out dx, al
}

Sinon, vous pouvez mettre __asm devant chaque instruction assembly :

__asm mov al, 2   __asm mov dx, 0xD007   __asm out dx, al

Étant donné que le mot clé d' __asm est un séparateur d'instruction, vous pouvez également placer des instructions assembleur sur la même ligne :

__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al

Les trois exemples génère le même code, mais le premier style (plaçant le bloc d' __asm accolades) présente quelques avantages.Le code assembleur clairement séparé d'accolades de le code C ou C++ et évitent la répétition inutile de le mot clé d' __asm .L'accolade peut également empêcher les ambiguïtés.Si vous souhaitez placer le c ou C++ instruction sur la même personne visualisant comme un bloc d' __asm , vous devez placer le bloc accolades.Sans accolades, le compilateur ne peut pas indiquer où le code assembleur s'arrête et des instructions C ou C++ démarrer.Enfin, car le texte entre accolades a le même format que le texte ordinaire MASM, vous pouvez facilement couper et coller le texte de fichiers sources MASM.

Contrairement à l'accolade en C et C++, l'accolade plaçant un bloc d' __asm n'affecte pas la portée variable.vous pouvez également imbriquer des blocs d' __asm ; l'imbrication n'affecte pas la portée variable.

détail de FIN Microsoft

Voir aussi

Référence

Mots clés C++

Assembleur inline