Re: [amusement] Petit Hello, World!

Page principale

Répondre à ce message
Auteur: serge rouveyrol
Date:  
À: Liste Guilde
Sujet: Re: [amusement] Petit Hello, World!
Le jeudi 24 avril 2003 a 08:58:33, Edgar Bonet a ecrit :
>
> Tu peux essayer de compiler avec gcc -S et tu verras le code assembleur


pour voir le code hexa généré par l'assembleur faire: as -a hello.s >listing
>...
>
> > >     .globl _start
> > >     _start:
> > >         movl    $4, %eax        # write(
> > >         movl    $1, %ebx        # 1,
> > >         movl    $message, %ecx  # message,
> > >         movl    $14, %edx       # 14
> > >         int     $0x80           # );
> > >         movl    $1, %eax        # exit(
> > >         movl    $0, %ebx        # 0
> > >         int     $0x80           # );
> > >     message:
> > >         .string "Hello, World!\n"

> > >
> > > Je compile avec
> > >
> > >     as -o hello.o hello.s
> > >     ld --gc-sections hello.o -o hello
> > >     strip hello

> >


on peut gagner 3 octets :

      .globl _start
     _start:
         movl    $4, %eax        # write(
         movl    $1, %ebx        # 1,
         movl    $message, %ecx  # message,
         movl    $14, %edx       # 14
         int     $0x80           # );
         movl    $1, %eax        # exit(
         xor     %ebx, %ebx        # 0
         int     $0x80           # );
     message:
        .byte 'H'
        .byte 'e'
        .byte 'l'
        .byte 'l'
        .byte 'o'
        .byte ','
        .byte ' '
        .byte 'W'
        .byte 'o'
        .byte 'r'
        .byte 'l'
        .byte 'd'
        .byte '!'
        .byte '\n'


( xor  %ebx, %ebx (ou exlusif) occupe  2 octets au lieu de 4 avec    movl    $0, %ebx 
 string genere un 0 en fin de chaine)