Skip to main content

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


Comments

Popular posts from this blog

restorecrtmode example in c

Header file:     graphics.h Synopsis:        void restorecrtmode();       Description:       restorecrtmode() restores screen mode to text mode. restorecrtmode function in c graphics   #include <graphics.h>   #include <stdlib.h>   #include <stdio.h>   #include <conio.h>   int main(void) {         /* request auto detection */         int gd = DETECT, gmode, err;         int midx, midy;         /* initialize graphics and local variables */         initgraph(&gd, &gmode, "C:/TURBOC3/BGI");         /* read result of initialization */         err = graphresult();         if (err != grOk) {                 /* an error occurred */               ...