+TD COURS Architecture Des Ordinateurs FSM MEKNES
+TD COURS Architecture Des Ordinateurs FSM MEKNES
+TD COURS Architecture Des Ordinateurs FSM MEKNES
1/2
2
2/2
Architecture des ordinateurs
1/2
2
12. Pour retrouver le contenu original de chaque registre, de la question 11, montrer la séquence
d’instructions à exécuter. C’est quoi le contenu de SP après chaque instruction exécutée?.
13. Parmi les instructions suivantes, indiquer celles qui sont incorrectes et corriger-les.
Instruction Oui/Non ? Proposition de correction
POP BL
POP AX,BX
MOV ES, DS
MUL 4
MUL AL,BL
MOV AX, [DI]+12h
14. Si l’on suppose la mémoire initialisée à zéro au lancement de la séquence d’instructions ci-
dessous.
. MOV BX,100
. MOV [BX],256
. INC BX
. MOV AX,[BX]
Quelle est la valeur rangée dans AX après l’exécution ?
15. Soient X et Y deux variables de type DW. Écrire une séquence d’instructions qui permet d’évaluer
l’expression suivante : AX= -X + BX - Y.
16. Pourquoi le registre DX peut être changer par l’instruction MUL ?
17. Donner l’instruction ou la suite des instructions pour effectuer les actions suivantes:
(a) Multiplier par 2 le contenu du registre AL.
(b) Diviser par 3 le contenu du registre AX.
18. Le registre AL contient le code ASCII d’une lettre minuscule. On veut mettre en majuscule cette
lettre. Écrire une seule instruction qui permette d’effectuer cette modification.
19. Soit un nombre dans le registre AL. Donner une instruction permettant de mettre ses 2 bits de
poids faible à 0.
20. Soit un nombre x dans le registre BL. Donner une seule instruction permettant de mettre ses deux
bits de poids faibles à 1.
21. Soit un nombre signé x dans le registre AL. Donner une seule instruction permettant d’effectuer
le complément à 1 de x.
22. Soit un nombre signé x dans le registre AH. Donner une seule instruction permettant d’effectuer
le complément à 2 de x.
23. Quelle instruction permet d’inverser le signe d’un nombre ? Donner une combinaison de deux
instructions ayant 1 seule opérande conduisant au même résultat.
24. À quoi servent les instructions TEST et CMP ?
25. L’instruction MOV change-t-elle les drapeaux (flags) du microprocesseur ?
26. Si le contenu de AL et AH sont strictement positifs, quelle instruction doit-on utiliser et quel
drapeau doit-on vérifier afin de déterminer si AL est supérieur à AH?
2/2
Architecture des ordinateurs
Jeu d’instructions: TD
1/4
2
9. Soit T un tableau d’entiers de taille N = 80 débutant à l’adresse [0200h]. Écrire une sé-
quence d’instructions qui permet de sauvegarder dans le registre AX le premier nombre
divisible par 4.
10. On considère la séquence d’instructions suivante:
1. MOV CX, 10 6. JZ Etq2
2. XOR BX, BX 7. ADD DX, CX
3. XOR DX, DX 8. JMP Next
4. Etq1 : MOV AX, 1 9. Etq2 : ADD BX, CX
5. . AND AX, CX 10. Next: LOOP Etq1
(a) Quel est le rôle de l’instruction XOR BX,BX ?
(b) Donner chacune des valeurs rangées dans BX et DX ?
(c) Que représente les deux valeurs trouvées?
11. On considère la séquence d’instructions suivante:
1. Temperature DB +25,-5,+20,+28,-5 10. INC SI
2. T_1 DW ? 11. LOOP Arriere
3. T_2 DW ? 12. MOV CX, 5
4. MOV CX, 5 13. MOV AX, BX
5. XOR BX, BX 14. CWD
6. LEA SI, Temperature 15. IDIV CX
7. Arriere: MOV AL, [SI] 16. MOV T_1, AX
8. . CBW 17. MOV T_2, DX
9. . ADD BX, AX
2/4
3
Y = 2X 2 + 3X − 1
Sachant que X est un nombre positif (non nul) d’un octet stocké en mémoire à l’offset
0100H.
19. Soit l’organigramme suivant:
3/4
4
.
(b) Que fait cet organigramme ?
4/4
Architecture des ordinateurs
Chapitre n◦ 1: Introduction à l’architecture des ordinateurs
Filière: SMI-4
Plan
1 Introduction
2 Architecture de Von Neumann
Le microprocesseur (CPU)
La mémoire principale
Les interfaces d’entrées/sorties
Les bus de communication
3 Architecture de base d’un microprocesseur
Unité de commande
Unité arithmétique et logique
Les registres
4 Les mémoires
C’est quoi une mémoire ?
Caractéristiques d’une mémoire
Classification des mémoires
Mémoires à semi-conducteurs
Hiérarchie des mémoires
5 Exécution d’un programme
Présentation
Les différents types de programme
6 Les différents types d’ordinateur
Les micro-ordinateurs
Les gros systèmes
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 2 / 32
Introduction
.
Un programme est un ensemble d’instructions exécutées dans un ordre bien
déterminé par une machine (microprocesseur) ;
Un programme est généralement écrit dans un langage évolué (C, Java, etc).
Les instructions qui constituent un programme peuvent être classifiées en 4
catégories :
å Les Instructions d’affectations ;
å Les instructions arithmétiques et logiques ;
å Les Instructions de branchement (conditionnelle et inconditionnelle) ;
å Les Instructions d’entrées/sorties (E/S).
Comment s’exécute un programme dans la machine ?
å Pour comprendre le mécanisme d’exécution d’un programme ⇒ il faut
comprendre le mécanisme de l’exécution d’une instruction .
å Pour comprendre le mécanisme de l’exécution d’une instruction ⇒ il
faut connaître l’architecture de la machine sur la quelle va s’exécuter
cette instruction.
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 3 / 32
Architecture de Von Neumann
Présentation
PCI (Peripheral Component Interconnect) : Lancé à la fin des années 90 pour faire
face à la demande liées aux applications vidéo.
Elle assure :
å La recherche (lecture) de l’instruction et des données à partir de la
MP ;
å Le décodage de l’instruction et l’exécution de l’instruction en cours et
prépare l’instruction suivante.
Avec une bascule c’est possible de mémoriser une information sur 1 seul bit ;
Avec un registre c’est possible de mémoriser une information sur n bits ;
Si on veut mémoriser une information de taille importante ⇒ il faut utiliser
une mémoire.
Une mémoire est un dispositif capable :
å D’enregistrer une information ;
å De la conserver (mémoriser) ;
å De la restituer (possible de la lire ou
la récupérer par la suite).
Volatilité :
ç Si une mémoire perd son contenu lorsque la source d’alimentation est
coupée alors la mémoire est dite volatile.
ç Si une mémoire conserve son contenu lorsque la source d’alimentation
est coupée alors la mémoire est dite non volatile (permanente ou
stable).
Le débit :
C’est le nombre maximum d’informations lues ou écrites par seconde.
Exprimé en bits par seconde
Le temps de cycle :
Intervalle de temps minimum entre deux accès successifs.
Les mémoires peuvent êtres classée en deux catégories selon la technologie utilisée :
1 Mémoire à semi-conducteur1 RAM, ROM, PROM, ... : Très rapide mais de taille
réduite.
C’est une mémoire morte dont le contenu est inscrit de manière définitive
par le constructeur ;
å Son contenu ne peut plus être ni modifié, ni effacé par l’utilisateur.
La mémoire cache
Activités
Vous êtes dans votre bureau, au fond de la pièce, une grande armoire qui
comporte tous les tiroirs.
La taille de votre bureau vous permet de poser dessus environs une vingtaine
de dossiers en plus de votre espace de travail.
Si vous avez besoin d’un dossier particulier, dans un premier temps vous
regardez s’il n’est pas sur votre bureau, s’il y est vous le prenez. Si non, vous
allez demander à votre secrétaire de vous l’apporter,
La fin de la journée arrive et votre bureau est plein de dossiers, il vous en
faut un autre, vous appelez votre secrétaire qui vous l’apporte,et vous faites
ranger à votre secrétaire un dossier dont vous pensez ne plus avoir besoin.
å Et bien la mémoire cache fonctionne exactement sur ce principe.
å Vous êtes le CPU, votre bureau la mémoire cache, et votre secrétaire le
contrôleur mémoire qui gère vos tiroirs de MP.
La mémoire cache
Problème
En pratique, les accès à la MP sont trés lents ; une trop grande différence de
vitesse entre le CPU et la MP.
å La vitesse du CPU est plus rapide que la MP.
La mémoire cache
Solution
1 On place dans la mémoire cache les informations (instructions, données) les plus
fréquemment utilisées par le CPU lors de l’exécution d’un programme ;
2 On intègre cette mémoire entre le CPU et la MP pour améliorer la vitesse de
transfert des informations entre ces deux derniers.
å La mémoire cache permet au CPU de faire
moins d’accées à la MP et ainsi de gagner du temps.
On distingue :
Cache de niveau 1 : mémoire intégrée au micrprocesseur.
Cache de niveau 2 : installée entre le micrprocesseur et la MP.
.
.
.
.
La mémoire cache
Le BIOS
Le système d’exploitation
Ce sont les programmes qui sont lancés par l’utilisateur comme par
exemple :
Éditeur de texte
Traitement de texte
Compilateur
Interface graphique
Filière: SMI-4
Plan
Remarque
La mémoire est divisée en segments de 16 octets, à partir desquels il est possible
de couvrir une zone de 216 octets (64 ko) à l’aide d’un offset de 16 bits.
Problème
Les adresse-segments et les offsets sont codés sur 16 bits, de plus le bus d’adresse
codé sur 20 bits ;
å Quelle est la solution proposer par Intel pour fabriquer une adresse de 20 bits à
partir des adresse-segments de taille 16 bits ?.
Solution
Chaque adresse-segment sera multiplié par (10)16 plus un offset sur 16 bits. On peut
calculer l’adresse réelle (physique) par la formule suivante :
Adresse physique = l’adresse-segment*(10)16 +Offset.
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 5 / 14
II. Segmentation de la mémoire 2. Différentes adresse mémoire
Remarques
1 Les adresses physique valides vont de 0000H :0000H à FFFFH :000FH ;
2 La capacité totale d’adressage est : FFFFH :FFFFh=FFFF0H+FFFFH=10FFEFH,
qui dépasse légèrement 1Mo = 220 octets (FFFFFh =FFFF0h :000Fh).
3 A partir de segments distincts on peut accéder à une même adresse mémoire en
effet ces adresses sont identiques :
l’adresse-segment : Offset
0003h : 0001h ⇒ 00030h+0001h = 00031h
0002h : 0011h ⇒ 00020h+0011h = 00031h
0001h : 0021h ⇒ 00010h+0021h = 00031h
0000h : 0031h ⇒ 00000h+0031h = 00031h
å On dit alors que ces segments sont entrelacés.
Remarque
Les registres EBX, ECX, et EDX : conformément au schéma précédent, se
manipulent exactement comme le registre EAX.
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 8 / 14
III. Registres du microprocesseur Intel 1. Registres généraux
Voyons maintenant un petit programme : ces instructions sont exécutées les unes
après les autres.
Instruction EAX AX AH AL
MOV EAX,12345678h 12345678h 5678h 56h 78h
MOV AL,10h 12345610h 5610h 56h 10h
MOV AX,0000h 12340000h 0000h 00h 00h
MOV AH,31h 12343100h 3100h 31h 00h
MOV AL,AH 12343131h 3131h 31h 31h
Appelés aussi registres d’indice, ces registres de 16 bits servent à contenir l’offset
d’une adresse.
Registres Segments DS ES CS SS
Registres Offset SI, DI, SI, DI, IP SP,BP
BX, Constante BX, Constante
Remarque
Ces registres (sauf IP) peuvent apparaître comme des opérandes dans toutes les
opérations arithmétiques et logiques sur 16 bits.
Filière: SMI-4
Plan
1 Présentation
2 Adressage immédiat
4 Adressage direct
5 Adressage basé
6 Adressage indexé
å Un mode d’adressage est un moyen qui permet au CPU d’avoir accès à une donnée
dans la MC.
å Un mode d’adressage est une instruction présentée par un CPU afin de transférer
une information d’un emplacement mémoire à un autre emplacement. C’est une
opération d’affectation souvent représentée en assembleur par l’instruction MOV.
å L’instruction MOV dst,src signifie mettre le contenu de src (la source) dans dst (la
destination). On dit que dst et src qu’ils sont des opérandes (paramètres).
å La connaissance des principaux modes d’adressage est nécessaire car ils permettent
d’écrire les programmes de la façon la plus courte, la plus simple et la plus lisible
possible.
Dans ce mode d’adressage, l’opérande source est une constante. La destination est
un registre ou une adresse mémoire.
å Si la destination est un registre, la taille de celui-ci détermine le nombre de
bits impliqués dans l’opération.
Exemples
...........
...........
...........
...........
...........
...........
...........
...........
...........
Exemples
...........
...........
...........
...........
...........
...........
...........
...........
Remarque
L’adressage immédiat vers un registre de segment est interdit.
Par exemple, on ne peut pas écrire :
L’opérande est un registre, mode le plus courant (+ efficace), car toutes les opérations
se font à l’intérieur du CPU. Les registres source et destination doivent avoir la même
taille.
Exemples
...........
...........
...........
...........
...........
...........
Remarque
Le transfert d’un registre de segment vers un autre registre de segment est interdit.
Par exemple, on ne peut pas écrire :
MOV ES, DS
MOV DS, CS
å Comme l’indique son nom, c’est le déplacement de données entre les registres
internes de CPU et la MC.
å Si l’opérande source est spécifié par son adresse mémoire. Alors l’opérande
destination est un registre et vice-versa.
å Pour réaliser l’opération il faut récupérer (lire) l’opérande à partir de la mémoire
(DS par défaut).
Exemples
...........
...........
...........
...........
...........
...........
...........
Remarque
On ne peut pas charger le contenu d’un emplacement mémoire dans un autre sans
passer par un registre.
Exp : mov [20h],[10h] Interdit !
å Tous simplement, il utilise les registres de base (BX ou BP) comme pointeur entre
la MC et les registres internes de CPU ;
å Un des opérandes est le contenu d’une zone mémoire pointée par un registre de
base. L’autre opérande est un registre ;
à Si le registre de base utilisé est BX, l’emplacement mémoire pointé sera
à l’adresse DS :BX ;
à Si le registre de base utilisé est BP, l’emplacement mémoire pointé sera
à l’adresse SS :BP.
Exemples
...........
...........
...........
...........
...........
...........
...........
...........
...........
å Le même mode que le basé, mais il utilise les registres d’indice SI ou DI (au lieu
des registres BX ou BP). Il est utilisé lors d’opérations sur des chaînes de
caractères ou sur des tableaux ;
å Un des opérandes est le contenu d’une zone mémoire pointée par un registre de
d’indice ;
å Les registres d’indice SI, DI associés au registre de segment DS.
Exemples
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
å C’est un mode combine entre des modes d’adressage comme l’indique son nom
(basé+indexé).
å Ce mode d’adressage est utilisé lors de la manipulation de tableaux ;
Exemples
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
...........
Filière: SMI-4
Plan
1 Introduction
2 Format d’instruction
3 Déclaration de variables
5 Manipulation de données
6 Instructions de la pile
Instruction PUSH
Instruction POP
7 Instructions arithmétiques
8 Instructions logiques
9 Instructions de tarnsferts
Chaque CPU possède un certain nombre limité d’instructions qu’il peut exécuter.
Ces instructions s’appelles jeu d’instructions.
Le jeu d’instructions décrit l’ensemble des opérations élémentaires que le CPU
peut exécuter.
Les instructions peuvent être classifiées en plusieurs catégories selon le type
d’action que son exécution déclenche.
å Instructions d’affectation ;
å Instructions arithmétiques et logiques ( ET , OU , ADD,...) ;
å Instructions de branchement ( conditionnelle et inconditionnelle ) ;
å Instructions d’entrées sorties.
å Étiquette : Identificateur suivi d’un " :" qui représente l’adresse de stockage
de cette instruction.
å Le champ opération qui indique au CPU quelle instruction réaliser.
å Le champ opérande qui contient la donnée brute ou la référence à une
donnée en mémoire. Les opérandes séparés par "," dst puis src.
å Commentaire précédé du ( ;). Il sert à ajouter des informations explicatives au
sujet du fonctionnement du programme. ou de l’instruction correspondante.
Exemple :
Etq : MOV dst,src ; pour effectuer un transfert de src vers dst
La technique associée à la localisation des opérandes d’une instruction s’appelle
l’adressage ou le mode d’adressage .
1. DB (Define Byte) : Sert à définir un octet, ainsi vous pouvez définir un nombre
inférieur à 255 = 28 − 1.
Exp : X DB 0
2. DW (Define Word) : Définit un mot (16 bits), donc une valeur inférieur ou égale à
65535 = 216 − 1.
Exp : X DW 65532
3. DD (Define Double) : Définit un mot double (32 bits), donc une valeur inférieur ou
égale à 232 − 1.
Exp : X DD F70ABCDh
4. EQU (EQUivalent) : Affecte un nombre à un label. La valeur ne peut pas être
modifiée : c’est une déclaration de constante.
Exp : Pi EQU 3.14 (décimal)
X EQU 01010101b (biaire)
Y EQU 10h (hexadécimal)
5. ? : On déclare les données non initialisées par ? .
Exp : X DB ?
Les tableaux peuvent être vus comme des chaînes de variables, c’est à dire des
suite d’octets.
Exemples
......................
......................
......................
......................
......................
......................
......................
......................
Exemples
......................
......................
......................
......................
......................
......................
Exemples
......................
......................
......................
......................
......................
......................
......................
......................
Exemples
......................
......................
......................
......................
......................
......................
......................
C’est une région de la RAM appelée segment de pile (Stack Segment (SS)) où l’on
va stocker (empiler) ou retirer (dépiler) le contenu des registres ;
Les piles offrent un nouveau moyen d’accéder à des données dans la RAM, qui est
très utilisé pour stocker temporairement le contenu des registres ;
La pile est gérée en LIFO (Last IN First Out= dernier entré premier sorti) ;
Pour empiler (déposer ou ajouter) une donnée sur le sommet de la pile (SS : SP) on
peut envisager l’instruction suivante :
PUSH Source ; Pile ← Source
⇒ La Source peut être un registre ou une case mémoire de 16 bits.
Le résultat de cette instruction est que :
1 Le registre de SP est décrémenté de 2 ⇒ SP ← SP-2 ;
Exemple
MOV SP, 20h
MOV AX, 1234h
MOV BX, ABCDh
PUSH AX
PUSH BX
....
....
....
....
Pour dépiler (récupérer ou retirer) une donnée sur le sommet de la pile (SS : SP) on
peut envisager l’instruction suivante :
POP Destination ; Destination ← Pile
⇒ La destination peut être un registre ou une case mémoire de 16 bits.
Le résultat de cette instruction est que :
1 La valeur pointée par SP est sauvegardée dans la destination.
Exemple
MOV SP, 20h
MOV AX, 1234h
MOV BX, ABCDh
PUSH AX
PUSH BX
POP CX ⇒ CX ← ABCDh
POP BX ⇒ BX ← 1234h
...
...
1. ADD (Addition) : Cette instruction effectue une addition, le résultat est placé dans le
premier opérande (Destination ← Destination+Source).
Exemple
MOV AX, 45h
ADD AX, 7 ; AX vaut maintenant 4Ch
2. ADC (Addition avec retenue) : Cette instruction effectue une addition, mais le
résultat varie en fonction de CF.
å Si CF=0 le résultat est le résultat de l’addition.
å Si CF=1 le résultat est incrémenté de 1.
Exemple
CF=1
AX = 45h
ADC AX, 2 ; AX vaut donc 48h
Si CF= 0, alors AX vaudrait 47h
Exemple
MOV AX,18h
INC AX ; AX contient 19h
Exemple
MOV AX,18h
SUB AX, 5 ; AX vaut maintenant 13h
5. SBB (Soustraction avec retenue) : Elle fait aussi une soustraction, mais décrémente
en plus de 1 le résultat, si CF=1.
Exemple
MOV AX, 18h
CF=1
SBB AX, 5 ; AX vaut maintenant 12h
Exemple
MOV AL, 20h
MOV CL, 02h
MUL CL ; AX ← AL*CL ; AX=20h*02h=40h.
11. DIV (Division ) : Cette instruction effectue une division non signée de l’accumulateur
par l’opérande source :
Syntaxe : DIV Source.
Si la source est un octet : AL ← AX/Source et AH ← Reste.
Si la source est un mot : AX ← (DX AX)/Source et DX ← Reste
Les indicateurs CF, OF, ZF, SF et PF sont inconnus.
Exemple
MOV DX,0000h
MOV AX,2000h
MOV CX,0002h
DIV CX ; AX ← (DX AX)/CX
;AX ← (00002000h)/2=1000h et DX ← 0000h
12. IDIV (Division signée) : Cette instruction a le même principe de fonctionnement que
l’instruction DIV, mais elle supporte les nombres signés.
1. XCHG :Exchange
Elle permet de permuter la source avec la destination.
Exemple
....................
....................
....................
....................
....................
Exemple
....................
....................
....................
....................
....................
....................
....................
3. XLAT : Translate
Permet de remplacer le contenu du registre AL par un octet de la Tab1.
Syntaxe d’utilisation :
On place l’adresse de la Tab1 dans le registre BX
MOV BX, offset Tab1
On place l’indice de l’octet à consulter dans AL
MOV AL, indice ;0 ≤ indice ≤ 255
XLAT ; AL ← [DS :BX+AL].
Exemple
MOV BX, offset Tab_Src
MOV AL, 03h
XLAT
..
..
..
..
Exemple
MOV SI, 0100h
LDS BX, WORD PTR [SI]
;BX ← le contenu de la case mémoire 16 bits (DS :SI)
;DS ← le contenu de la case mémoire 16 bits (DS :SI+2)
..
..
..
..
..
..
..
..
Filière: SMI-4
2 Instructions de branchement
5 Instructions d’E/S
En mode immédiat, seuls les décalages et rotations de 1 bit peuvent se réaliser. Pour
réaliser des décalages ou rotations de plusieurs bits, il faut explicitement utiliser le
registre CL.
Syntaxe
Opération Destination, N
å Si N=1 alors la syntaxe devienne :
Opération Destination, 1.
å Sinon le nombre de décalage a effectué sur la destination mettre dans CL :
MOV CL, N
Opération Destination, CL
La destination peut être : registre, mémoire.
Exemple
On va décaler le registre AH de 5 positions.
MOV AH,1011 0111 MOV CL,5
SHR AH, CL
AH=00000101
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 4 / 35
Instructions de décalages et de rotations
Exemple
On va décaler le registre AH de 5 positions.
MOV AH,1011 0111 MOV CL,5
SHL AH, CL
AH=1110 0000
3. SAL (Shift Arithmetic Left)
Cette instruction est identique à SHL.
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 5 / 35
Instructions de décalages et de rotations
Synoptique de décalage
Exemple
On va décaler le registre AH de 5 positions vers la droite.
MOV AH, 0101 1100 MOV CL,4
SAR AH, CL
AH= 0000 0101
CF=1
Synoptique de décalage
Exemple
On va décaler le registre AH de 5 positions vers la droite.
MOV AH,1011 0111
MOV CL,5
ROR AH, CL
AH= 0111 1101 ......
......
......
Synoptique de décalage
Exemple
On va décaler le registre AH de 5 positions vers la gauche.
MOV AH,1011 0111
MOV CL,5
ROL AH, CL
AH=1111 0110 ......
......
......
......
Synoptique de décalage
Exemple
On va décaler le registre AH de 5 positions.
On sait que CF=0
MOV AH,1011 0111 MOV CL,5
RCR AH, CL
AH=01110101
CF=1
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 9 / 35
Instructions de décalages et de rotations
Synoptique de décalage
Exemple
On va décaler le registre AH de 5 positions.
On sait que CF=1
MOV AH,1011 0111
RCL AH,5
AH=1111 1011
CF=0
Exemple
MOV AX,34h
NOT AX
JMP label1 ⇒ XOR est sauté.
XOR AX,AX
label1 : ......
......
......
Ces instructions permettent de sauter "une partie d’un programme" suivant une
condition.
Si la condition est vérifiée le CPU saute à l’instruction demandée, dans le cas
contraire il ignore cette instruction et passe automatiquement à l’instruction
d’après, comme si cette instruction n’existait pas.
Toutes ces instructions ont la forme générale suivante : JXX label.
Exemple :
......
......
......
......
......
......
......
......
......
......
......
Exemple
......
......
......
......
......
......
......
......
......
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 14 / 35
Instructions de branchement Branchement conditionnel
Exemple 1
......
......
......
......
......
......
......
......
......
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 15 / 35
Instructions de branchement Branchement conditionnel
Exemple 2
......
......
......
......
......
......
......
......
Exemple 3
......
......
......
......
......
......
......
......
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 16 / 35
Instructions de branchement Branchement conditionnel
Exemple 4
......
......
......
......
......
......
......
Exemple 5
......
......
......
......
......
......
......
......
......
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 17 / 35
Instructions de branchement Branchement conditionnel
Les boucles
Cette instruction effectue une répétition tant que CX n’est pas égal à zéro. A chaque
itération, CX est décrémenté d’une unité.
⇒ CX ← CX-1 et saute vers label spécifie si CX 6= 0.
Exemple 1
......
......
......
......
......
Exemple 2
......
......
......
......
......
......
......
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 18 / 35
Instructions de branchement Branchement conditionnel
Les boucles
Exemple :
......
......
......
......
......
......
......
......
......
......
......
......
Les boucles
Exemple :
......
......
......
......
......
......
......
......
......
......
Remarque
DF indique le sens du traitement des chaînes. Si DF est placé à 1, SI et DI sont
décrémentés et les chaînes sont traitées de droite à gauche, lorsque DF placé à 0, SI et
DI sont incrémentés et les chaînes sont traitées de gauche à droite.
Chargement d’un Byte ou un word depuis DS :SI dans AL ou AX, plus la mise à jour de
l’indexe SI selon DF. Le registre d’état reste inchangé.
Le cas de AL : Le cas de AX :
LODSB ; AL ← [DS :SI]. LODSW ; AX ← [DS :SI].
; SI ← SI± 1 selon DF. ; SI ← SI±2 selon DF.
Exemple
......
......
......
......
......
......
Copie le contenu de AL ou AX dans la case mémoire pointer par ES :DI plus la mise à
jour de l’indexe DI selon DF. Le registre d’état reste inchangé.
Le cas de AL : Le cas de AX :
STOSB ; [ES :DI] ← AL. STOSW ; [ES :DI] ← AX.
; DI ← DI± 1 selon DF. ; DI ← DI±2 selon DF.
Exemple
......
......
......
......
......
......
Comparaison entre la case mémoire pointer par ES :DI avec AL ou AX, plus la mise à
jour de l’indexe DI selon DF et le registre d’état.
Syntaxe : SCAS(B ou W) ; sans opérande.
Le cas de AL : Le cas de AX :
SCASB ; CMP [ES :DI], AL SCASW ; CMP [ES :DI], AX
; DI ← DI± 1 selon DF. ; DI ←DI± 2 selon DF.
; mise à jour de registre d’état. ; mise à jour de registre d’état.
Exemple
......
......
......
......
......
......
......
......
......
......
Copie le contenu de la case mémoire pointer par DS :SI dans la case mémoire pointer
par ES :DI, plus la mise à jour les indexes SI et DI selon DF. Le registre d’état reste
inchangé.
Syntaxe : MOVS(B ou W) ; sans opérande.
Le cas d’une case mémoire 8 bits : Le cas d’une case mémoire 16 bits :
MOVSB ; [ES :DI] ← [DS :SI] MOVSW ; [ES :DI] ← [DS :SI]
; SI ← SI± 1 selon DF. ; SI ← SI± 2 selon DF.
; DI ← DI± 1 selon DF. ; DI ← DI± 2 selon DF.
Exemple
......
......
......
......
......
......
......
......
Comparaison entre la case mémoire pointer par ES :DI avec la case mémoire pointer par
DS : SI, plus la mise à jour des indexes SI, DI selon DF et le registre d’état.
Syntaxe : CMPS(B ou W) ; sans opérande.
Le cas d’une case mémoire 8 bits : Le cas d’une case mémoire 16 bits :
CMPSB ; CMP [ES :DI],[DS :SI] MOVSW ; CMP [ES :DI],[DS :SI]
; SI ← SI± 1 selon DF. ; SI ← SI± 2 selon DF.
; DI ← DI± 1 selon DF. ; DI ← DI± 2 selon DF.
; mise à jour de registre d’état. ; mise à jour de registre d’état.
Exemple
......
......
......
......
......
......
......
......
REP décrément automatiquement CX est test est ce qu’il est égal à zéro ou non. Si
CX = 0 REP s’arrêt. Les instructions qui utilisent REP sont : MOVS, LODS et STOS.
Algorithme de fonctionnement
Si CX 6= 0 alors
1- On exécute l’instruction de traitement de chaîne.
2- CX ← CX - 1.
3- Répéter.
Sinon
Sort de la boucle de répétition.
Fin si.
.
......
......
......
......
......
......
......
......
......
......
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 27 / 35
Instructions de chaînes de caractères Le préfixe REPE et REPZ
Dérivé de REP, cette instruction continu la répétition tant que CX 6= 0 et ZF=1. Cette
instruction est très intéressante pour comparer si deux chaînes sont identiques.
Algorithme de fonctionnement
Si CX 6= 0 alors
1- On exécute l’instruction de traitement de chaîne.
2- CX ← CX-1.
3- Si ZF=1 alors répéter.
Sinon
Sort de la boucle de répétition.
Fin si
Sinon
Sort de la boucle de répétition.
Fin si.
Exemple :
......
......
......
......
......
......
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 28 / 35
Instructions de chaînes de caractères Le préfixe REPNE et REPNZ
Exemple :
......
......
......
......
......
......
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 29 / 35
Instructions d’E/S Interruption
Exemple
Lorsque la souris est déplacée, le programme en cours est suspendue pendant un bref
instant pour gérer ce déplacement.
Q. Comment fait-on pour écrire une chaîne de caractères à l’écran ? Ou bien pour lire un
caractére entré au clavier ?
å On peut faire appel à des fonctions (affichage, saisie, ...) du MS-DOS à partir d’un
programme écrit en langage assembleur, grâce à l’instruction INT (interruption)
suivie du numéro de l’interruption ;
å Sur le PC, les interruptions sont spécifiées par un numéro sur 8 bits : il y’a donc
256 interruptions différentes (int 00h à int FFh) ;
å L’interruption 21h (INT 21h) offre un regroupement de tous les services offert par
le MS-DOS ;
å Le numéro de la fonction requise doit être placé dans le registre AH (AH allant de
00H à 71H) ;
ISMAILI ALAOUI El Mehdi Architecture des ordinateurs Filière: SMI-4 30 / 35
Instructions d’E/S La fonction 02H
Exemple
......
......
......
......
......
......
Exemple
......
......
......
......
......
......
......
......
......
......
......
......
Remarque
La fonction 01h : Même principe que la fonction 08h, mais avec une sortie (avec écho).
Exemple
......
......
......
......
......
......
......
......
Filière: SMI-4
Plan
1 Langage machine
Définition
2 Langage assembleur
Définition
Les avantages
Les inconvénients
4 Outils de programmation
Le compilateur
Le débogueur
Le langage assembleur est donc un langage de très bas niveau. Cela signifie qu’il
est plus proche du langage machine ;
å Permet une meilleure connaissance du fonctionnement de la machine ;
Contrairement aux langages évolués (C++, Java, etc), il permet d’exploiter au
maximum les ressources de la machine. Il ne cache rien au programmeur ;
Permet une vitesse d’exécution supérieure à celle d’un programme écrit en langage
évolué ;
Utilisé pour la programmation de cartes graphiques, cartes sons et autres
problèmes de transmission de données ;
Également utilisé pour écrire les compilateurs des langages évolués ;
Enfin, l’apprentissage de la programmation en langage assembleur permet de
mieux comprendre le fonctionnement des autres langages et ainsi d’écrire des
programmes plus performants.
Le langage assembleur est propre à chaque type du CPU. On dit que le langage
assembleur est un langage "orienté machine" car il nécessite de penser d’abord à la
machine avant de penser au problème à résoudre ;
å Absence de portabilité
å Il n’existe pas un langage assembleur, mais un langage assembleur par type
de CPU.
En général, il faut beaucoup de lignes de code pour faire pas grand chose ;
å Très compliqué et fatiguant ;
å Le temps de programmation plus long.
3 L’édition de liens : Combine plusieurs fichiers objets afin de former un seul fichier
complet et exécutable, avec l’extension .exe.
Il existe plusieurs compilateurs pour programmer en langage assembleur. Les plus connus
sont :
Stack segment
dw 256 dup(0) ; ici on réserve la taille de la pile (Stack)
Ends
Data segment
. ; Ici on déclare les variables
Ends
Code segment
. ; Ici on déclare les fonctions locales, globales et externes
Main : ;Point d’entrée du code
Assume CS :Code, DS :Data, SS : Stack
. ;Assume permettant d’initialiser les registres de segments CS, DS et SS
MOV AX, Data ; Initialisation du segment de données
MOV DS, AX
MOV AX, Stack ; Initialisation du segment de Pile
MOV SS, AX
—————————————————————-
. ; À partir d’ici on peut placer nos lignes de code
—————————————————————-
Fin : MOV AH, 4Ch
... : INT 21h
Ends
Stack segment
dw 256 dup(0)
Ends
Data segment
msg : db "Bienvenue au monde de l’assembleur !$"
Ends
Code segment
Main :
Assume CS :Code, DS :Data, SS : Stack
MOV AX, Data
MOV DS, AX
MOV AX, Stack
MOV SS, AX
MOV DX,msg
MOV AH,09h
INT 21h
Fin :
MOV AH, 4Ch
INT 21h
Ends
Dans un premier temps, pour simplifier l’apprentissage de l’assembleur, nous allons tra-
vailler sur Emu8086 (émulateur logiciel qui simule un microprocesseur).
Emu8086 combine un éditeur de texte, un compilateur (FASM), un débogueur, et un émulateur
de logiciel dans un programme simple fonctionnant sur la plate-forme de Windows.
Le fichier squelette.asm (Figure 1) est un fichier que nous vous fournissons pour vous aider à
écrire vos programmes assembleur. Copiez le fichier dans C:/emu8086/MyBuild, puis lancez
l’Emu8086, ouvrez le fichier avec Emu8086.
Emu8086 se présente dans un premier temps comme un éditeur de texte classique, avec le sup-
port d’une colorisation syntaxique du code assembleur (mode éditeur).
Figure 1 – squelette.asm
2
Le fichier squelette.asm contient la déclaration d’un segment de pile de 512 octets, la dé-
claration d’un segment de données vide ainsi que la déclaration d’un segment de code. Dans
ce dernier, on retrouve la directive ASSUME permettant d’initialiser les trois registres de seg-
ments CS, DS et SS. On trouve aussi une zone de déclaration de fonctions publiques , une zone
de déclaration de fonctions externes, une zone de déclaration de fonctions locales, puis du code
assembleur.
Ce code débute par l’étiquette debut, puis on retrouve l’initialisation des segments de données
et de pile. Un espace réservé à l’écriture de vos programmes suit ces éléments. Enfin, l’étiquette
fin indique (informellement) la fin du programme. Les deux lignes suivantes correspondent à
l’appel standards de l’interruption DOS dont le rôle est de terminer d’un programme de manière
normal (libération de la mémoire, ...). Ensuite on trouve la fin du segment de code puis celle du
programme.
Pensez lorsque vous écrirez un programme à bien partir de ce fichier squelette en le sauvegar-
dant sous un autre nom avant de le modifier.
Créez un fichier TP1.asm identique au fichier squelette.asm. Compilez et exécutez le pro-
gramme (bouton RUN). Validez la fin de l’exécution avec OK.
Deux nouvelles fenêtres viennent de s’ouvrir, il s’agit du mode exécution de l’émulateur (Figure
2).
– La fenêtre "original source code" contient le code tel que vous l’avez écrit. La ligne
surlignée en jaune est la prochaine instruction qui va être exécutée. Comme on le verra
plus loin dans les TPs.
– La fenêtre "emulator": contient 4 zones que nous allons détailler ci-dessous:
1. Les boutons vont nous permettre d’exécuter notre programme soit pas à pas, i.e.
instruction par instruction avec la possibilité de revenir en arrière, soit automatique-
ment (en pouvant régler un délai d’attente entre chaque instruction).
Réinitialisez votre programme (reload) puis exécutez-le pas à pas (single step et
back step) jusqu’à la fin. Faites une nouvelle réinitialisation, réglez le délai sur 400
ms et faites une exécution normale (run).
3. La troisième zone représente la mémoire octet par octet. Sur une ligne, on retrouve
3