Difficoltà con LDR e STR in ASSEMBLY ARM

di Anonimizzato30236 il
8 risposte
Buongiorno a tutti, da poco mi sono avvicinato ad assembly arm, e sto cercando di capirci qualcosa, ma con il libro che sto utilizzando non riesco a capire bene come utilizzare "LDR" che se ho capito bene carica in un registro la parola puntata da un altro registro e "STR" che effettua l'operazione inversa. Il problema sta negli esercizi, ad esempio:

Considerando questo codice in C:
int i
int temp[100]
...
for (i = 0, i < 100, i = i + 1)
temp = temp * 128

In Assembly:
R3 = indirizzo base di temp

Perché in LDR facciamo R2 * 4?
MOV R2, #0
LOOP CMP R2, #100
BGE ENDLOOP
LDR R0, [R3, R2, LSL #2]

PS: Non sono qui per avere l'esercizio svolto, ma per capire dato che mi sfugge qualcosa, perciò se c'è qualche guida dove posso leggere e capire ben venga

8 Risposte

  • Tieni presente che ogni elemento è un int che è fatto da 4 byte (32 bit).
  • oregon ha scritto:


    Tieni presente che ogni elemento è un int che è fatto da 4 byte (32 bit).
    Si ma non riesco a capire quante word ho, nel senso se ho 1 word sono 4 byte quindi faccio #2, ma non riesco a capire perché va fatto qui e come distinguerli soprattutto
  • oregon ha scritto:


    Qui

    https://azeria-labs.com/memory-instructions-load-and-store-part-4/

    alcune spiegazioni ed esempi

    L'indirizzo viene formato da base+offset in cui l'offset el'indice moltiplicato 4
    Quindi indirizzo di base di temp[100] + i * 4, ma i = 0 quindi l'indirizzo è sempre temp[100]?
  • Indirizzo base di temp non di temp[100]

    Quindi temp + i * 4
  • oregon ha scritto:


    Indirizzo base di temp non di temp[100]

    Quindi temp + i * 4
    Ci sono quasi, mi manca solo capire quando moltiplicare per 4, quando per 8 ecc. Nel senso, in base a cosa riesco a capire per quanto devo moltiplicare?
  • Se lavori con sistemi a 32 bit l'int è fatto da 4 byte, se lavori a 64 bit l'int è da 8 byte ...
  • No, nei sistemi 64 bit l'int non e' 64 bit.
Devi accedere o registrarti per scrivere nel forum
8 risposte