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
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
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.
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 :
Merci de votre réponse
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
Bonne soirée
en assembleur x86, c'est vite fait, je suppose qu'en assembleur 68k aussi.
avec ce code, la valeur en D0 sera de 5, car la première case est numérotée 0.
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
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.
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager