UN "HELLO WORLD" SOUS LINUX (UTILISE L'ASSEMBLEUR AS ET LE LINKER LD)

cs_PierreF Messages postés 33 Date d'inscription mercredi 15 mai 2002 Statut Membre Dernière intervention 24 octobre 2003 - 24 oct. 2003 à 19:30
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 - 26 juil. 2006 à 09:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/15259-un-hello-world-sous-linux-utilise-l-assembleur-as-et-le-linker-ld

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
26 juil. 2006 à 09:16
Ok, merci pour ces précisions, je modifie le code tout de suite en fonctions de tes remarques.
Thanks.

Bouba
_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 avril 2011
25 juil. 2006 à 23:49
Une autre précision, il n'est pas nécéssaire de préciser la taille du mov (movl pour mov long) à partir du moment où un registre en opérande lève toute ambiguité.

dune2.
_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 avril 2011
25 juil. 2006 à 23:41
Bonjour suite à une relecture des sources, j'ai juste une précision à ajouter à ce code :
Dans l'appel système "write", les paramètres sont eax="appel système write" , ebx="le file descriptor (1 = stdout)", ecx="pointeur vers le buffer" et edx="taille du buffer".
C'est sur la taille du buffer pour la 2ème chaine que je ne suis pas d'accord. Pour éviter tout problème de calcul de taille de chaine, on peut laisser le compilateur effectuer le calcul à notre place. Pour celà, nous utiliserons la soustraction de label :

.section .text
.global _start
_start:
movl $4, %eax
movl $1, %ebx
movl $chaine1, %ecx
movl $(chaine2-chaine1), %edx ; calcul de la taille automatique
int $0x80

movl $4,%eax
movl $1,%ebx
movl $chaine2,%ecx
movl $(chaine3-chaine2),%edx ; calcul de la taille automatique
int $0x80

movl $1, %eax
int $0x80

.section .data ; section ki sert a déclarer des variables initialisés
chaine1: .string "Voici une première chaine\n"
chaine2: .string "Et en voici une seconde\n"
chaine3:

.section .bss
nbr3: .long ; sert a rien, c juste pour montrer que ce segment sert a mettre des varibles non initialisés


dune2.
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
26 oct. 2003 à 23:52
Malheuresement je ne pourrai pas de dire quelle version j'ai utilisé pour compiler cette source car y'a bien longtemps que j'ai changé ma distribution linux.
Sinon, pour de la doc en asm tu trouveras tout ça sur le net facilement en faisant une recherche sur google, ou alors sur le super site du "Linux Documentation Project". En tout cas si tu trouves pas de doc en Français c'est u pe normal, de tout de façon les meilleurs docs sont en Anglais, alors ne t'entêtes pas a en chercher en français.
Voilà, bonne prog.
Bouba
cs_PierreF Messages postés 33 Date d'inscription mercredi 15 mai 2002 Statut Membre Dernière intervention 24 octobre 2003
24 oct. 2003 à 19:30
Salut
J'aurais deux petites questions:

1) Je n'arrive pas a complier ton code, il ne veut pas des chaines de caractères avec ' (il veut ") et les commentaire il veut pas de // mais un point-virgule.
Alors je voudrais savoir si tu a fait une erreur, où si je n'ai pas la même version de as que toi (j'ai GNU assembler version 2.13.90.0.18 (i586-mandrake-linux-gnu))

2) Plus important: Où peut-on trouver des documents sur la programmation en asm sous linux?

Merci d'avance
Rejoignez-nous