3.8 KiB
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
Rôle des registres
- Les registres
r0àr12sont libre pour un usage général - Le registre
r13appeléSP(Stack Pointer) sert comme pointeur de pile propre à chaque mode - Le registre
r14appeléLR(Link Register) mémorise l'adresse de retour lors d'un appel de fonction - Le registre
r15appeléPC(Program Counter) pointe sur la prochaine instruction à exécuter CPSR(Current Program Status Register) est le registre d'états courant du processeurSPSR(Saved Program Status Register) est le registre de sauvegarde de l'ancien registre d'états
Registres CPSRet SPSR
Les registres CPSRet SPSRregroupent:
- 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
!

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"
packetdiag {
colwidth = 32;
node_height = 15;
28-31: Cond;
}
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
Instructions de branchement
Instruction B
B{cond} label
Le champ offset autorise un saut de \pm 32 Mbytes (2^{24}<<2) /2
Carry
Pour déterminer si une opération active le flag de carry, interprétez les deux arguments comme des entiers non signés.
Addition (inclus CMN)
Le flag Cest set à 1 si l'addition produit un carry sinon le flag et set à 0.
Soit l'addition x+y avec x et y interprété comme entier non signé. Si x+y est trop grand pour être représenté comme un entier de 32 bit, C est set à 1. Si x+y peut être représenté comme un entier de 32 bit, C est set à 0.
Soustraction (inclus CMP)
Le flag C est set à 0 si la soustraction produit un borrow (p ex. si le résultat en non signé underflow). Sinon le flag est set à 1.
Soit la soustraction x-y avec x et y interprété comme entiers non signé. Si x<y, le résultat devrait être négatif, C est set à 0. Si x\geq y, C est set à 1.
$$\begin{align}
x < y &\to C=0 \
x \geq y &\to C=1
\end{align}$$

