Comment créer un tableau dans les BRAS de montage?
Je suis actuellement en apprentissage BRAS de montage pour une classe et avons rencontré un problème lorsque j'avais besoin d'utiliser un "array". Je suis conscient qu'il n'y a pas une telle chose comme un tableau dans les BRAS tellement j'ai d'allouer de l'espace et de la traiter comme un tableau. J'ai deux questions.
- Suis-je correctement l'ajout de nouvelles valeurs dans le tableau ou suis-je simplement en écrasant la valeur précédente? Si je suis d'écraser les valeurs, comment puis-je ajouter de nouvelles valeurs?
- Comment puis-je aller sur la boucle à travers les différentes valeurs du tableau? Je sais que je dois utiliser
loop:
mais ne savent pas comment l'utiliser pour accéder à différents indices."
Jusqu'à présent, c'est ce que j'ai obtenu à partir de la lecture du BRAS de la documentation que j'ai recueillies à partir de ressources en ligne.
.equ SWI_Exit, 0x11
.text
.global _start
_start: .global _start
.global main
b main
main:
ldr R0, =MyArray
mov R1, #42
str R1, [R0], #4
mov R1, #43
str R1, [R0], #4
swi SWI_Exit
MyArray: .skip 20 * 4
.end
Comme une note de côté, je suis en utilisant ARMSim# comme l'exige mon professeur, de sorte que certaines commandes reconnues par les outils GNU ne sont pas reconnus par ARMSim#, ou, au moins, je crois que c'est le cas. S'il vous plaît corrigez-moi si je me trompe.
Si vous voulez de l'état de cette façon il n'y a pas une telle chose comme un tableau dans n'importe quel processeur de la famille et pas seulement le bras. Les tableaux n'existent en réalité, ils sont juste une goutte de mémoire que commencer quelque part. De nombreux jeux d'instructions, certainement bras, le soutien d'un registre d'offset mode d'adressage qui permet de se faire une pure sensation d'un tableau. Je serais prudent qui fait la déclaration que vous avez fait dans le futur.
Ah merci pour la note, a beaucoup aidé avec ma compréhension. Je vais aussi garder à l'esprit de ne pas les appeler un tableau
OriginalL'auteur allejo | 2013-10-12
Vous devez vous connecter pour publier un commentaire.
.skip
est d'allouer le tableau de taille fixe.* Une variable de taille, cultivables matrice généralement être mis en œuvre avec la plus complexe dyanamic l'allocation de la mémoire code à l'aide de la pile ou le tas.loop:
(le nom est arbitraire), vous pourriez branche (retour) en utilisantb loop
. (Probablement, vous voulez faire de la branche conditionnelle, de sorte que le programme ne boucle jamais.) Vous pouvez accéder aux différents éléments de la boucle en changeantR0
, qui vous font déjàÉgalement la
b main
n'est pas vraiment servir n'importe quel but, car il est la ramification, il s'prochaine instruction. Le code va faire la même chose si vous l'enlevez.[*] Alternativement, vous pourriez dire que votre tableau est seulement des éléments entre
MyArray
etR0
(pas y compris la mémoireR0
points), dans lequel, en changeantR0
vous étendez le tableau. Mais la taille maximale Est toujours fixé par le.skip
directive.loop:
était arbitraire. Petite question, comment puis-je accéder aux différents éléments?Probablement vous voulez point
R0
à MyArray (par exempleldr R0,=MyArray
ouadr R0, MyArray
) puis faire des choses commestr rx, [R0, #4]
oustr rx, [R0, R2]
oùR2
a des valeurs de 0, 4, 8, ...OriginalL'auteur scott