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 :

Calculer une moyenne sans division


Sujet :

Assembleur

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Calculer une moyenne sans division
    Bonjour; je bloque sur un exercice en Assembleur car je suis débutante alors, si vous pouvez m'éclairer svp:

    Dans une machine à deux adresses qui ne possède pas d'opérateur de division, écrire un programme assembleur qui calcule la moyenne de deux nombres X et Y et, si le résultat est nul, X sera incrémenté jusqu'à une moyenne non nulle.

    Le problème est que je ne sais pas faire la moyenne sans division. Et si vous pouvez m'indiquer des sites contenant des exercices corrigés de ce genre.
    Merci de m'aider.

  2. #2
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut
    Moyenne de deux nombres X et Y : (X+Y)/2

    Il me semble que la division par 2 n'est pas très compliquée avec les opérateurs de décalage
    Avant de poster, merci de consulter les règles du forum

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut programme en assembleur
    peut-tu m'expliquer la notion de décalage avec des exeple svp?

  4. #4
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut
    Page trouvée en quelques secondes avec Google expliquant comment diviser par 2 avec un décalage.
    Avant de poster, merci de consulter les règles du forum

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut réponse
    Merci pour ton aide, je vais essayer de le faire et de vous le montrer pour me le corrigé si vous voulez bien.

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut solution assembleur
    Voilà j'ai essayé de le faire, est-ce-qu'il est juste sinon veuillez me le corriger svp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    0000   move ax,x ;      (mettre x dans un registre)
    0001   move bx,y ;     (mettre y dans un registre) 
    0002   add    ax, bx ;  additionner ax et bx
    0003   als     ax, 2 ;    déviser le résultat (ax + bx) par 2
    0004   cmp   ax, 0  ;    comparer si le résultat est différent de zéro 
    0005   inc     x ;          si le résultat est égale à zéro on incrémante x
    0006   bgt 0002 ;    si le résultat est supérieur à 0 faire le branchement 
    autre problème :

    soit le fragment de programme en langage d'assemblage avec N une adresse mémoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FF00  load N 
    FF03  dec N           décrémentation
    FF06  eqz  FF0F     branchement coditionnel à zéro
    FF09   mul N          multiplication                         
    FF0C   jmp FF03    branchement inconditionnel 
    FF0F   END
    on nous demande: 1) que fait ce programme?
    2) Dérouler en détail l'execution des 3 premières instructions.

    solution:
    1) j'ai essayé de donner une valeur à N pour voir ce que fait ce programme exemple que je donne: [N]=3 ( sinon si vous connaissez une méthode pour savoir le rôle d'un programme veuillez me l'expliquer )

    mais j'ai trouvé les nombres suivant:
    pour FF00 ----- [N]=3
    pour FF03 ----- [N]=2
    pour FF06 ----- [N] <> 0
    pour FF09 ----- [N] := N*N = 2*2 =4
    pour FF0C------ [N]= 1
    pour FF06 ----- [N] <> 0
    pour FF09 ----- [N] := N*N = 1*1 =1
    pour FF0C ----- [N]= 0
    pour FF06 ----- END

    mais je ne vois toujours pas le rôle de ce programme; veuillez m'expliquez.

    2) les trois premières instructions sont de FF00 jusqu'à FF06. n'est ce pas ?

    MERCI .

  7. #7
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut
    Ca ne ressemble pas à de l'assembleur x86 ça

    Quelques remarques pour le 1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0003   als     ax, 2 ;    déviser le résultat (ax + bx) par 2
    Si als est un décalage à droite, il faut décaler de 1 bit pour diviser par 2 (décaler de 2 bits revient à diviser par 4).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bgt 0002 ;    si le résultat est supérieur à 0 faire le branchement
    Si vous faites le branchement sur l'instruction 0002, ça ne va pas trop le faire
    Avant de poster, merci de consulter les règles du forum

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut solution assembleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    0000   move ax,x ;      
    0001   move bx,y ;     
    0002   add    ax, bx ;  
    0003   als     ax, 1 ;    
    0004   cmp   ax, 0  ;    
    0005   inc     x ;          
    0006   bgt 0000 ;
    comme ça???

    veuillez me répondre svp pour les autres questions aussi maiss surtout celle là.

  9. #9
    Rukia
    Invité(e)
    Par défaut
    Bonjour
    Pour l assemnleur x86
    1/Le décalage de 1bit=>division par 2 se fait comme suit
    2/on a l instruction mov mais pas move
    3/on peut pas incrémenter une variable (x)
    Bon courage

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hie,
    Citation Envoyé par rukia-san
    Bonjour
    Pour l assemnleur x86
    1/Le décalage de 1bit=>division par 2 se fait comme suit
    2/on a l instruction mov mais pas move
    3/on peut pas incrémenter une variable (x)
    Bon courage
    Eh non, shl décale vers la gauche, et donc multiplie

    De plus, si on décale avec une valeur fixe, comme 1 bit ici, inutile d'utiliser un registre de plus, une valeur directe marche très bien.

    Si ax contient la valeur à diviser par 2:
    Si les cons volaient, il ferait nuit à midi.

  11. #11
    Rukia
    Invité(e)
    Par défaut
    re
    oui c'est vrai en utilise le SHR

  12. #12
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut réponse
    bonjour, j'ai incrémenté X parseque dans l'énoncé ils nous ont dit que si le résultat est nul alors X sera incrémenté ; veuillez svp me répondre aussi pour les autres questions que j'ai posé.

  13. #13
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Salut ....
    Voilà je pense que c'est ça que tu cherche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    calcul:   mov cl,1;
                move ax,x ;
                push ax;empiler la valeur de x dans la pile;      
                mov bx,y ;     
                add  ax, bx ;  
                shr   ax, cl ; faire un déclage à droite d'un bit "division par 2";   
                cmp  ax, 0  ;comparer la valeur de x avec le zéro;
                jnz    fin;Si (ax<>0)il va vers l'etqu fin;
                pop   ax;    Sinon il va continue..et il va dépiler dans ax la valeur intial de x;
                inc    ax;il incrémente la valeur de x;
                jmp   calcule;il va refaire le calcule une autre fois et insi de suite...;
    fin: nop;etiqu de fin d'excution;

  14. #14
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut
    Avant de continuer plus loin la discussion, de quel type d'assembleur s'agit-il mia123 (SPARC, MIPS ...) ?
    Avant de poster, merci de consulter les règles du forum

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut assembleur
    Bonjour; en réalite je sais juste que c'est de l'assembleur car je l'étudie en architecture des ordinateurs et notre professeur nous a pas dit quel est cet assembleur; on l'utilise aussi en tp en ms-dos. pour la solution que vous m'avez donné, vous avez utilisé deux sortes d'adressage : à 2 adresse et à 1 adresse (push) et nous on nous a demandé à 2 adresses seulement. veuillez svp me corriger les autres exercices aussi que j'ai donné et me fournir svp des sites ou je peux trouvé des exercices simple comme celui que je vous ai donné en assembleur car j'ai les examens dans une semaine.

    merci de votre aide

  16. #16
    Rukia
    Invité(e)
    Par défaut
    Citation Envoyé par mia123

    soit le fragment de programme en langage d'assemblage avec N une adresse mémoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FF00  load N 
    FF03  dec N           décrémentation
    FF06  eqz  FF0F     branchement coditionnel à zéro
    FF09   mul N          multiplication                         
    FF0C   jmp FF03    branchement inconditionnel 
    FF0F   END
    on nous demande: 1) que fait ce programme?
    Mul N le résulta de l opération seras dans le registre AX par défaut (le contenu de AX multiplier par N)
    Si le registre AX initialise a 1
    Ton programme fait le factoriel de N-1

  17. #17
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut réponse
    merci de m'avoir répondu; mais je ne sais pas pourquoi je ne l'ai pas remarqué quand j'ai fait l'execution ;et pour les autres questions et les sites que je vous ai demandé.

  18. #18
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Salut....les developpeurs ...
    Ben ,je pense ce lien peut aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      http://www.librecours.org/cgi-bin search?words=assembleur&Submit=Recherche
    ...il ya des cours sur l'assembleur qui peuvent peu etre aider à le bien comprendre..

  19. #19
    Rukia
    Invité(e)
    Par défaut
    Citation Envoyé par abdelkaderg54
    Salut....les developpeurs ...
    Ben ,je pense ce lien peut aider ...il ya des cours sur l'assembleur qui peuvent peu etre aider à le bien comprendre..
    tu as oublie de mettre le lien

  20. #20
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Ben , oui t'as raison je l'ai oublié ...merci
    et maintenat je crois que c'est reglé...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Erreur] algorithme qui calcul une moyenne
    Par quaresma dans le forum Algorithmes et structures de données
    Réponses: 29
    Dernier message: 24/04/2008, 20h58
  2. Calculer une moyenne avec des jours absents
    Par guidav dans le forum Langage SQL
    Réponses: 7
    Dernier message: 25/01/2008, 09h35
  3. Calculer une moyenne avec une matrice
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 05/06/2006, 16h47
  4. methode qui calcul une moyenne du traffic
    Par siry dans le forum Développement
    Réponses: 7
    Dernier message: 05/05/2005, 17h16
  5. calculer une moyenne avec une requete externe
    Par allowen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2005, 16h02

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