We use g++ compiler to turn provided C code into assembly language. To see the assembly code generated by the C compiler, we can use the “-S” option on the command line:
Syntax:
$ gcc -S filename.c
This will cause gcc to run the compiler, generating an assembly file. Suppose we write a C code and store it in a file name “geeks.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
" , s, a+b); } |
Running the command:
$ gcc -S geeks.c
This will cause gcc to run the compiler, generating an assembly file geeks.s, and go no further. (Normally it would then invoke the assembler to generate an object- code file.)
The assembly-code file contains various declarations including the set of lines:
.section __TEXT, __text, regular, pure_instructions .macosx_version_min 10, 12 .globl _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 .globl _s ## @s _s: .asciz "GeeksforGeeks" .section __TEXT, __cstring, cstring_literals L_.str: ## @.str .asciz "%s %d
" .subsections_via_symbols |
Each indented line in the above code corresponds to a single machine instruction. For example, the pushq instruction indicates that the contents of register %rbp should be pushed onto the program stack. All information about local variable names or data types has been stripped away. We still see a reference to the global
variable s[]= “GeeksforGeeks”, since the compiler has not yet determined where in memory this variable will be stored.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
This article is attributed to GeeksforGeeks.org
leave a comment
3 Comments