Utilisation d'opérateurs dans les blocs de __asm
Spécifique à Microsoft
Un bloc d' __asm ne pouvez pas utiliser les opérateurs spécifiques C ou C++, tels que l'opérateur d' << .Toutefois, opérateurs partagés par C et MASM, tel que l'opérateur *, sont interprètes comme opérateurs en langage assembleur.Par exemple, en dehors d'un bloc d' __asm , des crochets ([]) sont interprètes comme indices de tableau englobants, que C met à l'échelle automatique à la taille d'un élément du tableau.À l'intérieur d'un bloc d' __asm , elles sont vues en tant qu'opérateur index MASM, ce qui retourne un décalage d'octet ne sont pas mises à l'échelle d'un objet de données ou nom (pas seulement un tableau).Le code suivant illustre 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, mais la deuxième est.Notez que vous pouvez utiliser l'opérateur de TYPE pour effectuer la 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 */
détail de FIN Microsoft