Convert C/C++ code to assembly language
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 “Beginner.c” .
C
// C code stored in Beginner.c file #include <stdio.h> // global string char s[] = "w3wiki" ; // 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 Beginner.c
This will cause gcc to run the compiler, generating an assembly file Beginner.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:
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 "w3wiki" .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[]= “w3wiki”, since the compiler has not yet determined where in memory this variable will be stored.
Contact Us