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

x86 32-bits / 64-bits Assembleur Discussion :

[Linux] Afficher des étoiles


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 118
    Points : 64
    Points
    64
    Par défaut [Linux] Afficher des étoiles
    Voila je voudrais faire un programme qui affiche des étoiles sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    *****    *       *****    *****        *    
    *****    **       ****    ****        **    
    *****    ***       ***    ***        ***    
    *****    ****       **    **        ****    
    *****    *****       *    *        *****
    J'ai ecris une partie qui affiche la 1ere ligne de gauche avec les 5 étoiles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    .data
     
    nbreetoile:	
    	 .long 0
     
    msg:
            .byte  42
    .text
     
    .globl _start
     
    _start:
            incl nbreetoile
     
            movl $4,%eax      /* Le code designant la fonction a utiliser
                                 (dans ce cas sys write) */
            movl $1,%ebx      /* 1 argument: le numero de la sortie 
                                 standard.                                     */
            movl $msg,%ecx    /* 2 argument: un pointeur sur le message a
                                 afficher.                                     */
            movl $5,%edx      /* 3 argument: le nombre de caractere(s) a
                                 afficher.                                     */
            int  $0x80        /* Appel au noyau (interruption 0x80).           */
     
    	cmp %edx, nbreetoile 
            jb _start
     
    done: 
            movl $1,%eax      /* Le code designant la fonction a utiliser
                                 (dans ce cas sys exit) */
            movl $0,%ebx      /* 1 argument: le code de retour du processus.  */
            int  $0x80        /* Appel au noyau (interruption 0x80).           */
    Je voudrais afficher sur plusieurs ligne mais j'ai des problemes
    Voici mon code pour afficher sur plusieurs ligne (seulement celle de gauche)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    .data
     
    nbreetoile:	 .long 0
    nbreligne:	 .long 0	
    msg:             .byte  42
     
    pligne:	.byte 10
     
    .text
     
    .global _start
     
    _start:
            incl nbreetoile
     
            movl $4,%eax      /* Le code designant la fonction a utiliser
                                 (dans ce cas sys write) */
            movl $1,%ebx      /* 1 argument: le numero de la sortie 
                                 standard.                                     */
            movl $msg,%ecx    /* 2 argument: un pointeur sur le message a
                                 afficher.                                     */
            movl $5,%edx      /* 3 argument: le nombre de caractere(s) a
                                 afficher.                                     */
            int  $0x80        /* Appel au noyau (interruption 0x80).           */
     
    	cmp %edx, nbreetoile /*Compare le nbre d'etoile a la valeur attribué a edx (etoile deja afiche) */
     
    	jb _start
     
    	incl nbreligne /*Incremente le nbre ligne jusque 5 */
     
    	movl $passageligne,%edx /*Met la valeur de passageligne ds le registre edx*/
     
    	cmp $5,nbreligne /*Compare le nbre de ligne a ce reste a faire*/
     
           je _start 
     
    done:  
            movl $1,%eax      /* Le code designant la fonction a utiliser
                                 (dans ce cas sys exit) */
            movl $0,%ebx      /* 1 argument: le code de retour du processus.  */
            int  $0x80        /* Appel au noyau (interruption 0x80).           */
    Quand je compile il me 1 " * " sur 5 lignes

    Si quelqu'un pouvais m'aider a m'afficher 5 étoiles sur 5 lignes et m'aider a faire le reste du programme
    Merci d'avance
    Je travaille sous linux

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut plein d'étoiles
    Salut,
    Je ne sais pas si ça marche avec un assembleur linux,mais définir les data comme ceci ne devrait pas lui etre impossible.
    La méthode la plus simple est,
    Etoiles DB "** ***** ******",13,10
    DB "** ***** *** **",13,10
    DB " * * * *** ",0

    et ainsi de suite...........

    Puis afficher le message avecun genre messagebox ou int
    ToutEnMasm

  3. #3
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    La meilleure solution est peut-être de déclarer 5 chaînes de 41 espaces.
    Ensuite, avec 5 boucles imbriquées, il faut construire chaque figure d'étoiles dans un carré de 5 sur 5.
    Avec un adressage basé-indexé et un compteur, ce devrait être suffisant.

    Exemple de pseudo-code pour la 2ème forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ebx <- adresse chaîne 1 + n° de colonne du carré de 5 sur 5
    eax <- longueur de chaîne
    ecx <- 1                          /* compteur de ligne
    tant que ecx <= 5 faire
       esi <- 0                       /* compteur d'étoiles
       tant que esi < ecx faire
          octet à l'adresse [ebx + esi] <- '*'
          esi <- esi + 1
       ebx <- ebx + eax               /* passage à la ligne suivante
       ecx <- ecx + 1
    Les autres formes sont des variations sur le même thème.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    En assembleur ca donnerait quoi ?

    J en'ai pas le droit de modifier cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    .data 
     
    msg: 
            .byte  42 
    .text 
     
    .globl _start 
     
    _start: 
     
            movl $4,%eax      /* Le code designant la fonction a utiliser 
                                 (dans ce cas sys write) */ 
            movl $1,%ebx      /* 1 argument: le numero de la sortie 
                                 standard.                                     */ 
            movl $msg,%ecx    /* 2 argument: un pointeur sur le message a 
                                 afficher.                                     */ 
            movl $5,%edx      /* 3 argument: le nombre de caractere(s) a 
                                 afficher.                                     */ 
            int  $0x80        /* Appel au noyau (interruption 0x80).           */ 
     
    done: 
            movl $1,%eax      /* Le code designant la fonction a utiliser 
                                 (dans ce cas sys exit) */ 
            movl $0,%ebx      /* 1 argument: le code de retour du processus.  */ 
            int  $0x80        /* Appel au noyau (interruption 0x80).           */

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Il n'y a pas de besoin de toucher à ces deux parties : affichage d'une chaîne et terminaison du programme.
    Citation Envoyé par xavier1936
    En assembleur ca donnerait quoi ?
    Ce n'est pas compliqué : les instructions d'affectation seront des movl ou movb, les tant que des cmp, etc.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

Discussions similaires

  1. Afficher un mot de passe caché par des étoiles
    Par sihammaster dans le forum VB.NET
    Réponses: 2
    Dernier message: 22/01/2010, 20h47
  2. Afficher des étoiles quand on tape un mot de passe
    Par imd-dev dans le forum Pascal
    Réponses: 6
    Dernier message: 14/02/2009, 23h22
  3. Afficher des images sous directX
    Par cyberlewis dans le forum DirectX
    Réponses: 17
    Dernier message: 12/07/2004, 12h07
  4. Réponses: 3
    Dernier message: 11/03/2004, 16h11
  5. [TP][MULTI-PROBLEME]Comment afficher des images pcx
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 24/10/2002, 13h57

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