14. arm adressage Flashcards
comment décaler les bit à gauche
LSL (Logical Shift Left):
* décale vers la gauche
* mets des « 0 » à droite
* équivaut à multiplier un entier par 2
LSL R0, R0, #1
comment décaler les bits NON SIGNÉS à droite
LSR (Logical Shift Right):
* décale vers la droite
* mets des « 0 » à gauche
* équivaut à diviser un entier non-signé par 2
LSR R0, R0, #1
comment décaler les bits SIGNÉS à droite
ASR (Arithmetic Shift Right):
* décale vers la droite
* mets le bit de signe à gauche
* équivaut à diviser un entier signé par 2
ASR R0, R0, #1
comment déplacer les données
L’instruction
MOV Rn Op
met l’opérande Op dans le registre Rn
3 choix pour l’opérande du mov
1.Constante: toujours précédée du symbole #
2.Registre
3.Registre décalé
* Le décalage est fait avant l’opération
MOV R0, #1234 ; R0 ⃪ 1234
MOV R0, R1 ; R0 ⃪ R1
MOV R0, R1, ASR #2 ; R0 ⃪ (R1 / 4)
comment accéder à la mémoire (2 instructions)
LDR (LoaD Register) lit la mémoire et met la valeur lue dans un registre.
* STR (STore Register) met la valeur d’un registre dans la mémoire.
LDR Rd, [Rb, Offset]
STR Rs, [Rb, Offset]
Rd et Rs décrivent le registre de destination ou de source
* Offset représente un décalage par rapport au registre
Pour calculer l’adresse, on
Pour calculer l’adresse, on additionne Rb et Offset
On peut modifier le registre Rb avant le calcul
d’accès mémoire (pre-indexing)
symbole « ! »
LDR R1, [R0, #4]! ; R0 ⃪ R0 + 4, R1 ⃪ Memoire[R0]
STR R1, [R0, #4]! ; R0 ⃪ R0 + 4, Memoire[R0] ⃪ R1
On peut modifier le registre Rb après le calcul
d’accès mémoire (post-indexing)
en dehors des []
LDR R1, [R0], #4 ; R1 ⃪ Memoire[R0], R0 ⃪ R0 + 4
STR R1, [R0], #4 ; Memoire[R0] ⃪ R1, R0 ⃪ R0 + 4
différence entre MOV et LDR/STR
MOV: déplacements entre des registres seulement
LDR/STR: déplacements entre le CPU et la mémoire