Wie man richtig ein array erstellen, in die ARM-assembly?
Ich bin derzeit lernen die ARM-assembly für eine Klasse und haben auf ein problem stoßen, wo ich brauchen würde, die Verwendung eines "Arrays." Ich bin mir bewusst, dass es gibt keine solche Sache wie ein array im ARM, so dass ich Speicherplatz reservieren und zu behandeln, die als ein array. Ich habe zwei Fragen.
- Bin ich richtig das hinzufügen von neuen Werten für den array oder bin ich bloß überschreibt den vorherigen Wert? Wenn ich mich überschreiben die Werte, wie gehe ich über das hinzufügen von neuen Werten?
- Wie gehe ich über die Schleife durch die verschiedenen Werte des Arrays? Ich weiß, ich habe zu verwenden
loop:
aber nicht wissen, wie Sie es verwenden, um den Zugriff auf die verschiedenen "Indizes."
So weit, dies ist, was ich bekommen habe aus der Lektüre ARM-Dokumentation, wie ich gesammelt habe aus online-Ressourcen.
.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
Als seitliche Anmerkung, ich bin mit ARMSim#, wie erforderlich, durch meinen professor, so dass einige Befehle erkannt, die von der GNU-tools nicht erkannt werden ARMSim#, oder zumindest ich glaube, dass ist der Fall. Bitte korrigieren Sie mich, wenn ich falsch Liege.
- Warum nach unten Stimmen? Ja, dies ist eine teilweise Verwandte, um Hausaufgaben, aber ich kann sehen, diese Informationen nützlich sein für andere und ich bin nicht zu Fragen, wie um meine Aufgabe zu tun.
- Wenn Sie möchten, um es so dort ist keine solche Sache wie ein array in jedem Prozessor-Familie nicht gerade arm. Arrays dont existieren tatsächlich, Sie sind nur einen blob-Speicher, die irgendwo anfangen. Viele Befehlssätze, auf jeden Fall arm, Unterstützung von einem register offset-Adressierung Modus, der Ihnen erlaubt, um ein reines Gefühl von einem array. Ich würde vorsichtig sein, machen die Aussage, die Sie in der Zukunft gemacht.
- Ah danke für den Hinweis, hat mir sehr geholfen mit meinem Verständnis. Ich werde auch halten Sie im Verstand, Sie nicht zu nennen ein array
Du musst angemeldet sein, um einen Kommentar abzugeben.
.skip
ist die Zuweisung der array fester Größe.* Eine variable-sized anbauen array würde in der Regel umgesetzt werden, mit komplexer dyanamic memory allocation code über den stack oder heap.loop:
(der eigentliche name ist beliebig), Sie könnten branch (zurück), um es mitb loop
. (Wahrscheinlich würden Sie wollen, um die Verzweigung bedingt, so dass das Programm nicht in einer Endlosschleife landen.) Sie können den Zugriff auf die verschiedenen Elemente in der Schleife durch die änderungR0
, die Sie bereits tun,Auch die
b main
ist nicht wirklich dienen keinem Zweck, da es Verzweigungen bis er die nächste Anweisung. Der code wird das gleiche tun, wenn Sie es zu entfernen.[*] Abwechselnd, man könnte sagen, dass dein array nur die Elemente zwischen
MyArray
undR0
(nicht einschließlich der SpeicherR0
Punkte), in denen durch änderungR0
erweitern Sie das array. Aber die maximale Größe Ist immer noch fest von der.skip
Richtlinie.loop:
war willkürlich. Kurze Frage, wie würde ich mich über Zugriff auf die verschiedenen Elemente?R0
auf MyArray (z.B.ldr R0,=MyArray
oderadr R0, MyArray
) dann Dinge tun, wiestr rx, [R0, #4]
oderstr rx, [R0, R2]
woR2
hat Werte wie 0, 4, 8, ...