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