0% ont trouvé ce document utile (0 vote)
116 vues90 pages

Micro C

Le document introduit les concepts de microprocesseur et de microcontrôleur. Il décrit leur architecture interne et compare les architectures CISC et RISC. Le document contient également des informations sur le fonctionnement de la mémoire dans les systèmes microprogrammés.

Transféré par

aymanbensat4
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
116 vues90 pages

Micro C

Le document introduit les concepts de microprocesseur et de microcontrôleur. Il décrit leur architecture interne et compare les architectures CISC et RISC. Le document contient également des informations sur le fonctionnement de la mémoire dans les systèmes microprogrammés.

Transféré par

aymanbensat4
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction au microcontrôleur

Pr.EL HMIDI
Introduction Aux Systèmes Microprogrammés

Les différents systèmes programmables

Systèmes
Programmables

Les systèmes Les systèmes en logique


Les circuits spécialisés programmée
micro-programmés
Microprocesseur

Définition

- Un microprocesseur ou processeur ou encore CPU (Central


Processing Unit) est l'unité intelligente de traitement des
informations
Microprocesseur

Définition
-C'est un circuit intégré complexe (un circuit intégré à très
grande échelle d’intégration-VLSI) chargé d’organiser les tâches
précisées par le programme, de les décoder et d’assurer leur
exécution
- Premier Microprocesseur : Intel 4004 (en 1971)
Microprocesseur

Architecture interne d’un Microprocesseur


Microprocesseur

Architecture interne d’un Microprocesseur


Microprocesseur

 Unité de traitement : Elle exécute les instructions

- L’Unité Arithmétique et Logique (UAL) :

Est un circuit complexe qui assure les fonctions


logiques(ET, OU, etc…) ou arithmétique (addition,
soustraction…)
Microprocesseur

 Unité de traitement : Elle exécute les instructions

- L’accumulateur :

C’est un registre de travail qui sert à stocker le


résultat des opérations réalisées par L’UAL
Microprocesseur

 Unité de traitement : Elle exécute les instructions

- Le registre d'état :

Chacun des bits de ce registre dépend du résultat


de la dernière opération effectuée par l’UAL
Microprocesseur

 Unité de commande :Elle permet de séquencer le


déroulement des instructions

- PC « Programme Counter » :

Appelé aussi Compteur Ordinal. Il contient


toujours l’adresse de la prochaine instruction
à exécuter
Microprocesseur

 Unité de commande : Elle permet de séquencer le


déroulement des instructions

- Bloc logique de commande (séquenceur) :

Il organise l'exécution des instructions au rythme


de l’horloge
Microprocesseur

 Unité de commande :Elle permet de séquencer le


déroulement des instructions

- Le décodeur d'instruction :

Le mot binaire (instruction) est décodé pour


savoir à quelle action correspond l’instruction
Microprocesseur/Architecture

Il existe fondamentalement des types d'architectures informatiques


numériques :
• Architecture de Von Neuman
• Architecture Harvard
• Architecture CISC & RISC
Architecture de Von Neuman

 Un seul chemin d'accès à la mémoire :


- Un bus de données (programme et données) ;
- Un bus d’adresse (programme et données)
 Goulot d'étranglement pour l'accès à la mémoire
Architecture de HARVARD

 Séparation des mémoires programme et données


- Un bus de données pour programme et pour les données
- Un bus d’adresse pour programme et pour les données
 Meilleure utilisation du CPU
 Chargement du programme et des données en parallèle
Architecture CISC & RISC

- Les processeurs généraux actuels se répartissent en deux


grandes catégories appelées CISC et RISC
- Les processeurs de ces deux catégories se distinguent par la conception
de leurs jeux d'instructions

 Jeu d’instructions
Toutes les instructions compréhensibles par les microprocesseur forment ce
que l’on appelle le jeu d’instructions
Architecture CISC & RISC

On distingue 2 types de jeu d’instructions :


- RISC (Reduced Instructions Set Computer) : Il s’agit d’un plan de conception
de CPU basé sur des instructions simples et rapide

- CISC (Complex Instructions Set Computer) : Il s’agit d’un plan de conception


du CPU basé sur des instructions uniques, capables d’exécuter des
opérations en plusieurs étapes.
Architecture CISC & RISC

Instructions Exécution des


RISC Machine Instructions

Instructions Exécution de
CISC Machine
Micro-Instructions
Micro-Instructions
Le traitement des instructions

• (1) Charger une instruction depuis la


mémoire
• (2) Charger les opérandes depuis la
mémoire
• (3) Effectuer les calculs
• (4) Stocker le résultat en mémoire
Microcontrôleur

Définitions

- Le Microcontrôleur est un circuit intégré qui contient un petit


system informatique

Département
Microcontrôleur

 Contenu type d’un microcontrôleur

La structure interne d'un microcontrôleur comporte typiquement :

• Une unité de calcul et de commande

• Mémoire ROM & Mémoire RAM

• Un contrôleur d’interruption

• Un compteur / temporisateur (timer)

• Des entrées / sorties parallèles (ports)

• Un UART (port série)


Microcontrôleur

 Contenu type d’un microcontrôleur

Il peut aussi posséder :

• Une sortie PWM (modulation d’impulsion)

• Un CAN/CNA (Convertisseur analogique numérique)

• Un Watchdog (surveillance du programme)


Microcontrôleur

 Architecture interne d’un Microcontrôleur


Microcontrôleur

 Architecture interne d’un Microcontrôleur

Les mémoires (RAM / EEPROM / EPROM FLASH)


Microcontrôleur

 Architecture interne d’un Microcontrôleur


A. Les mémoires (rappel)

Une mémoire est un composant électronique à base de semi-


conducteurs permettant de stocker des informations sous
forme binaire
Microcontrôleur

 Architecture interne d’un Microcontrôleur


A. Les mémoires (rappel)
Memoire

• Un emplacement qui contient des données.


• Organisé par cellules individuelles.
• Chaque cellule possède:
 (la même) taille: en nombre de bits.
 une adresse unique: permet de savoir à quel endroit on veut
stocker l’information.
Mémoire=Stockage de bits
On regroupe les bits ensemble
pour former un «mot».
Ici, les mots ont 8 bits (1 octet)
0 1 0 1 1 0 1 1 Chaque case contient un bit (0 ou 1)

1 1 1 0 1 0 0 1

0 1 0 0 1 0 0 1
Une case ne peut jamais être
0 1 0 0 1 1 0 1 «vide»!
Elle contient toujours 0 ou 1.
0 1 1 1 1 0 0 0

⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮

1 1 0 1 0 0 0 1

Pour identifier les mots, on leur associe une adresse, qui correspond au numéro de ligne dans le
tableau.
Mémoire=Stockage de bits

Adresse Donnée (mot de 8 bits)


On utilise un nombre (fini et (sur 8 bits)
Ici, l’exemple utilise 8 bits d’adresse, et
prédéterminé) de bits pour
représenter l’adresse. 0x00 0 1 0 1 1 0 1 1 des mots de 8 bits.

0x01 1 1 1 0 1 0 0 1

0x02 0 1 0 0 1 0 0 1
Différents systèmes
0x03 0 1 0 0 1 1 0 1 peuvent avoir différentes valeurs!

0x04 0 1 1 1 1 0 0 0

⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮

0xFF 1 1 0 1 0 0 0 1
Memoire

• On décrit une mémoire grâce à deux informations (indépendantes):


• le nombre d’adresses possibles
• Dans l’exemple : 28 = 256 adresses
• la taille des mots de la mémoire
• Dans l’exemple : 8 bits (1 octet)
• La taille totale de la mémoire représente la quantité totale de bits
pouvant être stockée dans la mémoire.
• Elle est calculée de cette façon:
taille mémoire = nombre d'adresses ×
taille d'un mot
= 28 × 1 octet = 256 octets
En résume

• C’est le CPU qui initie toute action.


Adresse
• Une lecture s’effectue en deux temps.

Lecture d’une donnée en mémoire


Adresse

CPU RAM Le CPU:


L/E Données
• place l’adresse (ex: 0x40) sur le bus
d’adresses;
Données
• active le bus de contrôle en lecture.
Contrôle (L/E)
En résume

Adresse

La mémoire:
• place la donnée correspondante sur le
Adresse bus de données;
CPU RAM
L/E Données

Le CPU:
Données
• récupère la donnée (ex: 0x12) sur le
Contrôle (L/E)
bus de données (et la place dans un registre).
En résume

écriture d’une donnée en mémoire


Adresse

Le CPU:
Adresse
• place l’adresse (ex: 0x40) sur le bus
d’adresses;
CPU RAM
• la donnée à écrire (ex: 0xAB) sur le
L/E Données
bus de données;
Données • active le bus de contrôle en écriture.
Contrôle (L/E)

La mémoire:
• récupère la donnée (ex: 0xAB) sur le bus de données;
• l’écrit à l’adresse disponible sur le bus d’adresse (ex: 0x40).
Une banque de registres

• ALU ne communique pas directement avec la mémoire pour faire ses


calculs.
• elle est connectée à des registres dont l’accès peut se faire en un seul
cycle d’horloge.
• Deux catégorie des registres
o A usage générale : stockage des infos alimentant les calculs
o A usage spécifiques : dédiées a une fonctionnalités précise
Scrutation Vs interruption

• Scrutation (polling)
Coûteux en temps (multiplier par le nombre de périphérique à interroger)
Implémentation : Appel classique à une fonction dans le programme

• Interruption
Demande à l’initiative du périphérique
Prise en compte rapide de l’évènement
Implémentation : Interruption asynchrone d’un programme puis retour au
même endroit à la fin du traitement
Les interruptions/role de la pile

• La pile est une mémoire LIFO (Last In First Out) dans laquelle on stoke des
variable temporaire (donnée ou adresse). Le haut de la pile est pointé par le
registre SP (Stack Pointer).
Les interruptions/role de la pile

Elle va servir à :

• sauvegarder le contexte l’environnement (adresse du


programme et valeur des registres au moment de
l’interruption).

• restituer le contexte à la fin de l’interruption


Architectures des processeurs ARM
ARM Holding

ARM Holdings:
• développe des architectures de processeur et des jeux d’instructions
• ne construit aucun processeur comme intel La compagnie licencie la technologie à d’autres
qui l’implémentent à leur façon en hardware.
• clients: Apple, Nvidia, Samsung, Texas Instruments, etc…

Processeur ARM
• Supportent 32 et 64 bits
• L’architecture la plus utilisée au monde
• 10 milliards produits en 2013
• 98% de téléphones portables contiennent au moins 1 processeur ARM
ARM7xx

• ARM ne fabrique aucun composant, une société spécialisée au début des années 90 dans la
conception d’architectures de cœur de microcontrôleurs 32 bits et maintenant 64 bits.

• Elle vend ensuite sous licence ses produits à des fondeurs qui fabriquent alors les
microcontrôleurs en ajoutant de la mémoire, des unités périphériques diverses, le tout en
quantité variable pour donner naissance à des familles de produits

• Les cœurs 32 bits d’ARM sont basés sur une architecture dite de type Von nueman. Cela veut
dire qu’elle ne sépare pas physiquement les accès à la “mémoire code” (le stockage du
programme) des accès à la “mémoire données”
Qu’est ce qu’un ARM7TDMI?

Il s’agit en fait d’un « cœur » de processeur initialement conçu par la société britannique ACORN.
Un "cœur" signifie que ce processeur est vendu comme bloc à utiliser dans un circuit qui intègre
d'autre blocs pour constituer un système sur puce "SoC ".

• 3 étages de pipeline : Fetch, Decode, Execute


• Instructions sur 32 Bits
• 2 instructions d'accès à la mémoire LOAD et STORE
• T : support du mode "Thumb" (instructions sur 16 bits)
• D : extensions pour la mise au point
• M : Multiplieur 32x8 et instructions pour résultats sur 64 bits.
• I : émulateur embarqué ("Embedded ICE" )
Architecture des ARM (32 bits)

Dans le cours: ARM7TDMI (architecture 32 bits populaire)

• Registres de 32 bits
• Instructions de 32 bits
• Adresses de 32 bits

Architecture RISC pour laquelle tout passe par des registres.

Accès à combien de mémoire?


232 octets (4GB) de mémoire
Pipeline

• Début des années 1990

• Idée: séparer l’architecture en deux unités séparées, pouvant être exécutées


simultanément

• Comme dans un restaurant:

-“Fetch-decode”: les serveurs vont prendre les commandes des clients


aux tables
- “Execute”: les cuisiniers préparent les repas
Les étages Pipeline

Fetch Decode Execute


Fetch Decode Execute
Fetch Decode Execute

• Fetch : L’instruction est lue dans la mémoire.


• Décode : Décodage de l’instruction
• Execute : Lecture des registres, opérations ALU, décalage, écriture des résultats
vers les registres

La grande majorité des instructions prenant 1 cycle horloge (dans le cas où on ne travaille que
sur les registres).
Pipeline ARM

Adresse Instruction
execution 0x0 ADD R0,R1,R2
décodage 0x4 MOV R0,#0xf4
lecture 0x8 LDR R0,[R0]

Donc, PC contient l’adresse de l’instruction courante (exécutée) + 8!


Big vs Little Endian

comment stocker un mot de 32 bits (4 octets) à l’adresse 0x0? exemple:


0x12345678?

Little Endian

Ou

Big Endian
Les Registres
16 registres de 32 bits sont disponibles:

• R0 à R12: usage général


• R13 à R15: registres “spéciaux”
• Le “Current Program Status Register” (CPSR) est utilisé pour mémoriser les
résultats d’opération
Le registres spéciaux R13 à R15:
• R13: Pointeur de pile (Stack Pointer ou SP)
• R14: Registre de liens (Link Register ou LR)
• R15: Compteur de programme (Program Counter ou PC)
Le registre “Program Counter” R15

Le contenu du PC indique à quel endroit de la mémoire se trouve la prochaine


exécution que le processeur doit lire
• PC identifie des octets tandis que la mémoire est composée de mots de 4 octets
• Il y a 232 octets qui peuvent être adressés donc 232 /4 = 230 mots de 4 octets à
représenter avec le registre PC
 C’est dire que les deux bits de poids le moins significatif du registre PC
ne servent pas
• 2 considérations importantes:
 après chaque exécution, de combien doit-on incrémenter PC?
• PC = PC + 4
 qu’est-ce que contient PC?
• PC = adresse de deux instructions plus loin que l’instruction
exécutée
• PC = adresse de l’instruction exécutée + 8
Piles ‘’stacks’’/Le “Stack Pointer” (R13)

• Structure de données “LIFO”

• Deux opérations principales:


• PUSH: rajoute un élément sur “le dessus” la pile
• POP: enlève un élément du “dessus” de la pile

• Par convention, on définit un bloc de mémoire qu’on nomme “pile” (stack)


• La pile est utilisée pour sauvegarder temporairement des valeurs de travail
• exemples: variables locales, paramètres et valeurs de retour des
fonctions
• Le Stack Pointer contient une adresse de la pile à laquelle on peut écrire ou lire
une valeur
Le Link Register (R14)

• Un appel de fonction à l’aide d’instructions dédiées entraîne un changement de la


valeur du Program Counter
• Un retour de fonction ne peut se faire que si PC reprend sa valeur d’avant l’appel
de la fonction
• Par convention, le Link Register est utilisé pour sauvegarder l’adresse de retour
pendant l’exécution de la fonction
• Mettre la valeur de LR dans PC commande un retour de fonction
• Utiliser LR à d’autres fins ne peut que causer des problèmes si on n’a pas le plein
contrôle du programme
Registre de statut (CPSR)

Un registre de statut décrit l’état du processeur

Unused

Sélection du mode
Dépassement (overflow) Thumb actif
Retenue (carry/borrow ) FIQ inactif
Valeur nulle (zero) IRQ inactif
Nombre négatif (negative )
Les modes du Microprocesseur

Un microprocesseur ARM a 7 modes opératoires de base :

o User : mode sans privilège où la plupart des tâches s’exécutent


o FIQ : on y entre lors d’une interruption de priorité haute (rapide)
o IRQ : on y entre lors d’une interruption de priorité basse (normale)
o Supervisor : on y entre à la réinitialisation et lors d’une interruption
logicielle (SWI “SoftWare Interrupt”)
o Abort : utilisé pour gérer les violations d’accès mémoire
o Undef : utilisé pour gérer les instructions non définies (“undefined”)
o System : mode avec privilège utilisant les mêmes registres que le mode
User
Introduction à l’assembleur ARM

De quoi une instruction est-elle constituée?

• “Opcode” (ou code d’opération): code identifiant quelle instruction est


effectuée (MOV, LDR, etc.)
• Paramètres: un ou plusieurs, dépendent de l’opcode.

L’assembleur nous permet de donner un nom à des adresses mémoires: ce sont les
constantes et les variables!

• constante = ne change pas


• variable = peut changer
Déclaration d’une constante ARM

• Déclarer une constante (réserve de l’espace en ROM)

Nom DCss valeur

o “nom” est le nom de la constante


o “DCss": C=constante, ss indique la taille. Par exemple:
• DC8: constante de 8 bits
• DC32: constante de 32 bits
o “valeur”: la valeur de la constante
o Exemple

a DC32 0xAB
b DC32 0xF2
Déclaration d’une variable ARM

• Déclarer une constante (réserve de l’espace en RAM)

Nom DSss valeur

o “nom” est le nom de la constante


o “DSss": S=variable, ss indique la taille. Par exemple:
• DS8: constante de 8 bits
• DS32: constante de 32 bits
o “valeur”: la valeur de la constante
o Exemple

a DS32 1
Tableaux (constants et variables)

• Déclarer un tableau :

nom DCss el1 el2 el3 ... ; Constante


nom DSss nombreElements ; Variable

o “nom” est le nom de la variable/constante


o “D*ss”: ss indique la taille
o “el1 el2 el3”: la valeur des éléments du tableau s’il s’agit d’une
constante
o “nombreElements”: le nombre d’éléments dans le tableau s’il s’agit
d’une variable
o Exemple

a DS32 3 ; tableau de 3 mots de 32 bits chacun


b DC8 0x01 0x02 0x03 ; tableau de 3 octets
Tableaux (constants et variables)

• Les tableaux peuvent être vus comme des chaînes de variables.


• Une chaîne texte est un exemple de tableau d'octets, chaque caractère est
présenté comme un élément de code ASCII (0 à 255).
• Exemple :

strA DC8 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x00


strB DC8 'Hello', 0

• strA est la copie exacte de strB. Lorsque le compilateur voit une chaîne entourée
par des ' ', il la convertit automatiquement en un ensemble d'octets.
6 types d’instructions en ARM

• Déplacement de données: Transfert de données ou de constante impliquant des registres seulement.

• Accès à la mémoire: l’instruction, un load ou store, lit ou écrit la mémoire. La valeur lue est mise dans un
registre. La valeur écrite provient d’un registre.

• Opération arithmétique: addition, soustraction, multiplication, division et plus. Les calculs s’effectuent
sur des registres et peuvent changer les drapeaux de l’unité d’arithmétique et de logique (ALU).

• Opération logique: ET, OU, NON-OU, OU EXCLUSIF et plus. Les calculs s’effectuent sur des registres et
peuvent changer les drapeaux de l’unité d’arithmétique et de logique (ALU).

• Gestion de la séquence d’instructions: saut et branchements. Peuvent être conditionnels ou


inconditionnels, à des adresses directes ou indirectes. Comprend les appels de fonctions.

• Contrôle du système: Comprend toutes les autres instructions contrôlant le microprocesseur. Permet de
gérer le temps, le format des instructions, l’exécution en pipeline, les interruptions et plus.
Déplacement de Données: MOV
L’instruction
MOV Rn Op1

met l’opérande de type 1 Op1 dans le registre Rn


o Opérande de type 1:
• Constante (valeur immédiate): toujours précédée du symbole #
• Registre
• Registre décalé
• Le décalage est fait avant l’opération. Cinq opérations sont possibles:
LSL, LSR, ASR, ROR et RRX. Ces opérations sont détaillées par la suite.
Exemple :
MOV R0, #1234 ; R0 = 1234
MOV R0, R1 ; R0 = R1
MOV R0, R1, ASR #2 ; R0 = R1 / 4
Accès Mémoire: Load/Store

 Les accès à la mémoire se font avec deux 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.

 Ces instructions ont le format


LDR Rd, Op2
STR Rs, Op2

• Rd et Rs décrivent le registre de destination ou de source


• Op2 est une opérande de type 2
Load/Store Multiple

• Les instructions LDM (LoaD Multiple) et STM (Store Multiple) permettent de lire
des mots de mémoire contigus et de mettre les valeurs lues dans plusieurs registres.
Une seule instruction LDM peut remplacer plusieurs instructions LDR si les adresses
visées se suivent.
• Les instructions LDM et STM sont utilisées pour lire/écrire des données de
tableaux ou pour sauvegarder/récupérer de l’information sur la pile
• Syntaxe: mm = DB (Decrement Before), ou IA (Increment After)

LDMmm Ra{!}, {Liste de registres}


• Exemple:

STMDB SP!, {R0, R1} ; R0 = Mem[SP-4], R1 = Mem[SP-8], SP = SP-8


LDMIA SP!, {R0, R1} ; R0 = Mem[SP], R1 = Mem[SP+4], SP = SP+8
Tableaux (constants et variables)

• Déclarer un tableau :

nom DCss el1 el2 el3 ... ; Constante


nom DSss nombreElements ; Variable

o “nom” est le nom de la variable/constante


o “D*ss”: ss indique la taille
o “el1 el2 el3”: la valeur des éléments du tableau s’il s’agit d’une
constante
o “nombreElements”: le nombre d’éléments dans le tableau s’il s’agit
d’une variable
o Exemple

a DS32 3 ; tableau de 3 mots de 32 bits chacun


b DC8 0x01 0x02 0x03 ; tableau de 3 octets
Décalage de bits

• LSL, Logical Shift Left, décale les bits vers la gauche et met des zéros à droite.
Décaler un bit vers la gauche équivaut à multiplier par 2. Carry devient égal au bit le
plus significatif.
• LSR, Logical Shift Right, décale les bits vers la droite et met des 0 à gauche. Décaler
un bit vers la droite équivaut à diviser un nombre non-signé par 2. Carry devient égal
au bit le moins significatif.
Carry Valeur sur 8 bits
Initial C b7 b6 b5 b4 b3 b2 b1 b0

Initial*2 b7 b6 b5 b4 b3 b2 b1 b0 0 LSL#1 LSR#1

Initial/2 b0 0 b7 b6 b5 b4 b3 b2 b1
Décalage de bits

• ASR, Arithmetical Shift Right, décale les bits vers la droite et copie le bit le plus
significatif à gauche. Décaler un bit vers la droite en conservant le bit de signe
équivaut à diviser un nombre signé par 2. Carry devient égal au bit le moins
significatif.
• LSR, Logical Shift Right, décale les bits vers la droite et met des 0 à gauche. Décaler
un bit vers la droite équivaut à diviser un nombre non-signé par 2. Carry devient égal
au bit le moins significatif.
Carry Valeur sur 8 bits
Initial C b7 b6 b5 b4 b3 b2 b1 b0

Initial b70 b7 b7 b6 b5 b4 b3 b2 b1 ASR#1 ROR#1 ou


signe /2
RXR
Initial
with c b0 C b7 b6 b5 b4 b3 b2 b1
Instructions arithmétiques et logiques

• Les opérations mathématiques et logiques ont la forme


INSTRUCTION Rd, Rs, Op1


• Rd est le registre de destination
• Rs est un registre source
• Op1 est une opérande de type 1
Le format de l’instruction ADD, par exemple, est:

ADD Rd, Rs, Op1 ; Rd = Rs + Op1

ADD R0, R0, #1 ; R0 = R0 + 1


ADD R0, R0, R1 ; R0 = R0 + R1
ADD R0, R0, R1, LSL #1 ; R0 = R0 + (R1 * 2)
Instructions arithmétiques et logiques

• Soustraction
SUB R0, R0, #1 ; R0 = R0 - 1
SUB R0, R0, R1 ; R0 = R0 - R1
• Décalage
LSL R0, R0, #1 ; R0 = R0 * 2
ASR R0, R0, #2 ; R0 = R0 / 4 (préserve le signe)
• “Et” logique

AND R0, R0, #1 ; R0 = R0 ET 1


AND R0, R0, R1 ; R0 = R0 ET R1

• Prendre le négatif

RSB R0, R0, #0 ; R0 = 0 - R0, donc R0 = -R0


Instructions avec drapeaux

• Les instructions arithmétiques et logiques changent les drapeaux de l’ALU, lorsque l’option “S” est
rajoutée après le nom de l’instruction

INSTRUCTIONS Rd, Rs, Op1 ; exécute l’instruction,


; et met à jour les drapeaux

• Exemple:

SUBS R0, R1, R2 ; R0 = R1 - R2


; et met à jour les drapeaux
Instructions conditionnelles

• L’instruction
MOVcc Rn Op1

met l’opérande de type 1 Op1 dans le registre Rn, si la condition cc est vraie
• Exemple:

MOVEQ R3, R1 ; R3 = R1 seulement si le drapeau Z est 1


ADDNE R2, R2, R1 ; R2 = R2 + R1 seulement si le drapeau Z est 0

Équivalent, en C, à:

if (Z == 1) { R3 = R1; }
if (Z == 0) { R2 = R2 + R1; }
Codes condition
Toutes les instructions sont codées sur 32 bits dont les 4 bits de poids fort définissent les 16
conditions d’exécution possibles :
Valeur Absolue

R0 = abs(R1 - R2) ; valeur absolue

Pour ce faire:
• R0 = R1 - R2 si R1 > R2
• R0 = R2 - R1 sinon
Solution (à 3 instructions):
CMP R1, R2 ; calcule R1 - R2, change les drapeaux
SUBGT R0, R1, R2 ; si R1 > R2, R0 = R1 - R2
SUBLE R0, R2, R1 ; si R1 <= R2, R0 = R2 - R1

Solution (à 2 instructions):

SUBS R0, R1, R2 ; calcule R1 - R2, change les drapeaux


RSBLE R0, R0, #0 ; si R1 <= R2, R0 = -R0 (donc R0 = R2 - R1) Reverse subtract
Séquence d’exécution et branchements/Sauts Absolus

• PC est un registre et peut être modifié comme les autres registres,


avec la plupart des instructions
• Modifier la valeur de PC correspond à effectuer un saut absolu à une
adresse.
Sauts Relatifs

• Dans plusieurs cas, on ne veut pas exécuter l’instruction à l’adresse X,


mais exécuter l’instruction qui se trouve à N octets de l’instruction
courante: on veut « déplacer » PC par rapport à sa valeur actuelle
• L’instruction B (Branch) modifie PC relativement à sa valeur actuelle:

B Offset
Branchements conditionnels: if

• Exemple en C

if (MaVar == 4)
{
// exécute une tâche…
}
// le programme continue…

• En Assembleur

LDR R0, MaVar ; Met la valeur de MaVar dans R0


CMP R0, 4 ; Change les drapeaux comme R0-4
BNE PasEgal
; execute une tâche…
PasEgal
; le programme continue…
Branchements conditionnels : if/else
• Exemple en C

if (MaVar == 4) {
// exécute une tâche…
}
else {
// exécute une autre tâche…
}
// le programme continue…

• En Assembleur

LDR R0, MaVar ; Met la valeur de MaVar dans R0


CMP R0, 4 ; Change les drapeaux comme R0-4
BNE PasEgal
; execute une tâche…
B Continue
PasEgal
; exécute une autre tâche…
Continue ; le programme continue...
Boucles
• En assembleur, le début de toutes les boucles est identifié par une étiquette
qui permet de revenir au début de la boucle
for (int i = 0; i < 5; ++i) {
// tâche à l’intérieur de la boucle
}
// le programme continue…

• En Assembleur

InitDeBoucle
MOV R4,#5
DebutDeBoucle
; tâche à l’intérieur de la boucle
SUBS R4, R4, #1 ; R4 = R4 - 1, change les drapeaux
BNE DebutDeBoucle ; Condition d’arrêt
; le programme continue…
Appel de Fonction et Adresse de Retour
• Appeler une fonction signifie mettre PC au début de la fonction pour exécuter les instructions
constituant la fonction.

• Retourner d’une fonction signifie reprendre l’exécution d’où l’appel s’est fait. Il faut revenir à
l’endroit où nous étions: c’est l’adresse de retour.

• Une fonction est un ensemble d’instructions à une adresse donnée. Cette adresse est identifiée par
une étiquette

• Pour pouvoir revenir à plus d’un endroit, il faut sauvegarder l’adresse de retour avant de faire le
branchement.

• Instruction BL (Branch and Link):

BL Adresse ; met l’adresse de retour dans LR


Appel de Fonction et Adresse de Retour

• Après l’exécution de la fonction, on place PC = LR pour continuer l’exécution après l’endroit où la


fonction a été appelée,
•avec l’instruction BX (Branch and eXchange):

BX Rm ; PC = Rm (Rm peut être n’importe quel registre


La pile

• Le registre SP (Stack Pointer) devrait indiquer le dessus de la pile en tout temps.


• PUSH
PUSH {Rs} ; Place le contenu de Rs sur la pile, SP = SP - 4
PUSH {R0, R1, R2} ; Place le contenu de R0, R1, et R2 sur la pile,
; SP = SP - 12

Permet de mettre une (ou plusieurs) donnée(s) sur la pile.


• POP
POP {Rd} ; Place le contenu sur la pile dans Rd, SP = SP + 4
POP {R0, R1, R2} ; Place le contenu sur la pile dans R2, R1, et R0
; (dans l’ordre), SP = SP + 12

Permet de récupérer une (ou plusieurs) donnée(s) de la pile.


Appel de fonctions — conventions

Paramètres:
• On se sert de R0 à R3 lorsqu’il y en a 4 ou moins
• S’il y en a plus?
• On utilise la pile… et/ou la mémoire

Valeur de retour:
• On se sert de R0 lorsqu’il y en a 1 ou moins
• S’il y en a plus?
• On utilise la pile… et/ou la mémoire
Appel de fonction: 1 paramètre et 1 retour

• On place la valeur du paramètre dans R0 juste avant l’appel


• L’instruction BL commande un branchement
• R0 contient la valeur de retour une fois la fonction exécutée
En C

Retour = FonctionAUnParametre(0x12);

En Assembleur

MOV R0, #0x12 ; R0 contient le paramètre de la fonction


BL FonctionAUnParametre ; Appel de la fonction
MOV R3, R0 ; Récupère le résultat de la fonction
Exemple

En C

int FonctionAUnParametre (int param)


{
return param + 1;
}

En Assembleur

FonctionAUnParametre
ADD R0, R0, #1 ; R0 contient le paramètre de la fonction
BX LR ; R0 contient le résultat de la fonction
Les interruptions
Bref retour sur l’appel de fonctions

• Une interruption interrompt l’exécution des instructions par le


microprocesseur.

• Lors d’une interruption:


• l’exécution du programme principal est suspendue;
• une sous-routine traitant l’interruption est exécutée;
• puis le programme principal est continué.

• Différence entre interruptions et un branchement ou un appel de


fonction?
• les interruptions peuvent survenir n’importe quand pendant
l’exécution.
Les interruptions

Les interruptions

1. Terminer l’instruction en cours


2. Déterminer s’il faut traiter l’interruption.
3. Sauvegarder le contexte
4. Déterminer l’adresse de la routine de traitement de l’interruption
5. Exécuter cette routine

Traitement de l’interruption

1. Restaurer le contexte
2. Reprendre là ou le processeur était rendu
Types d’interruptions

• Système: reset, faute matérielle générale, etc.

• Exception: erreur au cours de l’exécution des instructions, par exemple:


• instruction invalide
• division par 0
• tentative d’accès à de la mémoire protégée

• Matérielles: générées par les périphériques, par exemple:


• le clavier
• l’imprimante etc.

• Logicielles: générées par le programmeur avec une instruction spéciale (présente dans
tous les jeux d’instructions)
Les interruptions ARM

Il y a 7 types d’interruptions dans le microprocesseur ARM:

1. Reset: redémarrage du microprocesseur


2. Interruption logicielle: activée par l’instruction SVC pour utiliser les fonctions
systèmes (par exemple pour communiquer avec les périphériques);
3. Data abort: accès mémoire invalide lors d’un LDR;
4. Prefetch abort: accès mémoire invalide lors de la lecture d’une instruction
(étape « lecture » dans le pipeline)
5. Instruction indéfinie: erreur dans le décodage d’une instruction
6. IRQ: activée par un périphérique (Interrupt ReQuest)
7. FIQ: activée par un périphérique, mais qui peut être traité plus rapidement
qu’une IRQ (Fast Interrupt reQuest)
Priorité

• Les interruptions ont des priorités: une interruption de haute priorité


peut interrompre une interruption ayant un niveau de priorité plus
bas.

• Certaines interruptions peuvent survenir n’importe quand, même


pendant une autre interruption.

• Certaines interruptions, comme «reset», ont une priorité (maximale


pour «reset») qui ne peut pas être changée.
Priorité

Priorité Interruption
Plus haute Reset
« Data abort »
FIQ
IRQ
« Prefetch abort »
Plus basse Interruption logicielle et instruction
indéfinie
Routines de traitement d’interruptions

• Les routines de traitement d’interruptions sont des fonctions « spéciales »


que l’on appelle que pour traiter les interruptions

• Où sont-elles situées?
• en mémoire!

• Comment fait-on pour savoir:


• quelle routine exécuter pour quelle interruption?
• à quelle adresse est cette routine?

• Grâce à la table des vecteurs d’interruption,


Table des vecteurs d’interruption
• Chaque entrée de la table contient une instruction qui « branche » vers la routine
correspondante
Adresse Interruption Signification
0x00 Reset redémarrage
0x04 Instruction indéfinie problème lors du décodage
0x08 Interruption logicielle demandée par le programmeur:
instruction SVC
0x0C « Prefetch abort » « fetch » invalide
0x10 « Data abort » accès mémoire invalide
0x14 Espace réservé ne rien mettre ici
0x18 IRQ « Interrupt ReQuest »:
interruption matérielle générale
0x1C FIQ « Fast Interrupt reQuest »:
interruption matérielle rapide
Registre de statut (CPSR)

registre d’état, le Current Program Status Register (CPSR)


• mémorise les résultats d’opérations arithmétiques
• stocke le « mode d’exécution »

Unused

Sélection du mode
Dépassement (overflow) Thumb actif
Retenue (carry/borrow ) FIQ inactif
Valeur nulle (zero) IRQ inactif
Nombre négatif (negative )

Vous aimerez peut-être aussi