Partager via


Utilisation d'opérateurs dans les blocs __asm

Section spécifique à Microsoft

Un bloc __asm ne peut pas utiliser d'opérateurs C ou C++ spécifiques, tels que l'opérateur <<. Toutefois, les opérateurs partagés par C et MASM, notamment l'opérateur *, sont interprétés comme opérateurs de langage assembleur. Par exemple, en dehors d'un bloc __asm, les crochets ([ ]) sont interprétés comme indices de tableau englobants, que C ajuste automatiquement à la taille d'un élément du tableau. Au sein d'un bloc __asm, ils s'affichent en tant qu'opérateur index MASM, qui produit un offset d'octet non mis à l'échelle à partir d'un objet de données ou d'une étiquette (pas uniquement d'un tableau). Le code suivant illustre l'utilisation la différence :

int array[10];

__asm mov array[6], bx ;  Store BX at array+6 (not scaled)

array[6] = 0;         /* Store 0 at array+24 (scaled) */

La première référence à array n'est pas mise à l'échelle, la seconde oui. Notez que vous pouvez utiliser l'opérateur TYPE pour effectuer une mise à l'échelle basée sur une constante. Par exemple, les instructions suivantes sont équivalentes :

__asm mov array[6 * TYPE int], 0 ; Store 0 at array + 24

array[6] = 0;                   /* Store 0 at array + 24 */

FIN de la section spécifique à Microsoft

Voir aussi

Référence

Utilisation de C ou C++ dans les blocs __asm