IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Lecture de chaîne de caractères et affichage en pyramide


Sujet :

Assembleur

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Lecture de chaîne de caractères et affichage en pyramide
    Bonjour
    Je suis débutante en assembleur et je dois programmer une application qui lit une chaîne de caractères (ex: 'A la claire fontaine, ...$') puis l'affiche en pyramide comme suit :
    A
    l
    a c
    lair
    e fon
    taine,
    ...xxx

    Je connais la lecture et l'affichage mais comme ça ?!!!
    Si vous pouvez utiliser les piles ou autre choses en assembleur, s'il vous plait n'hésitez pas , SVP aidez-moi

  2. #2
    Inactif
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Il y a de nombreuses manières de traiter le problème, tu imagines bien. Ne connaissant ni l'OS ni le Processeur... Un piste cependant, relativement simple:

    Une table script : Une suite de bytes dans une table initialisée en dur qui indique le nombre de caractères lus (1 2 3 4 5) mais c'est aussi le nombre d'itérations et le numéro de la ligne. Tu traites cette table comme une chaîne ASCII que tu vas lire élément par élément et tu t'en sers pour paramétrer ta lecture séquentielle de chaîne et son affichage à l'écran.

    Tu peux la compléter par le décalage de tabulations et le nombre de caractères, par exemple:

    Itération/Ligne NbCaractères Tabulations
    [01 01 12
    02 03 10
    03 05 08
    04 07 06 etc.

    En fait, c'est un petit automate très simple: Ta boucle d'itération est ton moteur (lire n caractères et les afficher à ligne colone) et la table est ton script. Tu peux ainsi réutiliser le même code pour plusieurs types d'affichages simplement en utilisant plusieurs tables de script et en transmettant à ton moteur une adresse de script différente selon les besoins. Tu peux même imaginer un script modifié par ton moteur etc etc...

    Je dépasse ta question, mais nous sommes sur un forum assembleur.... dépassons, dépassons.

    @plouchh

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut merci
    j'avais pas un problème de pyramide mais en assembleur,
    comment calculer la longueur d'une chaine, le retour chariot,... les opérations de base
    j'ai terminé mon travail mais il faut entrer une chaine de 20 exactement , en faite je dois avoir une longueur fixe sinon des dollars....partout
    il me reste de savoir comment calculer la longueur de la chaine en entrée , si vous pouvez .
    merci, vous verrez mon code dés qu'il s'execute

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Pour calculer la longueur d'une chaîne se terminant par un caractère particulier ( '$' dans ton exemple), il faut compter le nombre de caractères depuis le début de la chaîne jusqu'au caractère de fin de chaîne ('$').
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    compteur=0
    tant que( lire un caractère et ce caractère != '$')
      incrémenter le compteur

  5. #5
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Outre la solution de Jeremya, on peut utiliser des instructions assembleur faites pour cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    .data 
    Chaine BYTE "un test!",0
     
    .code
    start:
     
    	lea edi, Chaine ; EDI = adresse de chaine
    	xor eax, eax ; AL = caractère de fin de chaîne (ici zéro)
    	mov ecx, -1
    	repne scasb
    	inc ecx
    	not ecx ; ECX contient le nombre de car. de la chaîne, sans compter le zéro terminal. (ici 8 caractères)

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Le code proposé n'est pas une autre solution, maisla transcription en assembleur du pseudo code précédent.
    En effet, la ligne ( mov ecx, -1 ) initialise le compteur.
    la ligne ( repne scasb ) lit un caractère et le compare au contenu de al, repne faisant tourner en boucle l'instruction scasb.

    Toutefois, lors de l'utilisation des instructions de manipulation dechaîne ou de tableau, il convient de faire attention à la valeur du drapeau de direction.
    En effet, la chaîne sera lue suivant la direction indiquée par ce drapeau.

    Pour être sûr que la chaîne soit lue dans le bon ordre, il faut au préalable armer le drapeau de direction.
    Les instructions pour modifier le drapeau de direction sont :
    • STD pour l'armer
    • CLD pour le désarmer

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/10/2007, 20h54
  2. Réponses: 10
    Dernier message: 19/09/2006, 10h44
  3. Réponses: 3
    Dernier message: 14/04/2006, 09h57
  4. Affichage chaîne de caractère
    Par log2n dans le forum Assembleur
    Réponses: 1
    Dernier message: 25/10/2005, 22h41
  5. Saisie et affichage d'une chaîne de caractères
    Par sali dans le forum Assembleur
    Réponses: 2
    Dernier message: 31/03/2004, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo