asm-declaración brinda la capacidad de incrustar código fuente en lenguaje ensamblador dentro de un programa C++. Esta declaración se admite condicionalmente y está definida por la implementación, lo que significa que puede no estar presente e, incluso cuando la proporciona la implementación, no tiene un significado fijo.

Sintaxis

asm (cadena_literal);

Explicación

los cadena_literal es típicamente un programa corto escrito en lenguaje ensamblador, que se ejecuta cada vez que se ejecuta esta declaración. Los diferentes compiladores de C++ tienen reglas que varían enormemente para las declaraciones de asm y diferentes convenciones para la interacción con el código de C++ circundante.

Como otras declaraciones de bloque, esta declaración puede aparecer dentro de un bloque (un cuerpo de función u otra declaración compuesta) y, como todas las demás declaraciones, esta declaración también puede aparecer fuera de un bloque.

Ejemplos

Demuestra dos tipos de sintaxis de ensamblaje en línea que ofrece el compilador GCC. Este programa solo funcionará correctamente en la plataforma x86_64 bajo Linux.

#includeextern"C"intfunc();// the definition of func is written in assembly language// raw string literal could be very usefulasm(R"(
.globl func
    .type func, @function
    func:
    .cfi_startproc
    movl $7, %eax
    ret
    .cfi_endproc
)");intmain()int n =func();// extended inline assemblyasm("leal (%0,%0,4),%0":"=r"(n):"0"(n));
    std::cout <<"7*5 = "<< n << std::endl;// flush is intentional// standard inline assemblyasm("movq $60, %raxnt"// the exit syscall number on Linux"movq $2,  %rdint"// this program returns 2"syscall");

Producción:

7*5=35

enlaces externos