Uso de operadores en bloques __asm
Específicos de Microsoft
Un bloque __asm
no puede usar los operadores específicos de C o C++, como el operador <<. Sin embargo, los operadores compartidos por C y MASM, como el operador *, se interpretan como operadores de lenguaje de ensamblado. Por ejemplo, fuera de un bloque __asm
, los corchetes ([ ]) se interpretan como subíndices de matriz de cierre, que C ajusta de forma automática al tamaño de un elemento de la matriz. Dentro de un bloque __asm
, se ven como el operador índice de MASM, que produce un desplazamiento de bytes sin ajuste de escala desde cualquier objeto de datos o etiqueta (no solo una matriz). El código siguiente ilustra la diferencia:
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 primera referencia a array
no se ajusta a escala, pero la segunda sí. Observe que puede usar el operador TYPE para lograr el ajuste de escala basándose en una constante. Por ejemplo, las siguientes instrucciones son equivalentes:
__asm mov array[6 * TYPE int], 0 ; Store 0 at array + 24
array[6] = 0; /* Store 0 at array + 24 */
FIN de Específicos de Microsoft