Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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