Compartir a través de


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

Consulte también

Uso de C o C++ en bloques __asm