Vous êtes sur la page 1sur 2

TD1 

: Architecture ARM
Exercice1
Donner le contenu des registres et des cases mémoires concernées après exécution des
instructions suivantes, en supposant que pour chaque instruction, on part de la même
configuration initiale qui est celle de la figure 1

a) LDR R3, [R1 + 8]


b) LDR R4, [R1+R2]
c) LDR R5, [R1], 10H
d) LDR R6, [R1, 14H]
Correction:
a) LDR R3, [R1 + 8] R3 = Mem (R1+8) = Mem (FFFF 0008) = 2222 4444

b) LDR R4, [R1+R2] R4 = Mem (R1+R2) = Mem (FFFF 000C) = 45547667

c) LDR R5, [R1], 10H R5 = Mem (R1) = 1234 FDB9 ; R1=R1+10 = FFFF 0010H

d) LDR R6, [R1, 14H] ! R6 = Mem (R1+14) = Mem (FFFF 0014) = ABCD EF98;

Exercice 2
Un ordinateur est équipé d’un processeur Pentium 4 à 3,6 GHz fonctionnant à une fréquence
de carte mère de 800 MHz.
1) Déterminer le taux de transfert maximal du bus processeur sachant que la quantité de
données pouvant être transférées simultanément est de 64 bits. Ce taux de transfert,
souvent appelé largeur de bande du bus de processeur, représente la vitesse maximale
à laquelle les données sont déplacées.
Remarque : Pour déterminer le taux de transfert du bus processeur, il faut multiplier la
quantité de données pouvant être transférées simultanément (64 bits) par la fréquence
d’horloge du bus (identique à la fréquence du processeur avant multiplication).
Correction
1) Pour déterminer le taux de transfert du bus processeur, il faut multiplier la quantité de
données pouvant être transférés simultanément (64 bits) par la fréquence d’horloge du
bus (identique à la fréquence du processeur avant multiplication). Le taux de transfert
instantané maximal est de 6400 Mo/s. Pour obtenir ce chiffre, il suffit d’utiliser la
formule suivante :
800Mhz*8octets(64bits) =6400Mo/s

Exercice 3
1) Comment initialiser un registre à la valeur zéro ? Donner l’instruction assembleur
2) Programmer une séquence de boot qui remet à zéro les registres et (une partie de) la
mémoire.

Correction
1) Avec AND et la valeur immédiate zéro.
AND R0, R0, 0 Noté aussi AND R0, R0, #0
2) Le début est comme l’exo 1. Pour la mémoire, on a besoin de 2 registres : un pour
l’adresse et un pour la valeur 0.
AND R0, R0, 0
AND R1, R1, 0
STR R0, R1, 0 Mem[R1+0] ← R0
ADD R1, R1, 1
Bien sûr, si l’on fait comme cela, le programme (et le système d’exploitation) vont être
écrasés... Mais on peut aussi commencer avec une autre valeur de R1. Ou décrémenter R1
jusqu’à zéro. On peut aussi utiliser un autre registre pour faire des soustractions et des
comparaisons.

Vous aimerez peut-être aussi