This blog is under construction

Saturday 21 September 2013

How to convert c source code to assembly language code?

Covert c program to assembly language program

Compiler uses -S option to generate assembly language code for the given c source code.

Below is the c source code(program.c).

  #include <stdio.h>
  int main() {
        int a, b, c;
        a = 20, b = 30;
        c = a + b;
        printf("Sum of two numbers is %d\n", c);
        return 0;
  }



C source code can be converted to assembly code using the following command.

  jp@jp-VirtualBox:~/$ gcc -S program.c 
  jp@jp-VirtualBox:~/$ ls
  program.c  program.s


Below is the assembly code for the above given c source code.

        .file   "program.c"
        .section        .rodata
  .LC0:
        .string "Sum of two numbers is %d\n"
        .text
  .globl main
        .type   main, @function
  main:
        pushl   %ebp
        movl    %esp, %ebp
        andl    $-16, %esp
        subl    $32, %esp
        movl    $20, 28(%esp)
        movl    $30, 24(%esp)
        movl    24(%esp), %eax
        movl    28(%esp), %edx
        leal    (%edx,%eax), %eax
        movl    %eax, 20(%esp)
        movl    $.LC0, %eax
        movl    20(%esp), %edx
        movl    %edx, 4(%esp)
        movl    %eax, (%esp)
        call    printf
        movl    $0, %eax
        leave
        ret
        .size   main, .-main
        .ident  "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5.1) 4.4.5"
        .section        .note.GNU-stack,"",@progbits



Let us compile the assembly code to get the executable "program".  And this executable can be used to get the output of the given c program.

  jp@jp-VirtualBox:~/$ gcc -o program program.s 
  jp@jp-VirtualBox:~/$ ls
  program  program.c  program.s
  jp@jp-VirtualBox:~/$ ./program 
  Sum of two numbers is 50


No comments:

Post a Comment