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 :

Exercice assembleur 1


Sujet :

Autres architectures Assembleur

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 18
    Points
    18
    Par défaut Exercice assembleur 1
    Bonjour je vous écris car j'ai un exercice en assembleur et je suis un peu coincé. Si vous auriez pu m'aider çà aurait été sympa.
    Mon problème est le suivant:

    Ecrire une fonction qui calcule la some des N premiers entiers. Parametre : valeur de N dans D7. Résultat des D0

    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
    TAILLE equ    5            
    		DATA 
    tres:  ds.l   TAILLE         
    		CODE 
    		jsr    init_tres 
    		rts 
     
    init_tres1:
    		lea    tres,a0    
    		move.l #0,d7       
    init_tres2: 
    		jsr    somme 
    		move.l d0,(a0)    
    		add.l  #4,a0      
    		add.l  #1,d7      
    		cmp.l  #TAILLE,d7  
    		bne    init_tres2 
    		rts 
     
    somme: 
    		move.l  #0,d0 
    somme1: 
    		add.l   d7,d0 
    		sub.l   #1,d7 
    		bgt     somme1 
    		rts
    voila j'ai fait cela mais il y a des erreurs si quelqu'un peu m'aider
    merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour,

    Tu te donnes beaucoup de mal pour rien. Il suffit d'initialiser une case à zéro, par exemple dans la pile, c'est là que tu te donneras le moins de mal, et d'y additionner directement tes valeurs successives. Étant donné que personne ne te demande de les additionner dans l'ordre croissant plutôt que décroissant, tu peux te permettre d'additionner directement le contenu de D7 et de décrémenter celui jusqu'à ce qu'il atteigne zéro.

    Dès lors, il te suffit de dépiler ton registre vers D0 et sortir. Le tout peut tenir en cinq lignes.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    a bon en 5 lignes je ne vois pas trop comment tout cela peut tenir en cinq lignes pouvais vous me le montrer si cela ne vous derange pas et de m'expliquer le detail pour me permettre de bien comprendre.
    merci
    bonne soirée

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Je ne peux pas faire ton travail à ta place mais je peux te donner l'algo :

    — Empiler la valeur 00000000. Comme il n'y a pas d'instruction PUSH dédiée, il faut le faire avec les modes d'adressage. Tu utilises MOVE.L pour déplacer #0000 vers l'adresse pointée par SP (ou A7) en pré-décrémentant ce registre. Donc avec -(SP).
    — Tu additionnes avec ADD le contenu de D7 à l'adresse pointée par SP ;
    — Tu décrémentes D7, et tu sautes vers la ligne précédente (ADD) si le résultat n'est pas nul ; Il y une instruction dédiée pour ça (DBcc avec « cc » étant le code condition choisi) ;
    — Tu dépiles le résultat dans D0 en utilisant le contraire de l'instruction du début, à savoir un MOVE depuis SP avec post-incrémentation, vers D0.

    Donc, le tout tient en quatre lignes, finalement.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/12/2011, 10h42
  2. Exercice Assembleur Pile
    Par reuqnas dans le forum Autres architectures
    Réponses: 0
    Dernier message: 20/04/2011, 22h16
  3. Exercices sur l'Assembleur MIPS R3000
    Par pmyriam dans le forum Assembleur
    Réponses: 3
    Dernier message: 06/05/2008, 23h38
  4. Exercice sur le jeu d'instructions Assembleur
    Par azedsqfb dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/09/2007, 11h23

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