begin process at 2012 02 05 03:00:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application Unix

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

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


 Information sur la source

Note :
Aucune note
Catégorie :Application Unix Niveau :Débutant Date de création :31/12/2002 Date de mise à jour :26/07/2006 09:20:03 Vu :9 735

Auteur : bouba

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

C'est juste pour montrer comment faire un simple "Hello World" avec AS.
Comme ceci, le code montre la syntaxe AT&T. Une petite modification a été apportée pour calculer la taille des chaînes automatiquement, merci à _DUNE2_ pour l'apport de cette ajout !

Source

  • .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
.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

 Conclusion

Bon, c'est simple, on utilise l'appel system "write" pour afficher deux chaines.
On fait appel à l'interruption 0x80, c'est le kernel.
Voila, pour compiler on fait:
as -o prog.o prog.asm
ld -s -o prog prog.o

Voila
Bonne Prog
Bouba


 Historique

26 juillet 2006 09:20:03 :
Juste une petite modif pour le calcul de la taille des chaînes de façon automatique, merci à _DUNE2_ !

 Sources de la même categorie

Source avec Zip PRODUIT SCALAIRE VIA INSTRUCTIONS SIMD (ASSEMBLEUR 80X86 64 ... par pierrejourlin
Source avec Zip Source avec une capture LISTING DES PÉRIPHÉRIQUES PCI par _dune2_
Source avec Zip [LINUX] LIRE CLAVIER ET ECRIRE CONSOLE par sheorogath
HELLO WORLD NUNUX G++! MOUARF.. par Lion7

Commentaires et avis

Commentaire de PierreF le 24/10/2003 19:30:50

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

Commentaire de bouba le 26/10/2003 23:52:25

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

Commentaire de _dune2_ le 25/07/2006 23:41:59

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.

Commentaire de _dune2_ le 25/07/2006 23:49:52

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.

Commentaire de bouba le 26/07/2006 09:16:08

Ok, merci pour ces précisions, je modifie le code tout de suite en fonctions de tes remarques.
Thanks.

Bouba

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales