Processeur
Le processeur est la partie centrale d'un ordinateur. C'est lui qui exécute les instructions données par un programme. Les processeur sont tous différents, mais ils ont des caractéristiques communes.
Mais comment ça marche ?
Les registres
Tout d'abord le processeur utilise des registres dans lequel il stocke les résultats des instructions et lui permettent d'aller chercher les données nécessaire à l'instruction à exécuter.
Le pointeur d'instruction (PC)
Le pointeur d'instruction indique l'adresse de la prochaine instruction à exécuter. Après l'exécution de l'instruction il avance d'autant de mots que l'instruction occupe. Les instructions les plus élémentaires ne nécessitent qu'un mot alors que des instructions plus complexe en occupent plus.
Il arrive que le pointeur d'instruction soit accompagné d'un pointeur de segment mémoire lorsque la taille du mot machine est insuffisante pour adresser l'ensemble de la mémoire.
Le registre d'état (SR)
Le registre d'état recense les différents drapeaux d'état qui sont altérés en fonction des instructions. Parmi ces drapeaux nous avons:
- La retenue (carry flag)
- Le dépassement (overflow): activé lorsqu'un calcul dépasse la capacité d'un mot machine.
- Le zéro (zero flag): Change d'état en fonction des instructions de comparaison.
- Le négatif : activé lorsque le résultat d'une instruction est une valeur négative
L'accumulateur (A)
Il s'agit du registre principal pour les opérations arithmétiques et logique.
Le pointeur de pile (SP)
La pile peut servir à stocker des résultats intermédiaires de calculs, mais également à stocker les adresses de retour pour les instructions d'appel.
Les index (X, Y)
La valeur en mémoire est récupérée ou stockée à l'emplacement mémoire indiqué en décalant de la valeur de l'index. Nous verrons plus qu'il existe différents adressages indexés.
Les adressages
Le processeur à besoin de consulter des données et de stocker le résultat des instructions. Pour cela il dispose de différents stratégies d'adressage. J'ai ajouté des exemples de ce que donne les différents mode d'adressage. Pour cela j'utilise la convention suivante:
- A : accumulateur
- PC : pointeur d'instruction
- Addr : adresse indiquée en opérande de l'instruction
- X : index
- n : opérande direct
- Mem[...] : indique une valeur en mémoire à l'emplacement indiqué.
- s : taille de l'instruction avec ses opérandes.
L'adressage implicite
Certaines instructions comme par exemple l'empilement ou le dépilement n'ont pas besoin de définir une adresse. Dans ce cas elle est implicite
Adressage immédiat
La donnée est un argument de l'instruction.
A <- n
Adressage direct
L'instruction va chercher directement la valeur à l'emplacement mémoire indiqué dans l'instruction.
A <- Mem[Addr]
Adressage absolu
Lors d'instruction de saut on indique l'adresse de destination.
PC <- Addr
Adressage relatif
On indique ici une adresse qui correspond au pointeur d'instruction plus un nombre de mots défini en argument. Ce mode d'adressage est essentiellement utilisé dans instructions de saut conditionnel.
PC <- PC + n + s
A <- Mem[PC + n]
Adressage indirect
L'instruction lit à l'emplacement mémoire indiqué l'adresse où il faut lire la donnée. A <- Mem[Mem[Addr]]
Adressage indexé
L'instruction lit à l'emplacement mémoire en ajoutant la valeur de l'index. Les adressage indexés sont de différentes natures.
L'adressage direct indexé: il s'agit de lire à l'emplacement mémoire indiqué par l'opérande augmenté de la valeur de l'index.
A <- Mem[Addr + X]
L'adressage indirect pré-indexé:
A <- Mem[Mem[Addr + X]]
L'adressage indirect post-indexé:
A <- Mem[Mem[Addr] + X]