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)