Anfänger-ARM-Assembly-Frage

Wie Sie korrekt geladen wird der Wert von einem vordefinierten .byte in ein register? z.B. Mit einem Konstanten definiert als:

constant:   .byte   'a'

Ich versuche:

 ldr r0, =constant
 ldr r1, [r0]

Jedoch der simulator Stoppt nach der zweiten Zeile und gibt die Fehlermeldung "Zugriff auf unaligned Speicher, ungültige Adresse" den rest Der code sonst läuft es gut, solange die zweite Zeile ist nicht im Lieferumfang enthalten.

Vollständige Code:

;   r0  is a pointer to msg1
;    r1  used to store the value of val
;   r2  used to compare a character in msg1
;   r3  counter for the number of comparisons

    .text
    .global _start  
_start:
        ldr r0, =msg
        ldr r1, =val
        ldr r1, [r1]
        mov r3, #0

loop:   ldr r2, [r0]    
        cmp r2, #0
        beq done
        cmp r0, r1
        add r0, r0, #4
        bne loop
        add r2, r2, #1
        b loop

done:
        swi 0x11

    .data
    .align
msg:    .asciz  "How many 'a's are in this string?"
val:    .byte   'a'
    .end
InformationsquelleAutor | 2011-02-08
Schreibe einen Kommentar