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

Autres architectures Assembleur Discussion :

[Débutant][RISC]Compter le nombre de bit à 1 dans un octet ?


Sujet :

Autres architectures Assembleur

  1. #1
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut [Débutant][RISC]Compter le nombre de bit à 1 dans un octet ?
    Bonjour,

    je suis débutant en ASM.

    Je travaille sur des PIC 16F84 (jeu de 35 instructions) et pour tout dire je galère bien !

    J'ai à faire comme exercice un programme qui compte le nombre de bit à 1 dans un octet... Je sais que c'est un truc de débutant et que mon post a un peu l'air d'un "ki ki veut faire mes devoirs à ma place ?" mais ça m'arrangerait vraiment si quelqu'un pouvait (au moins) me mettre sur la voie

    Merci d'avance

    Séb
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  2. #2
    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 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Tu pourrais peut-être faire une série de RLF : à chaque instruction, le bit 7 passe dans le bit Carry du registre STATUS, qu'il n'y aurait plus qu'à tester.
    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]

  3. #3
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    ok pour le principe, mais je ne sais pas trop comment mettre en place une structure conditionnelle, genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    si(le bit carry du status est à 1) alors
      incrémenter unevariable
    pour l'instant je bloque là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    btfsc STATUS, C ; test le bit carry
      ; et ensuite ?
    c'est après que je vois pas trop comment faire....
    les langages évolués c'est si facile, que quand on passe à l'asm on a plutôt l'impression de faire un grand pas en arrière

    Merci de ton aide !
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Et ensuite sur fait un décalage de bit et te recommence.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    La structure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Si Condition
    Alors 
    |
    | ...
    |
    Sinon
    |
    | ...
    |
    doit être décomposé en instruction élémentaire pour les processeurs.

    C'est à dire, qu'il n'existe généralement pas d'instruction "Sauter si", et qu'il faut décomposer "Tester", puis "Sauter suivant le résultat du test". Cela s'explique par le fait que les sauts conditionels sont liés aux Flags du processeurs. Je ne connais presque que le x86. Je ne connais pas non plus le nom des instructions non plus ^^.

    Donc, globalement, ton décalage de bit, doit changer un Carry Flag, que tu pourras tester. Ensuite, les sauts conditionels ne disent que "Sauter si". Alors qu'on veut généralement "Sauter là si, sauter là sinon". Ce qui donne une structure suivante :

    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
     
      Instruction quelconque qui change les flags ou pas
      Si condition non atteinte sauter à sinon
     
    Alors:
     
      ...
     
      Sauter à Fin de la structure conditionelle.
     
    Sinon :
     
      ...
     
    Fin :
    Dans ton cas, c'est plus simple, parce qu'il n'y a pas de sinon. Il ne faut qu'incrémenter le compteur que dans le cas du Alors. Soit une structure qui ressemble à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      Instruction quelconque qui change les flags ou pas
      Si condition non atteinte sauter à Fin
     
    Alors:
     
      ...
     
    Fin :
    Note dans tous les cas que le label alors est inutile ^^. Donc, tu dois prendre le problème comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      Faire un décalage de bit
      Si on a [u]pas[/u] sorti un bit à 1 alors aller à Suite.
      Incrémenter le compteur
    Suite :
    C'est le même algorithme décomposé, et directement retranscriptible (Ce n'est pas intuitif. Le grand avantage des langage de haut niveau, c'est qu'ils permettent généralement une retranscription de l'algorithme intuitive. En Assembleur, il faut toujours faire cette gymnastique).

    Pour la structure répétitive elle est relativement simple. A la fin de ton code, tu testes si la variable que tu analyse est égale à 0, ou alors, tu utilises un compteur sur toute la boucle qui vaut 8 au début (pour huit bits) décrémenté à chaque fois puis fin de boucle quand il est à 0.


    Blustuff.

  6. #6
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    d'accord, je comprend mieux le principe maintenant, merci

    dernière question (après je met 'résolu'):
    si [condition] aller à...
    pourrait me dire ce que cela donne sous forme de code ?

    Merci
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  7. #7
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Si mes souvenirs de programmation de pics ne sont pas erronés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    btfss STATUS, C ;skip if set
    goto sinon         ;on arrive ici si pas de carry (attention, il n'y a la place que pour une instruction)
     
    ;; si on arrive ici, c'est que la carry est positionnée à 1
    ......
    goto fin
    sinon:
    .......
    fin:
    .......
    voila !

    ++
    Pouic
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  8. #8
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par Pouic
    Si mes souvenirs de programmation de pics ne sont pas erronés:
    Ta mémoire fonctionne impecc, aussi bien que celle d'un PIC

    à tous pour vos réponses

    @+
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. InputStream : Compter le nombre de bit sortie
    Par Twinser dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 08/08/2009, 13h08
  2. Compter le nombre d'enregistrement supprimer dans une jsp
    Par DarkWark dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/05/2006, 11h36
  3. Réponses: 2
    Dernier message: 28/04/2006, 13h28
  4. Compter le nombre d'image contenu dans un <div>
    Par denn dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/02/2006, 15h45
  5. Nombre de bits à 1 dans un unsigned / index du 1er bit à 1
    Par Erickann dans le forum Assembleur
    Réponses: 2
    Dernier message: 20/11/2005, 22h51

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