Espacios de nombres
Variantes
Acciones

Diferencia entre revisiones de «cpp/language/asm»

De cppreference.com
< cpp‎ | language
m (Use {{lc}}. Update links. Various fixes.)
(Traducción completa y actualizada)
 
Línea 1: Línea 1:
{{tr_note}}
+
{{{{|asm}}
{{title|asm declaration}}
+
{{cpp/language/navbar}}
{{cpp/language/navbar}}
+
 +
  
{{tr|Puede ser utilizado para pasar información a la fase final de la compiler.<br/>|It can be used to pass information to the back-end of the compiler.<br/>}}
+
=== Sintaxis ===
{{tr|Esta declaración es condicional, apoyado y define la aplicación, |This declaration is conditionally-supported and implementation defined, }}
+
{{tr|lo que significa que no puede estar presente y, incluso cuando se proporciona por la aplicación, que no tienen un significado fijo|meaning that it may not be present and, even when provided by the implementation, it does not have a fixed meaning}}
+
 
+
===Sintaxis===
+
 
{{sdsc begin}}
 
{{sdsc begin}}
{{sdsc | {{ttb|asm (}} {{spar|string_literal}} {{ttb|)}} }}
+
{{sdsc | {{ttb|asm (}} {{spar|}} {{ttb|)}} }}
 
{{sdsc end}}
 
{{sdsc end}}
  
[[de:cpp/language/asm]]
+
[[en:cpp/language/asm]]
+
de
[[fr:cpp/language/asm]]
+
 
[[it:cpp/language/asm]]
+
[[ja:cpp/language/asm]]
+
 
[[pt:cpp/language/asm]]
+
[[ru:cpp/language/asm]]
+
 
[[zh:cpp/language/asm]]
+
 +
 +
 +
 +
 
 +
 +
//
 +
 +
asm
 +
 +
 +
 +
 +
 +
 +
 +
 +
 
 +
 +
 +
 +
en
 +
 +
:
 +
 +
//
 +
 
 +
 +
asm
 +
 +
 +
 +
 +
 +
 +
 
 +
 +
[://]
 +
[://asm]
 +
[://]
 +
[://]
 +
[://]
 +
[://]
 +
 
 +

Última revisión de 21:09 25 feb 2020

 
 
 
 

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

Contenido

[editar] Sintaxis

asm ( literal-de-cadena ) ;

[editar] Explicación

El literal-de-cadena 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 muy diferentes para las declaraciones 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.

[editar] Ejemplos

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

#include <iostream>
 
extern "C" int func();
// la definición de func está escrita en lenguaje ensamblador
// literal de cadena sin formato podría ser muy útil
asm(R"(
.globl func
    .type func, @function
    func:
    .cfi_startproc
    movl $7, %eax
    ret
    .cfi_endproc
)");
 
int main()
{
    int n = func();
    // ensamblador extendido en línea
    asm ("leal (%0,%0,4),%0"
         : "=r" (n)
         : "0" (n));
    std::cout << "7*5 = " << n << std::endl; // la descarga es intencional
 
    // ensamblador estándar en línea
    asm ("movq $60, %rax\n\t" // el número de salida de syscall en Linux
         "movq $2,  %rdi\n\t" // este programa devuelve 2
         "syscall");
}

Salida:

7*5 = 35

[editar] Enlaces externos