Vous êtes sur la page 1sur 6

Chapitre III Notions sur les instructions d’un ordinateur

1. Langage de haut niveau, assembleur, langage machine


Le langage machine est le langage compris par le microprocesseur. Ce langage est difficile à maîtriser
puisque chaque instruction est codée par une séquence de bits. Afin de faciliter la tâche du
programmeur, on a créé différents langages plus ou moins évolués.
Le langage assembleur est le langage le plus « proche » du langage machine. Il est composé par des
instructions que l’on appelle des mnémoniques. Chaque microprocesseur peut posséder un
assembleur différent.
La difficulté de mise en œuvre de ce type de langage, et leur forte dépendance avec la machine a
nécessité la conception de langages de haut niveau (C, Pascal, Java, etc…), plus adaptés à l'homme,
et aux applications qu'il cherchait à développer. Les langages de haut niveau ne dépendent pas de
l’architecture de la machine. Chaque instruction en langage de haut niveau correspondra à une
succession d’instructions en langage assembleur. Une fois développé, le programme en langage de
haut niveau n’est donc pas compréhensible par le microprocesseur. Il faut le compiler pour le traduire
en assembleur puis l’assembler pour le convertir en code machine compréhensible par le
microprocesseur. Ces opérations sont réalisées à partir de logiciels spécialisés appelés compilateur et
assembleur.

Langage haut niveau

Compilation

Langage assembleur

Assemblage
Langage machine

2. Modes d’adressage

2.1.Format d’une instruction :


Une instruction comporte un groupe de bits divisé en sous-groupes appelés champs. Le premier
champ définit généralement le code opération. Il existe plusieurs formats d’instruction selon le
nombre de champs réservés aux opérandes (ou adresses) ainsi que le résultat. On parle ainsi d’une
instruction à 0 adresse, 1 adresse, 2 adresses ou 3 adresses.
une instruction est composée de :
- un champ code opération : permet à l’unité de commande de reconnaitre l’instruction ;
- un champ mode d’adressage : définit le chemin à emprunter par l’unité de commande pour
retrouver l’opérande.
- un champ adresse: contient un opérande ou une adresse. La valeur contenue dans ce champ peut
être une valeur immédiate (l’opérande est présent directement dans l’instruction) (mov R1, 0x 10),
un numéro de registre ( mov R1, R2) ou une adresse mémoire (mov R1, [0x 10])

Code opération Mode d’adressage Opérande ou adresse

Figure 5 : Format d’une instruction


Chapitre III Notions sur les instructions d’un ordinateur

La valeur de l’opérande dépend du mode d’adressage (à voir plus loin). Le nombre de champs adresse
dépend de l’organisation des registres dans le processeur et du chemin de données.

- le processeur dispose de registres généraux. On trouvera dans ce cas des instructions avec
 3 champs adresses: destination, source1, source2 (add R1, R2, R3 qui calcule R1 <- R2 + R3)
 2 champs adresses: le registre d’un des opérandes reçoit le résultat (add R1, R2 qui calcule R1
<- R1 + R2)
- le processeur utilise un accumulateur. Deux instructions spécifiques sont ajoutées pour accéder à
l’accumulateur: load X pour charger l’accumulateur avec une donnée X et store X pour écrire le
contenu de l’accumulateur en mémoire ou dans un autre registre.
 1 champ adresse: source2 (add R1 qui calcule Acc <- Acc + R1)
- le processeur utilise une pile. Une pile est une structure de données en mémoire centrale dans laquelle
les données sont placées “les unes sur les autres”: la dernière donnée entrant dans la pile sera la
première à en sortir. Un registre spécial SP contient l’adresse du sommet de la pile. Deux opérations
sont définies sur les structures de pile:
push X: empiler une donnée X, c’est à dire la placer au sommet de la pile et faire avancer le
registre SP vers la cellule mémoire suivante
pop X: dépiler vers une cellule mémoire ou un registre X, c’est à dire placer dans X la donnée au
sommet de la pile désigné par SP et faire avancer le registre SP vers la cellule mémoire précédente.

Dans ce cas, toutes les opérations prennent leurs opérandes en sommet de pile, et stockent le résultat en
sommet de pile. De plus les opérandes sont automatiquement dépilées.
 0 champ adresse (add qui effectue le calcul [SP-2] <- [SP-2] + [SP-1]; SP <- SP - 1 (dans le cas
d’une pile qui croît vers les adresses hautes))

2.2. Les modes d’adressage :

Il y a généralement, plusieurs types de donnée représentés par les opérandes :

- donnée immédiate stockée dans l’instruction machine ;

- donnée dans un registre de l’unité de traitement ;

- donnée stockée à une adresse en mémoire centrale.

L’accès à ces données nécessite l’usage d’un mécanisme d’adressage. Il en existe


principalement quatre modes :
2.2.1. Adressage immédiat : Il ne s’agit pas d’un adressage proprement dit. La valeur de
l’opérande figure directement dans l’instruction. Cette valeur est donc copiée de la
mémoire centrale vers l’unité de traitement lors de la phase de recherche de l’instruction.
2.2.2. Adressage direct : la valeur de la donnée est stockée à une adresse en mémoire centrale.
C’est cette adresse qui est représentée dans l’instruction.
Chapitre III Notions sur les instructions d’un ordinateur

2.2.3. Adressage indirect : La valeur qui figure dans l’instruction correspond à l’adresse de
l’adresse de l’opérande. Cette adresse est stockée dans un registre ou à une autre adresse
mémoire. L’adressage indirect par registre est présent dans la totalité des unités de
contrôle, par contre, l’adressage indirect par mémoire est moins fréquent.
2.2.4. Adressage registre : l’adresse de l’opérande est donnée dans l’instruction sous forme
du numéro de registre.
2.2.5. Adressage registre indirect: l’adresse de l’opérande (en mémoire) se trouve dans un
registre.
2.2.6. Adressage indexé (ou basé) : il est parfois nécessaire d’accéder à des données situées
à des adresses consécutives en mémoire centrale (Exemple : tableau, chaines de
caractères). En adressage indexé, on charge un registre d’index avec l’adresse de début de
cette zone de données, ensuite on spécifie dans l’instruction le déplacement à réaliser à
partir de cet index. L’adresse réelle de la donnée est donc égale à l’adresse de l’index
ajouté au déplacement. Certaines unités de contrôle exécutent automatiquement
l’incrémentation ou la décrémentation de leurs registres d’index ce qui permet de réaliser
des transferts ou d’autres opérations sur des zones.
Exemple illustratif : Etant données les valeurs des mots mémoire ci-dessous et une machine à une adresse
disposant d’un accumulateur :
Adresses Mémoire
20 40
30 50
40 60
50 70
Quelles sont les valeurs chargées dans l’accumulateur, après exécution des instructions suivantes : LOAD
IMMEDIAT 20, LOAD INDIRECT 20, LOAD DIRECT 30, LOAD INDIRECT 30

LOAD IMMEDIAT 20 : acc  20


LOAD INDIRECT 20 : acc  M[M[20]]  acc  M[40]  acc 60
LOAD DIRECT 30 : acc  M[30]  acc  50
LOAD INDIRECT 30 : acc M [M[30]]  acc  M[50] acc  70

3. Les instructions machines usuelles

Voici une liste des instructions que l’on rencontre habituellement dans les langages d’assemblage. Elles sont
regroupées par thématique. Les mnémoniques présentées sont celles couramment utilisés (pour un
processeur réel). Nous nous plaçons dans le cas d’un langage d’assemblage à 2 champs d’adresse. Notez que
la plupart des processeurs exige souvent qu’au moins une des opérandes soit un registre.

1. Instructions de transfert de données

mov R1, R2 source (R2) vers destination (R1)


load R1, var mémoire (var) vers registre (R1)
Chapitre III Notions sur les instructions d’un ordinateur

store var, R1 registre (R1) vers mémoire (var)


xchg R1, R2 échange des contenus de R1 et R2
clear R1 mise à zéro des bits de R1
set R1 mise à un des bits de R1
push R1 placer R1 en sommet de pile (Stack Pointer)
pop R1 placer le sommet de pile dans R1
2. Instructions arithmétiques

add R1, R2 addition (R1 <- R1 + R2)


sub R1, R2 soustraction (R1 <- R1 - R2)
mul R1, R2 multiplication (R1 <- R1 * R2)
div R1, R2 division entière (R1 -> R1 / R2)
neg R1 complément à 2 (R1 <- Ca2(R1))
inc R1 incrémentation (R1 <- R1 + 1)
dec R1 décrémentation (R1 <- R1 - 1)
3. Instructions logiques

and R1, R2 et bit à bit (R1 <- R1 & R2)


or R1, R2 ou bit à bit (R1 <- R1 | R2)
xor R1, R2 ou exclusif bit à bit (R1 <- R1 ^ R2)
not R1 complément à 1 (R1 <- Ca1(R1))
4. Instructions de décalages: utilisées pour réaliser rapidement des multiplications et des
divisions par puissance de 2.

décalages logiques (shift): à utiliser avec


des nombres non signés;
shl R1 décalage à gauche
shr R1 décalage à droite
décalages arithmétiques (arithmetic shift):
à utiliser avec des nombres signés;
ashl R1: décalage à gauche;
ashr R1: décalage à droite
5. Instructions de comparaison: effectuent un calcul prédéterminé en oubliant le résultat du
calcul. Leurs opérandes ne sont donc jamais modifiés. Seuls les drapeaux sont modifiés.

cmp R1, R2 comparaison par soustraction (R1 - R2) avec modification


des drapeaux (Z, N,). R1 et R2 ne sont pas modifiés
test R1, R2: comparaison par et bit à bit (R1 & R2) avec modification
des drapeaux ( Z, N); R1 et R2 ne sont pas modifiés.
6. Instructions de saut

JMP destination la prochaine instruction à exécuter est désignée par


destination. (On “ saute ” vers l’instruction destination.)
Chapitre III Notions sur les instructions d’un ordinateur

Les sauts conditionnels ne sont effectués


que si des conditions sur les bits Z et N du
registre d’état sont réalisés.
JEQ Jump if EQual (Z = 1)
JNE Jump if Not Equal (Z = 0)
JLT Jump if Less Than (N = 0)
JLE Jump if Less or Equal (N = 0 ou Z = 1)
JGT Jump if Greater Than (N = 1)
JGE Jump if Greater or Equal (N = 1 ou Z = 1)

4. Cycle d’exécution d’une instruction


L’exécution d’un programme s’effectue en exécutant instruction par instruction jusqu’à la fin
du programme. L’exécution d’une instruction se fait à travers trois étapes : recherche de l’instruction
et décodage, exécution de l’instruction, et préparation de l’instruction suivante.
4.1. La phase de recherche et décodage de l’instruction: Cette phase est la même pour tous les
différents types d’instructions, elle suppose que le CO contient l’adresse de l’instruction. Elle
consiste à :
4.1.1. Transférer l’adresse se trouvant dans le CO vers le registre RAM.
4.1.2. Commander à la mémoire centrale une lecture de l’information se trouvant dans la case
mémoire adressée par la valeur contenue dans le registre RAM. A l’issue de la commande
de lecture, la mémoire centrale va délivrer dans le registre RIM l’instruction demandée.
4.1.3. L’instruction va être ensuite conduite vers le registre RI.
4.1.4. Le séquenceur analyse et décode le code opération de l’instruction.
4.2. La phase d’exécution : dépend de la nature de l’instruction à exécuter (instruction de calcul,
transfert, appel système, etc.) et du mode d’adressage. Après le décodage, le séquenceur
génère en plusieurs étapes dans le temps un ensemble de signaux de commandes qui vont
permettre d’activer les circuits concernés par le traitement.
4.3. La phase de préparation de la prochaine instruction à exécuter : Consiste à mettre à jour
le contenu de CO par l’adresse de la prochaine instruction à exécuter. Cette adresse, soit elle
est obtenue par une incrémentation du CO si l’exécution se fait d’une manière séquentielle,
soit elle provient de l’actuelle instruction s’il s’agit d’une rupture de séquence.

5. L’horloge et le séquenceur :
5.1. L’horloge : est une base de temps qui divise le temps en battements de même durée appelés cycles.
Elle distribue des impulsions régulièrement pour synchroniser les différentes opérations élémentaires
à effectuer pendant le déroulement d’une instruction. A chaque cycle d’horloge, et en fonction des
ordres donnés par l’unité de contrôle, certaines portes se ferment d’autres s’ouvrent pour laisser
circuler des informations.
Cycle machine : cycle de base ou élémentaire égal à l’inverse de la fréquence.
Cycle instruction : cycle recherche + cycle d’exécution (chacun d’eux peut nécessiter plusieurs
cycles machine)
Chapitre III Notions sur les instructions d’un ordinateur

5.2. Le décodeur : appelé décodeur de fonctions, est capable de reconnaître la fonction indiquée par
l’instruction à exécuter parmi toutes les opérations possibles. La fonction de décodage consiste à faire
correspondre à un code présent en entrée sur n lignes une seule sortie active parmi le 2n sorties
possibles.
5.3. Le séquenceur : c’est un automate distribuant des signaux de commandes aux diverses unités
participantes à l’exécution d’une instruction selon un chronogramme précis en tenant compte des
temps de réponse des circuits sollicités. Il peut être câblé ou microprogrammé.
Un séquenceur câblé est un circuit séquentiel complexe comprenant un sous circuit pour chacune des
instructions à commander. Ce sous circuit est activé par le décodeur.
Il est toujours possible de remplacer un circuit logique par une suite de micro instructions stockées
dans une mémoire de microprogrammation. Le code de l’opération à exécuter dans l’instruction est
utilisé comme étant l’adresse de la 1ère micro instruction du microprogramme. Ce microprogramme
est capable de générer une suite de signaux de commande équivalente à celle produite par un
séquenceur câblé.
Un séquenceur microprogrammé est plus lent qu’un séquenceur câblé.

Vous aimerez peut-être aussi