2017-04-12 4 views
0

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 
+4

Sie müssen Ihre Daten in das '.data' Abschnitt setzen, als' .text' nicht beschreibbar ist. – Jester

+0

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). –

Antwort

0

Ist die Ausgabe unter dem, was Sie suchen?
Nicht sicher über den Zweck Ihres prog. Ihr Code unten mit einigen Änderungen, um Seg-Fehler zu mildern, aber das ist es.

.data 
     print_str: .asciz "%d\n"                                          abc: .word 400 
.text 
    .global main 
main: 
    push {lr} 

    ldr r1,=abc 
    ldr r0, =print_str 
    bl printf 

    ldr r1,=abc 
    mov r4, #10 
    str r4, [r1] 

    ldr r1,=abc 
    ldr r0,=print_str 
    bl printf 

    pop {lr} 
    bx lr 

Ausgang:

$ ./T94j0 
132600 
132600 
Verwandte Themen