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 \n" , 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
.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 |
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.