2011-07-17 5 views
4

Je viens de commencer à apprendre l'ASM, j'ai de l'expérience en C mais je suppose que cela n'a pas d'importance. Quoi qu'il en soit comment puis-je initialiser un tableau de 12 éléments de DT à 0, et comment ne pas l'initialiser?Initialisation du tableau dans l'assembleur

J'utilise FASM.

+1

Le langage est appelé "assembly" et le morceau de logiciel système qui le transforme en exécutable s'appelle un "assembleur". – Sparafusile

Répondre

0

Comme les tableaux ne sont que d'un morceau contigu de mémoire avec des éléments les uns après les autres, vous pouvez faire quelque chose comme ça dans MSNA (pas sûr si FASM soutient la directive times, mais vous pouvez essayer):

my_array: 
    times 12 dt 0.0 

qui est développée lorsque la source est assemblé:

my_array: 
    dt 0.0 
    dt 0.0 
    dt 0.0 
    dt 0.0 
    dt 0.0 
    dt 0.0 
    dt 0.0 
    dt 0.0 
    dt 0.0 
    dt 0.0 
    dt 0.0 
    dt 0.0 
+0

J'ai essayé cela et j'obtiens un opérande invalide quand je le fais avec la syntaxe des temps. – adad

+0

Oh, ouais il supporte la directive times mais je ne sais pas pourquoi je ne peux pas l'utiliser avec la variable dt x_x – adad

+1

Vous ne pouvez pas initialiser tbytes à entiers, seulement à floats: * fois 12 dt 0.0 * –

0

Il suffit d'utiliser les données de réserve directive et réserve 12 TBytes:

array:   rt 12 
+0

bien alors je voudrais avoir à réserver 10x12 octets à droite? dt est de 10 octets. – adad

+0

oui, si vous voulez réserver des octets à la place: array: rb 12 * 10 –

+0

Et puis puis-je normalement reffer à ces octets comme ça: mov \t eax, [array + 10] (second élément)? – adad