Compartir a través de


__asm

Específicos de Microsoft

La palabra clave de __asm invoca el ensamblador en línea y puede aparecer en cualquier lugar donde el C. o instrucción de C++ es válido.no puede aparecer en sí mismo.Debe ir seguida de una instrucción de ensamblado, un grupo de instrucciones entre llaves, o, como mínimo, un par vacío de llaves.El término “__asm ” bloque aquí hace referencia a cualquier instrucción o grupo de instrucciones, si entre llaves.

[!NOTA]

La compatibilidad de Visual C++ con la palabra clave estándar de C++ asm se limita al hecho de que el compilador no generará un error en la palabra clave.Sin embargo, un bloque de asm no generará ningún código importante.Uso __asmen lugar de asm.

sintaxis:

__asm ensamblado-instrucción [; ]

__asm { ensamblado-instrucción-lista } [; ]

Gramática

  • __asmassembly-instruction;opt

    __asm {assembly-instruction-list};opt

  • ensamblado-instrucción-lista:
    assembly-instruction;opt

    assembly-instruction;assembly-instruction-list;opt

Si se utiliza sin corchetes, la palabra clave de __asm indica que el resto de la línea es una instrucción de lenguaje de ensamblado.Si se utiliza con llaves, significa que cada línea entre llaves es una instrucción de lenguaje de ensamblado.Por compatibilidad con versiones anteriores, _asm es un sinónimo de __asm.

Puesto que la palabra clave de __asm es un separador de la instrucción, puede colocar las instrucciones de ensamblado en la misma línea.

antes de Visual C++ 2005, la instrucción

__asm int 3

no produjo el código nativo que se generará cuando se compila con /clr; el compilador tradujo la instrucción a una instrucción de la interrupción de CLR.

__asm int 3 ahora da lugar a la generación de código nativo para la función.Si desea que una función para producir un punto de interrupción en el código y desea esa función compilada en MSIL, utilice __debugbreak.

Ejemplo

El fragmento de código siguiente es __asm simple bloqueado que va entre llaves:

__asm {
   mov al, 2
   mov dx, 0xD007
   out dx, al
}

Como alternativa, puede colocar __asm delante de cada instrucción de ensamblado:

__asm mov al, 2   __asm mov dx, 0xD007   __asm out dx, al

Porque la palabra clave de __asm es un separador de la instrucción, también puede colocar las instrucciones de ensamblado en la misma línea:

__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al

Los tres ejemplos producen el mismo código, pero el primer estilo (que agrega __asm bloqueado en llaves) tiene algunas ventajas.El código de ensamblado claramente independiente de los corchetes del código de c o C++ y evita la repetición innecesaria de la palabra clave de __asm .Las llaves también pueden evitar la ambigüedad.Si desea colocar el C. o instrucción de C++ en la misma línea que un bloque de __asm , debe agregar el bloque entre llaves.Sin corchetes, el compilador no puede indicar que el código de ensamblado se detiene y las instrucciones inicia de c o C++.Finalmente, porque el texto entre llaves tiene el mismo formato que el texto normal de MASM, es fácil cortar y pegar el texto de los archivos de código fuente existentes de MASM.

A diferencia de las llaves de C y C++, las llaves que agregan un bloque de __asm no afectan a ámbito variable.Puede anidar los bloques de __asm ; el anidamiento no afecta al ámbito variable.

Específico de Microsoft de FINAL

Vea también

Referencia

Palabras clave de C++

Ensamblador en línea