terça-feira, 12 de outubro de 2010

optimizing example

/*
 * #include <stdio.h>
 * 
 * int
 * main (void)
 * {
 *     int i;    
 *     for (i = 0; i < 10; i++)
 *         printf ("%d ", i);
 *     return 0;
 * }
 */
    .file    "ex.c"
    .section    .rodata
.LC0:
    .string    "%d "
    .text
.globl main
    .type    main, @function
main:
    pushl    %ebp
    movl    %esp, %ebp
    andl    $-16, %esp
    subl    $32, %esp
    movl    $0, 28(%esp)
    jmp    .L2
.L3:
    movl    $.LC0, %eax
    movl    28(%esp), %edx
    movl    %edx, 4(%esp)
    movl    %eax, (%esp)
    call    printf
    addl    $1, 28(%esp)
.L2:
    cmpl    $9, 28(%esp)
    jle    .L3
    movl    $0, %eax
    leave
    ret
    .size    main, .-main
    .ident    "GCC: (GNU) 4.5.1"
    .section    .note.GNU-stack,"",@progbits

.file    "ex.c"
    .section    .rodata
.LC0:
    .string    "%d "
    .text
.globl main
    .type    main, @function
main:
    pushl    %ebp
    movl    %esp, %ebp
    andl    $-16, %esp
    subl    $32, %esp
    movl    $0, 4(%esp)
    jmp    .L2
.L3:
    movl    $.LC0, %eax
    movl    %eax, (%esp)
    call    printf
    incl    4(%esp)
.L2:
    cmpl    $9, 4(%esp)
    jle    .L3
    movl    $0, %eax
    leave
    ret
    .size    main, .-main
    .ident    "GCC: (GNU) 4.5.1"
    .section    .note.GNU-stack,"",@progbits
The first file has as comment the c program that generates it.
The second one is the same, but with some modifications that I made..
reducing the number of instructions and replacing an add
with an inc intruction. Assembly world is really fun!!

Oh yes.. I extend SH to get a poorly gas syntaxhighlighter (:
I guess this is my first real work with free community!!
here is the post announcement: http://alexgorbatchev.com/forums/viewtopic.php?f=2&t=77 and
here is the project page http://github.com/gkos/gas-brush
I'm felling really happy with this!! Maybe tomorrow I speak about downseq project (:

Cheers!

Nenhum comentário:

Postar um comentário