J'apprends actuellement en langage assembleur et un projet sur lequel je travaille nous oblige à convertir un fichier c dans un fichier asm. J'essaye d'implémenter la boucle for du fichier c, et je me demande si je suis capable de stocker la variable de compteur à une adresse spécifique. Par exemple, si le compteur commence à 0, puis-je faire quelque chose comme ceci:Pouvez-vous utiliser une adresse spécifique pour stocker une variable en x86?
mov dword [ebp-0x4], 0
for_loop:
cmp dword [ebp-0x4], ecx
jge break
...
...
inc dword [ebp-0x4]
jmp for_loop
Eh bien, oui, vous pouvez stocker une variable dans la mémoire. Vous voudrez probablement vous assurer que vous utilisez une adresse qui n'est pas déjà utilisée pour autre chose. Il y a aussi la question de 'réserver' vs 'commettre' de la mémoire (ou quel que soit l'équivalent d'unix). Mais peut-être la question la plus importante ici est pourquoi vous voulez le stocker en mémoire au lieu d'utiliser un registre. Habituellement, les compteurs sont de bons candidats pour cela. –
En règle générale, l'assemblage du code vous dira si votre idée est totalement fausse ou non. Si le test "assembler" réussit, le passage du code à l'aide d'un débogueur règle (habituellement) la question. Pour cette question spécifique, les deux tests passent facilement. Pour la réponse définitive, vous pouvez consulter le manuel ISA –
Gardez-le dans un registre. C'est plus facile et c'est plus rapide. Les variables de boucle en mémoire ralentissent votre code à moins que le corps de la boucle ne soit assez grand/trop lent pour que 5 cycles de latence supplémentaires ne le rendent pas un goulot d'étranglement. (Par exemple dans une boucle qui est déjà grand/lent et ne fonctionne pas plus vite que 6cycles par itération, en premier lieu.) –