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 :

Tableau en assembleur


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 Tableau en assembleur
    Ecrire une fonction qui indique si une valeur est présente dans un tableau de mots longs, et si oui à quelle position.

    Pouvez vous me donnez quelques conseils ?
    merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    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 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Oui, mais à condition que tu fasses quelques efforts, tels que :

    Choisir le bon forum et nous dire au moins sur quelle architecture tu travailles ;
    — Nous montrer ce que tu as réalisé jusqu'ici et nous dire exactement où tu bloques.

    Maintenant, les mots longs, même si la définition est plus large que cela, ça correspond en général à des nombres de 32 bits, lisibles en une fois avec les processeurs modernes.

    Tu ne précises pas si ta liste est triée ou non, ni si ton algo de recherche doit être optimisé ou non, mais dans tous les cas. Il te suffit d'initialiser un registre avec l'adresse du début de ta liste (donc en faire un pointeur), lire le nombre qu'il pointe, incrémenter le pointeur, comparer le nombre lu avec la référence, et boucler au début de cette procédure s'il ne correspond pas (et si tu n'as pas atteint la fin de la liste).

    Ça se fait avec quatre à cinq lignes d'assembleur.

  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 Tableau en assembleur
    Merci de votre réponse cependant je ne pense pas mettre trompé de forum car je suis dans le forum assembleur et ma question est destiné a cela.

    Concernant mon exercice c'est le suivant :
    Ecrire une fonction qui indique si une valeur est présente dans un tableau de mots longs, et si oui à quelle position. Paramètres : adresse du tableau dans A1, taille du tableau dans D1, valeur à rechercher dans D2.
    Résultat : position dans D0 si trouvé, valeur ‐1 dans D0 si non trouvé.

    En ce qui concerne ce que j'ai trouvé pour l'instant c'est :

    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
    data
    tab: 		ds.l	10 
    d0:		DC.L	-1
    d1:		DC.L	10
    d2:		DC.L	5	
    i:		DC.L	0
     
    		CODE
    		lea tres,A1 
    		MOVE.L i,D3
    BO:		CMP.L  d1,D3
    		BGE	FIN
    		CMP.L	(A1)+,D2
    		BEQ	B1
    		ADD.L	#1,D3
    		BRA BO
    B1:		MOVE.L	D0,d3
    FIN:		RTS
    Merci de votre réponse
    Bonne soirée

  4. #4
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    en assembleur x86, c'est vite fait, je suppose qu'en assembleur 68k aussi.

    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
     
    tableau:
    .taille = (@f-$)/4 ;=7
    dd 43,432,4245,6547,434234,5435,2342
    @@:
     
    A1 dd tableau ;adresse du tableau
    D1 dd tableau.taille ;en dwords
    D2 dd 5435 ;valeur à chercher
    seek:
          mov esi,[A1]
          mov ecx,[D1]
          mov eax,[D2]
     
          dec ecx
          jl .end 
    @@:
          cmp eax,[esi+ecx*4]
          je .end
          dec ecx
          jnl @b
    .end:
     
          mov [D0],ecx
          ret
    avec ce code, la valeur en D0 sera de 5, car la première case est numérotée 0.
    comme le meme registre est utilisé pour le compteur et pour l'adressage du tableau, ça permet de recuperer l'index de la case.

    le fait de decrementer le compteur avant la boucle permet de tester si le tableau est vide, et termine la fonction avec D0=-1.

  5. #5
    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
    merci de ta réponse mais je n'ai pas vu encore sous cet assembleur avec le code que j'ai mi plus haut tu ne sais pas si j'ai bon ou si j'ai faux qu'est ce que je peux faire de mieux
    merci

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    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 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par reuqnas Voir le message
    Merci de votre réponse cependant je ne pense pas mettre trompé de forum car je suis dans le forum assembleur et ma question est destiné a cela.
    Il n'y a pas UN langage assembleur. Chaque famille de processeurs a le sien. Lis le contenu du lien que je te donnes dans mon précédent commentaire.

Discussions similaires

  1. Passer un tableau 2D de C++ à l'Assembleur
    Par Qooort dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 17/05/2013, 11h11
  2. TABLEAU / assembleur
    Par sali2801 dans le forum Assembleur
    Réponses: 1
    Dernier message: 05/06/2011, 10h44
  3. [BSIM] Un tableau en C en assembleur
    Par jeanfrancois dans le forum Autres architectures
    Réponses: 1
    Dernier message: 03/11/2006, 15h41
  4. ecrire son OS (assembleur ??)
    Par Anonymous dans le forum Programmation d'OS
    Réponses: 9
    Dernier message: 25/11/2002, 19h25

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