ARM Assembly speichern von Register zu Speicher

Habe ich die folgende einfache Programm, das eine Aktion ausführt, die auf zwei Vektoren, A und B (die im Arbeitsspeicher gespeichert werden) und speichert das Ergebnis zurück in den Speicher verweist Vektor C:

        AREA MyProgram, CODE, READONLY
        ENTRY

Start   ADR R0, VecA
        ADR R1, VecB
        ADR R2, VecC

        ; R6 is a counter
        MOV R6, #1

Loop    ; Get the value R0 is pointing to
        LDR R3, [R0], #4

        ; Get the value R1 is pointing to
        LDR R4, [R1], #4

        ; Add the values
        ADD R5, R4, R3

        ; Divide the value by 2 (i.e. shift right by 1)
        LSR R5, #1

        ; Store the resut to memory for C
        STR R5, [R2]

        ; Increment R2 to point to the next memory location
        ADD R2, R2, #4

        ; Increment the counter. If it's 9, we're done
        ; (since the vector has 8 elements)
        ADD R6, R6, #1

        CMP R6, #9
        BNE Loop
        B Done

Done    b Done ; Loop forever


        AREA MyProgram, DATA, READWRITE

VecA    DCD 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9
VecB    DCD 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9
VecC    DCD 0x0


        END

Eveything funktioniert gut, bis die STR R5, [R2] Unterricht. Die Anleitung scheint nicht zu aktualisieren, den Speicher (der Adresse, die Spitzen, von R2 bleibt unverändert; das ist, es ist 0x00). Ich habe versucht, dies herauszufinden, für ein paar Stunden jetzt und habe absolut noch keine Idee, was falsch läuft. Der data-Abschnitt explizit sagt READWRITE, so verstehe ich nicht warum der Speicher nicht aktualisiert. Jede Hilfe wird sehr geschätzt.

  • Ist dieser code läuft aus dem RAM oder FLASH? Eine einfache STR nicht ändern würde, FLASH. Ich bin mir nicht sicher, ob armasm freut sich, dass zwei Flächen mit demselben Namen und unterschiedlichen Parametern; und ich denke, Sie fehlen einige Elemente form VecC; und könnten Sie STR R5, [R2], #4
  • keine Ahnung, aber vielleicht sollten Sie definieren VecC so schön 0s anstatt nur einen einzigen?
  • Versucht, das schon. Hat' arbeiten.
  • Bei mir läuft es auf den KEIL, so dass es läuft aus dem RAM. Auch wenn ich den Abschnitt zwei Namen, die es nicht selbst kompilieren... Verschieben, um das nächste Wort nicht helfen, entweder.
  • Sind Sie sicher, dass der simulator die Simulation von RAM, wo der code ist? Wenn Sie den Bereich ändern den Namen dann wirst du ändern müssen ADR rN, VecX zu LDR rN, =VecX weil die Einpresstiefe nicht bekannt ist, bis zur link-Zeit.
Schreibe einen Kommentar