Ich habe ein Problem beim Verschieben eines Werts aus einem Register in einen Speicherort. Es ist ziemlich einfach. Zuerst verschiebe ich die Formatzeichenfolge und den Wert abc
an die richtigen Stellen und rufe printf
an. Im nächsten Block habe ich ein Problem. Ich rufe adr r1, abc
an, um die Position abc
in r1
zu erhalten. Ich initialisiere dann das Register r4
auf 10. Wenn ich versuche, den Wert von r4
in den Speicherort von r1
zu speichern, wo abc
ist, bekomme ich einen segfault. Ich weiß wirklich nicht, was falsch läuft. Ich fühle mich wie die Adresse abc
ist falsch, weil es segfaulting ist, aber ich kann nicht sagen. Der Code wird im Folgenden aufgeführt:Fehler bei der Verwendung von STR-Befehl in ARM
.section .text
.global main
main:
push {lr}
ldr r1, abc
ldr r0, =print_str
bl printf
adr r1, abc
mov r4, #10
str r4, [r1]
ldr r1, abc
ldr r0, =print_str
bl printf
pop {lr}
bx lr
print_str: .asciz "%d\n"
abc: .word 400
Sie müssen Ihre Daten in das '.data' Abschnitt setzen, als' .text' nicht beschreibbar ist. – Jester
obwohl es wahrscheinlich ist, dass Sie schreiben. Text ist das Problem. aber Sie haben nicht genug Informationen angegeben, die arm spezifizieren, sagt uns fast nichts, muss den Chip oder den Kern kennen, und welchen Adressraum dieser Code ist (ist es ram oder rom/flash, etc). Selbst im Flash zu sein bedeutet nicht, dass man den Wert schreiben kann, es kommt darauf an ... (auf dem Chip/der Situation). –