dimanche 29 octobre 2017

Chapitre 7 : Entrées de données :Pipe et ligne de commande



Reprenons le premier programme pour saisir une chaine de caractères puis utilisons la puissance des commandes Unix pour envoyer les données d’un ls vers notre programme en utilisant un pipe comme ceci
Ls|Monprogramme  et regardons le résultat :


Nous retrouvons dans notre buffer la liste des fichiers telle qu’elle est affichée dans la commande ls. Et notre programme peut maintenant traiter comme il l’entend cette liste de fichiers : formidable non ? Remarquez que le programme affiche bien l’invite de saisie mais qu’il ne demande rien dans la console et qu’il affiche le résultat sans attendre de saisie.
Une autre façon de passer des données à un programme c’est de les passer en paramètre dans la ligne de commande comme :
Monprogramme param1 param2.
Comment faire pour les récupérer dans un programme assembleur ? et bien ils sont stockés sur la pile comme lorsque nous avons passé des paramètres à une de nos sous routines.
Voyons le programme :
Comme déjà vu, en début de programme nous sauvegardons les 2 registres fp et lr puis nous stockons dans le pointeur de contexte fp, l’adresse de la pile augmentée de 8 octets, ce qui fait que fp pointe sur l’adresse de la pile du début du programme. A cette adresse nous trouvons le nombre de paramètres contenus dans la ligne de commande (y compris le nom du programme). Nous le récupérons et nous le stockons dans r4. Puis à l’adresse fp + 4 octets, nous trouvons l’adresse du premier paramètre (c’est une chaine terminée par 0 binaire). Plus précisement nous trouvons toutes les adresses des paramètres tous les 4 octets.
Nous allons donc effectuer une boucle qui va afficher ces paramètres directement. Et comme nous n’avons pas préparé de ligne de message, nous affichons après un retour ligne pour améliorer l’affichage. Ensuite nous incrémentons le compteur de boucle et nous le comparons à r4 qui contient le nombre de paramètre. Pour la boucle j’ai utilisé un label alphabétique.
Voici le résultat : 

Recupparam est le nom de mon programme et param1 param2 les 2 paramètres saisis dans la ligne de commande  . Dans r4,  nous trouvons bien 3 paramètres, et dans r5 une adresse situé à 12 octets de l’adresse de la pile.
C’est tout pour aujourd’hui.

Exercices: Passer un nombre dans la ligne de commande puis programmer une saisie d’un autre nombre (par READ),  faire la multiplication des deux et afficher le résultat.
Lancer un pipe ls –l | nomdeprogramme   qui extraira la taille de chaque fichier, fera la somme et affichera le résultat.

Aucun commentaire:

Enregistrer un commentaire