Utilisation d'opérateurs dans les blocs __asm

Section spécifique à Microsoft

Un __asm bloc ne peut pas utiliser des opérateurs spécifiques C ou C++, tels que l’opérateur << . Toutefois, les opérateurs partagés par C et MASM, tels que l’opérateur *, sont interprétés comme des opérateurs de langage d’assembly. Par exemple, en dehors d’un __asm bloc, les crochets ([ ]) sont interprétés comme des indices de tableau englobants, que C met automatiquement à l’échelle la taille d’un élément dans le 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 obtenir 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

Utilisation de C ou C++ dans les blocs __asm