cs_bouba
Messages postés518Date d'inscriptiondimanche 2 décembre 2001StatutMembreDernière intervention10 novembre 20073 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és141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 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és141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 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és518Date d'inscriptiondimanche 2 décembre 2001StatutMembreDernière intervention10 novembre 20073 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és33Date d'inscriptionmercredi 15 mai 2002StatutMembreDernière intervention24 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?
26 juil. 2006 à 09:16
Thanks.
Bouba
25 juil. 2006 à 23:49
dune2.
25 juil. 2006 à 23:41
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.
26 oct. 2003 à 23:52
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
24 oct. 2003 à 19:30
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