J'ai un problème dans le langage d'assemblage que j'ai eu accès à l'élément d'un tableau ... supposons qu'un tableau contient des semaines jour ... comme le soleil, mon, mar, mar. ... je dois accéder au 2ème index du tableau ... Comment puis-je faire ça?accéder à l'élément de tableau dans le langage d'assemblage (windows)
Répondre
L'indexation dans l'assemblage est fondamentalement identique à C/C++, sauf pour une différence: vous devez connaître la taille de vos éléments de données.
Par exemple, pour une boucle à travers un tableau d'octets (ou caractères dans une chaîne) dans l'assemblage, vous pouvez effectuer les opérations suivantes:
mov eax, 0
mov ecx, 0
loop_start:
cmp ecx, ARRAY_LENGTH
jge loop_end
add eax, BYTE PTR myArray[ecx]
add ecx, 1
jmp loop_start
loop_end:
Comme vous pouvez le voir, le tableau est mis en boucle par un élément à un temps en incrémentant ecx (que j'utilise comme compteur). Chaque élément est ajouté à eax qui contient la somme à la fin de la boucle. Notez que j'ai dû ajouter "BYTE PTR" en référence au tableau pour dire à l'assembleur quel type de données j'utilise.
maintenant un coup d'oeil à ce code qui fait la même chose pour les données DWORD (4 octets):
mov eax, 0
mov ecx, 0
loop_start:
cmp ecx, ARRAY_LENGTH
jge loop_end
add eax, myArray[ecx*4]
add ecx, 1
jmp loop_start
loop_end:
Seules deux choses ont changé: je ne avais plus besoin d'utiliser « BYTE PTR » ici parce que, à moins que autrement dit, l'assembleur suppose que vous utilisez des types de données 32 bits sur une machine 32 bits; J'avais aussi besoin de changer l'index du tableau en "ecx * 4" car chaque élément du tableau a une longueur de 4 octets. La plupart des types de données utilisés sur les machines 32 bits ont une taille de 32 bits, donc l'exemple suivant sera plus commun.
Pour répondre à votre question, voici une façon de boucle à travers un tableau de chaînes et de les afficher:
.data
sunday db "Sun",0
monday db "Mon",0
tuesday db "Tues",0
wednesday db "Wed",0
thursday db "Thurs",0
friday db "Fri",0
saturday db "Sat",0
daysOfWeek dd OFFSET sunday, OFFSET monday, OFFSET tuesday OFFSET wednesday
dd OFFSET thursday, OFFSET friday, OFFSET saturday
.code
mov ecx, 0
loop_start:
cmp ecx, 7
jge loop_end
mov eax, daysOfWeek[ecx*4]
; eax now contains the pointer to the
; next element in the array of days
add ecx, 1
jmp loop_start
loop_end:
Parce que des pointeurs sur une machine 32 bits sont larges 32 bits, les traiter comme DWORDs comme dans le deuxième exemple.
btw il est nitpicking mais vous pouvez simplifier l'assemblage en comptant vers le bas au lieu de vers le haut: 'mov ecx, ARRAY_LENGTH; loop_start: ajoute eax, BYTE PTR myArray [ecx]; dec ecx; jnz loop_start' – galois
Je ne savais pas comment il allait utiliser les cordes. S'il allait les sortir à l'écran, il serait étrange de les voir dans l'ordre inverse. L'optimisation prématurée est la racine de tout Mal. – Sparafusile
- 1. Accéder à un élément de tableau dans le même tableau
- 2. Windows: Quel langage de programmation?
- 3. Accéder à SimpleXMLElements dans un tableau
- 4. PHP ne peut pas accéder à l'objet dans le tableau
- 5. jquery accéder à un frère TD dans le tableau
- 6. Accéder à une clé dans le registre Windows LOCAL_MACHINE
- 7. Accéder à l'iPhone à partir de Windows
- 8. Accéder au tableau dans MASM
- 9. Accéder à un tableau de dictionnaires?
- 10. Contrainte à la dimension de tableau en langage C
- 11. Mac/Windows Langage de programmation d'application MIDI
- 12. Accéder à un tableau dans un hachage dans Ruby
- 13. Utilisation de COM dans le langage R
- 14. Accéder à un tableau PHP à partir de JavaScript
- 15. aide pour accéder à un tableau/objet
- 16. accéder tableau avec l'objet
- 17. accéder tableau avec l'objet
- 18. Comment puis-je accéder à un HashMap en utilisant le langage d'expression (JSP)?
- 19. Accéder à l'API Windows Azure via Silverlight?
- 20. Accéder à un objet d'un tableau dans Silverlight
- 21. Comment accéder au tableau numpy dans PyCXX
- 22. Lecture d'un fichier texte dans un tableau dans le langage de programmation C
- 23. accéder à un élément dans un tableau en PHP
- 24. Comment accéder à SVN via HTTP dans un environnement Windows?
- 25. Accéder à Mongrel sur Ubuntu dans une machine virtuelle Windows
- 26. langage Perl pour obtenir un maximum d'éléments dans un tableau
- 27. Accéder facilement à un tableau en fonction de ses dimensions
- 28. Changer le langage de programmation
- 29. Reconnaissance vocale simple en langage C++ dans Windows
- 30. Accéder à un tableau de vecteurs des problèmes
Langue de l'assemblage pour quelle plateforme? Z80? 6502? 80x86? 680x0? – Guffa
Publiez n'importe quel code que vous avez écrit pour ceci jusqu'ici et alors les gens ici peuvent vous aider à le faire fonctionner. –
@Guffa - Considérant qu'il dit windows, vraisemblablement assemblage x86 – PhiS