Écrivons un programme qui copie le contenu d'un tableau source vers un tableau destination. Cette fois, utilisons l'un des modes d'adressage en ARM qui nous permettra d'éviter d'utiliser des instructions ADD après chaque transfert.
Questions et réponses:
Quelle est la valeur de R0 après les deux instructions précédentes? R0 contient la valeur 0x1004 car l'instruction l'a incrémenté après avoir effectué la lecture en mémoire.
Et R1? R1 contient la valeur 0x1010 car l'instruction l'a également incrémenté après avoir effectué la lecture en mémoire.
Qu'arriverait-il si on utilisait LDR R2, [R0, #4]! et STR R2, [R1, #4]! au lieu des deux instructions suivantes? On «sauterait» un élément du tableau car l'adresse utilisée pour la lecture en mémoire est R0+4 et non R0 comme l'instruction suivante.
Activer
Type
cycles
cycles (premier)
Vitesse d'exécution : ms
Français
SECTION INTVEC
B main
SECTION CODE
main
; Chargeons l'adresse de source
LDR R0, =source
; Chargeons l'adresse de destination
LDR R1, =destination
; Copions les éléments uns à uns
; Question: quelle est la valeur de R0 après les deux
; instructions suivantes? Et R1?
LDR R2, [R0], #4
STR R2, [R1], #4
; Question: qu'arriverait-il si on utilisait
; LDR R2, [R0, #4]! et STR R2, [R1, #4]! au lieu des
; deux instructions suivantes?
LDR R2, [R0], #4
STR R2, [R1], #4
LDR R2, [R0], #4
STR R2, [R1], #4
; Hmm... il me semble que ça serait plus simple de faire
; une boucle... nous y verrons la semaine prochaine!
fin
B fin
SECTION DATA
source ASSIGN32 0x48, 0x65, 0x6C
destination ALLOC32 3