55 lines
2.8 KiB
Markdown
55 lines
2.8 KiB
Markdown
# Intro
|
||
## Mode de fonctionnement
|
||
A l'initialisation du processeur, le mode "system" est activé
|
||
|
||
|Processor mode|Notation|Description|
|
||
|---|---|---|
|
||
|User|\_usr|The normal program execution mode|
|
||
|FIQ|\_fiq|Designed to support a high-speed transfer or channel process|
|
||
|IRQ|\_irq|Used for general–purpose interrupt handling|
|
||
|Supervisor|\_svc|A protected mode for the operating system|
|
||
|Abort|\_abt|Used to implement virtual memory and/or memory coprocessor|
|
||
|Undefined|\_und|Used to support software emulation of hardware coprocessor|
|
||
|System|\_sys|Used to run privileged operating system tasks|
|
||
|
||
## Les registres du processeur ARM
|
||
![[Pièces jointes/Pasted image 20230928150906.png]]
|
||
### Rôle des registres
|
||
- Les registres `r0` à `r12`sont libre pour un usage général
|
||
- Le registre `r13`appelé `SP`(Stack Pointer) sert comme pointeur de pile propre à chaque mode
|
||
- Le registre `r14` appelé `LR`(Link Register) mémorise l'adresse de retour lors d'un appel de fonction
|
||
- Le registre `r15`appelé `PC`(Program Counter) pointe sur la prochaine instruction à exécuter
|
||
- `CPSR`(Current Program Status Register) est le registre d'états courant du processeur
|
||
- `SPSR` (Saved Program Status Register) est le registre de sauvegarde de l'ancien registre d'états
|
||
|
||
### Registres `CPSR`et `SPSR`
|
||
Les registres `CPSR`et `SPSR`regroupent:
|
||
- Les fanions concernant la plus récente opération réalisée par l'ALU
|
||
- Les bits d'acceptation ou de refus d'interruptions électriques
|
||
- Le mode du processeur codé sur 5 bits
|
||
- Le bit d'activation du jeu d'instructions Thumb
|
||
![[Pièces jointes/Pasted image 20231120100133.png]]
|
||
|
||
## Les fanions
|
||
A chaque opération mathématique ou logique, l'ALU peut positionner des fanions
|
||
- **N** `Negative` - Nombre négatif. C'est le bit de signe du nombre en complément à 2
|
||
- **Z** `Zero` - Nombre = 0. Utilisé généralement avec des compteurs pour effectuer des boucles
|
||
- **C** `Carry` - Retenue ou dépassement de capacité lors d'opérations sur des nombres logiques
|
||
- **V** `oVerflow` - Dépassement de capacité lors d'opérations arithmétiques en complément à 2
|
||
>[!warning]
|
||
>Toute les instructions n'affectent pas tous les fanions
|
||
|
||
## Exécution conditionnelle
|
||
Chaque instruction du processeur ARM peut-être exécutée sous condition
|
||
- Pour rendre une instruction conditionnelle, il suffit d'ajouter deux lettres à sa mnémonique
|
||
- L'opcode de chaque instruction comprend un champ "condition"
|
||
![[Pièces jointes/Pasted image 20231120103537.png]]
|
||
```armasm
|
||
CMP r0, r1 ; Update flags based on r0 - r1
|
||
ADDGT r0, r0, #4 ; If r0 greater than r1 THEN r0 = r0 + 4
|
||
; ELSE ADDGT is skipped
|
||
ADDLT r1, r1, #4 ; IF r0 less than r1 THEN r1 = r1 + 4
|
||
; ELSE ADDLT is skipped
|
||
```
|
||
![[Pièces jointes/Pasted image 20230928151308.png]]
|
||
# Instructions de branchement |