Usamos el compilador g ++ para convertir el código C proporcionado en lenguaje ensamblador. Para ver el código ensamblador generado por el compilador de C, podemos usar la opción “-S” en la línea de comando:
Sintaxis:
$ gcc -S filename.c
Esto hará que gcc ejecute el compilador, generando un archivo de ensamblaje. Supongamos que escribimos un código C y lo almacenamos en un archivo con el nombre «geeks.c».
C
// C code stored in geeks.c file #include <stdio.h> // global string char s[] = "GeeksforGeeks"; // Driver Code int main() { // Declaring variables int a = 2000, b =17; // Printing statement printf("%s %d \n", s, a+b); }
Ejecutando el comando:
$ gcc -S geeks.c
Esto hará que gcc ejecute el compilador, generando un archivo ensamblado geeks.s y no avance más. (Normalmente, invocaría al ensamblador para generar un archivo de código objeto).
El archivo de código ensamblador contiene varias declaraciones, incluido el conjunto de líneas:
CPP
.section __TEXT, __text, regular, pure_instructions .macosx_version_min 10, 12 .global _main .align 4, 0x90 _main: ## @main .cfi_startproc ## BB#0: pushq %rbp Ltmp0: .cfi_def_cfa_offset 16 Ltmp1: .cfi_offset %rbp, -16 movq %rsp, %rbp Ltmp2: .cfi_def_cfa_register %rbp subq $16, %rsp leaq L_.str(%rip), %rdi leaq _s(%rip), %rsi movl $2000, -4(%rbp) ## imm = 0x7D0 movl $17, -8(%rbp) movl -4(%rbp), %eax addl -8(%rbp), %eax movl %eax, %edx movb $0, %al callq _printf xorl %edx, %edx movl %eax, -12(%rbp) ## 4-byte Spill movl %edx, %eax addq $16, %rsp popq %rbp retq .cfi_endproc .section __DATA, __data .global _s ## @s _s: .asciz "GeeksforGeeks" .section __TEXT, __cstring, cstring_literals L_.str: ## @.str .asciz "%s %d \n" .subsections_via_symbols
Cada línea sangrada en el código anterior corresponde a una sola instrucción de máquina. Por ejemplo, la instrucción pushq indica que el contenido del registro %rbp debe insertarse en la pila del programa. Se ha eliminado toda la información sobre nombres de variables locales o tipos de datos. Todavía vemos una referencia a la
variable global s[]= “GeeksforGeeks” , ya que el compilador aún no ha determinado en qué lugar de la memoria se almacenará esta variable.
Este artículo es una contribución de Sahil Rajput . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.orgo envíe su artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA