Ich versuche herauszufinden, wie Arrays in ARM-Assembly arbeiten, aber ich bin nur überwältigt. Ich möchte ein Array der Größe 20 auf 0, 1, 2 und so weiter initialisieren.ARM Assembly Arrays
A[0] = 0
A[1] = 1
Ich kann nicht einmal herausfinden, wie zu drucken, was ich zu sehen habe, wenn ich es richtig gemacht habe. Das ist, was ich habe, so weit:
.data
.balign 4 @ Memory location divisible by 4
string: .asciz "a[%d] = %d\n"
a: .skip 80 @ allocates 20
.text
.global main
.extern printf
main:
push {ip, lr} @ return address + dummy register
ldr r1, =a @ set r1 to index point of array
mov r2, #0 @ index r2 = 0
loop:
cmp r2, #20 @ 20 elements?
beq end @ Leave loop if 20 elements
add r3, r1, r2, LSL #2 @ r3 = r1 + (r2*4)
str r2, [r3] @ r3 = r2
add r2, r2, #1 @ r2 = r2 + 1
b loop @ branch to next loop iteration
print:
push {lr} @ store return address
ldr r0, =string @ format
bl printf @ c printf
pop {pc} @ return address
ARM mich verwirrt genug, wie es ist, ich weiß nicht, was ich falsch mache. Wenn jemand mir helfen könnte, besser zu verstehen, wie das funktioniert, würde das sehr geschätzt werden.
Verwenden Sie einen Debugger und Sie werden sehen, ob Sie es richtig machen. Ihr Array-Handling sieht gut aus, der Druckteil ist jedoch falsch. Überprüfen Sie, wie printf in Ihrer Plattform verwendet wird. –
'str r2, [r3] @ r3 = r2' Der Kommentar ist falsch, es ist nicht das' r3' wird sich ändern, aber der Speicherinhalt wird sich ändern. Bei der Adresse, auf die der Wert "r3" zeigt. Auch 'mov r2, # 0 @ index r2 = 0 'ist ein bisschen ... Sie verwenden' r2' sowohl als Index als auch als Wert, was eigentlich nett ist, aber ich würde das Wort "index" aus dem Kommentar dann weglassen. 'ldr r1, = a @ set r1 zum Indexpunkt des Arrays' 'r1' ist die Adresse des Arrays (des ersten Elements), nicht index. (Rest wie Sami oben geschrieben hat, Array-Code sieht gut aus, printf ist komplett durchgebrannt und benutzt den Debugger, um den Speicherinhalt zu überprüfen und Inhalt zu registrieren) – Ped7g
wolltest du ein Array von Wörtern oder ein Array von Bytes machen? du hast eine Reihe von Wörtern gemacht und das ist in Ordnung, wenn du das wolltest. –