
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
How do you get assembler output from C/C++ source in gcc?
In this article, we will see how to generate the assembler output from C or C++ code using GCC.
What is GCC
The GCC, which stands for GNU Compiler Collection, is a set of compilers and development tools available for various operating systems such as Linux, Windows, and a wide variety of other OSs (operating systems).
It supports mostly C and C++, but also Objective-C, Ada, Go, Fortran, and D. The Free Software Foundation (FSF) created GCC and distributed it as totally free (as in libre) software.
How to Get Assembler Output
The GCC has a great feature that allows you to receive all intermediate outputs from a source code while it is being executed. To get the assembler output, use the gcc option >'-S'
. This option displays the result after compilation but before passing it to the assembler.
Following is the syntax of this command:
gcc -S your_file.c or g++ -S your_file.cpp
The above command produces a file named your_file.s containing the assembly code.
To specify the output file name use the below command:
gcc -S -o output.s myfile.c
Get the Assembler Output
Here, in the following example, you create a program and run the above command to get the assembler output in C/C++:
#include <iostream> using namespace std; int main() { int x, y, sum; x = 50; y = 60; sum = x + y; cout << "Sum is: " << sum << endl; }
Output
To get the assembler output of the above code, run the above command in the VS code or any other compiler.
.file "addition.cpp" .section .rdata,"dr" __ZStL19piecewise_construct: .space 1 .lcomm __ZStL8__ioinit,1,1 .def ___main; .scl 2; .type 32; .endef LC0: .ascii "Sum is: \0" .text .globl _main .def _main; .scl 2; .type 32; .endef _main: LFB1445: .cfi_startproc leal 4(%esp), %ecx .cfi_def_cfa 1, 0 andl $-16, %esp pushl -4(%ecx) pushl %ebp .cfi_escape 0x10,0x5,0x2,0x75,0 movl %esp, %ebp pushl %ecx .cfi_escape 0xf,0x3,0x75,0x7c,0x6 subl $36, %esp call ___main movl $50, -12(%ebp) movl $60, -16(%ebp) movl -12(%ebp), %edx movl -16(%ebp), %eax addl %edx, %eax movl %eax, -20(%ebp) movl $LC0, 4(%esp) movl $__ZSt4cout, (%esp) call __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc movl %eax, %edx movl -20(%ebp), %eax movl %eax, (%esp) movl %edx, %ecx call __ZNSolsEi subl $4, %esp movl $__ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_, (%esp) movl %eax, %ecx call __ZNSolsEPFRSoS_E subl $4, %esp movl $0, %eax movl -4(%ebp), %ecx .cfi_def_cfa 1, 0 leave .cfi_restore 5 leal -4(%ecx), %esp .cfi_def_cfa 4, 4 ret .cfi_endproc LFE1445: .def ___tcf_0; .scl 3; .type 32; .endef ___tcf_0: LFB1878: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $8, %esp movl $__ZStL8__ioinit, %ecx call __ZNSt8ios_base4InitD1Ev leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc LFE1878: .def __Z41__static_initialization_and_destruction_0ii; .scl 3; .type 32; .endef __Z41__static_initialization_and_destruction_0ii: LFB1877: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $24, %esp cmpl $1, 8(%ebp) jne L6 cmpl $65535, 12(%ebp) jne L6 movl $__ZStL8__ioinit, %ecx call __ZNSt8ios_base4InitC1Ev movl $___tcf_0, (%esp) call _atexit L6: nop leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc LFE1877: .def __GLOBAL__sub_I_main; .scl 3; .type 32; .endef __GLOBAL__sub_I_main: LFB1879: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $24, %esp movl $65535, 4(%esp) movl $1, (%esp) call __Z41__static_initialization_and_destruction_0ii leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc LFE1879: .section .ctors,"w" .align 4 .long __GLOBAL__sub_I_main .ident "GCC: (MinGW.org GCC-6.3.0-1) 6.3.0" .def __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc; .scl 2; .type 32; .endef .def __ZNSolsEi; .scl 2; .type 32; .endef .def __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_; .scl 2; .type 32; .endef .def __ZNSolsEPFRSoS_E; .scl 2; .type 32; .endef .def __ZNSt8ios_base4InitD1Ev; .scl 2; .type 32; .endef .def __ZNSt8ios_base4InitC1Ev; .scl 2; .type 32; .endef .def _atexit; .scl 2; .type 32; .endef