Systèmes à Microprocesseurs – Electronique 3
- 1 -
Exercices complémentaires 3
1.1 Instructions assembleur
a) Donner en binaire les valeurs des registres R0 et R1 après exécution de chaque instruction ci-dessous (en complétant le tableau, que vous recopierez sur votre copie).
Ne représenter que les six bit de poids faible pour chaque registre, et utiliser ‘???’ lorsque la valeur est indéterminée.
Code R0 R1
MOV R0, #11
MOV R1, #13 EOR R0, R0, R1
EOR R1, R0, R1 EOR R0, R0, R1
b) Qu’arrive-t’il aux registres R0 et R1 à l’issue de ces trois instructions EOR ?
1.2 Opérations de masquage
Le registre R0 contient une valeur dont on souhaite forcer certains bits à 1, forcer certains bits à 0, complémenter certains autres bits et laisser les autres inchangés. La figure suivante illustre ces modifications :
Où ‘X’ indique un bit inchangé et ‘-’ indique un bit à complémenter.
1) Ecrire un code assembleur ARM réalisant la transformation décrite par la figure précédente, en un maximum de trois instructions. Expliquez textuellement et dans un petit paragraphe séparé de quelques lignes le fonctionnement de votre programme.
2) Ecrire un code assembleur ARM réalisant la transformation décrite en deux instructions. Expliquez textuellement et dans un petit paragraphe séparé de quelques lignes le fonctionnement de votre programme.
Systèmes à Microprocesseurs – Electronique 3
- 2 - CORRECTION
1.1 Instructions assembleur
a)
Code R0 R1
MOV R0, #11 001011 ???
MOV R1, #13 001011 001101
EOR R0, R0, R1 000110 001101 EOR R1, R0, R1 000110 001011 EOR R0, R0, R1 001101 001011
c) Les contenus de R0 et R1 sont permutes.
1.2 Opérations de masquage
R0 OR 00000000000011110000000000000000 (0x000F0000) R0 AND 11111111111111110000111111111111 (0xFFFF0FFF) R0 EOR 00000000000000000000111100000000 (0x00000F00)
Code
ORR R0, R0, #0x000F0000 AND R0, R0, #0xFFFF0FFF EOR R0, R0, #0x00000F00
EN DEUX INSTRUCTIONS
R0 OR 00000000000011111111000000000000 (0x000FF000) R0 EOR 00000000000000001111111100000000 (0x0000FF00)
Code
ORR R0, R0, #0x000FF000 EOR R0, R0, #0x0000FF00