Convert C and C++ code to Assembly Code

Do not miss this exclusive book on Binary Tree Problems. Get it now for free.

In this article at OpenGenus, we have explained how to convert / compile a C or C++ code to Assembly code using GCC or G++ compiler.

Table of contents:

  1. Convert C code
  2. Convert C++ code

Convert C code

The command to convert a given C code to Assembly code is as follows:

gcc -S opengenus.c

This command will save the assembly code in a filename opengenus.s. The filename syntax is "<filename>.s".

For example, if this is your C code:

int main() {
	int a = 5, b = -1;
	int sum = a + b;
	return 0;
}

The corresponding Assembly Code will be as follows:

        .file   "opengenus.c"
        .text
        .def    ___main;        .scl    2;      .type   32;     .endef
        .globl  _main
        .def    _main;  .scl    2;      .type   32;     .endef
_main:
LFB0:
        .cfi_startproc
        pushl   %ebp
        .cfi_def_cfa_offset 8
        .cfi_offset 5, -8
        movl    %esp, %ebp
        .cfi_def_cfa_register 5
        andl    $-16, %esp
        subl    $16, %esp
        call    ___main
        movl    $5, 12(%esp)
        movl    $-1, 8(%esp)
        movl    12(%esp), %edx
        movl    8(%esp), %eax
        addl    %edx, %eax
        movl    %eax, 4(%esp)
        movl    $0, %eax
        leave
        .cfi_restore 5
        .cfi_def_cfa 4, 4
        ret
        .cfi_endproc
LFE0:
        .ident  "GCC: (GNU) 7.4.0"

Convert C++ code

The command to convert a given C++ code to Assembly code is as follows:

g++ -S opengenus.cpp

Note, we have to use g++ compiler for C++ code. It is not a good practice to use gcc compiler for C code.

This will save the Assembly code.

For example, if this is your C++ code:

int main() {
	int a = 12, b = 4;
	int multiply = a * b;
	return 0;
}

The corresponding Assembly Code will be as follows:

        .file   "opengenus.cpp"
        .text
        .def    ___main;        .scl    2;      .type   32;     .endef
        .globl  _main
        .def    _main;  .scl    2;      .type   32;     .endef
_main:
LFB0:
        .cfi_startproc
        pushl   %ebp
        .cfi_def_cfa_offset 8
        .cfi_offset 5, -8
        movl    %esp, %ebp
        .cfi_def_cfa_register 5
        andl    $-16, %esp
        subl    $16, %esp
        call    ___main
        movl    $12, 12(%esp)
        movl    $4, 8(%esp)
        movl    12(%esp), %eax
        imull   8(%esp), %eax
        movl    %eax, 4(%esp)
        movl    $0, %eax
        leave
        .cfi_restore 5
        .cfi_def_cfa 4, 4
        ret
        .cfi_endproc
LFE0:
        .ident  "GCC: (GNU) 7.4.0"

With this article at OpenGenus, you must have the complete idea of generating assembly code from C and C++ code.

Sign up for FREE 3 months of Amazon Music. YOU MUST NOT MISS.