Architecture des ordinateurs
Chapitre n
◦4: Jeu d’instructions (Partie I)
ISMAILI ALAOUI El Mehdi
1Filière: SMI-4
1. Université moulay ismail faculté des sciences de meknès département d’informatique
Plan
1 Introduction 2 Format d’instruction 3 Déclaration de variables 4 Déclaration des tableaux 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
Introduction
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.
Format d’instruction
Les instructions et leurs opérandes (paramètres) sont stockées en mémoire principale.
Une instruction est composée de quatre champs :
å É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 .
.
Étiquette : Champ opération Champ opérande ; Commentaire
Déclaration de variables
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 ?
Déclaration des tableaux
Les tableaux peuvent être vus comme des chaînes de variables, c’est à dire des suite d’octets.
Exemples ...
...
...
...
...
...
...
...
Lorsque l’on veut déclarer un grand tableau de n cases, toutes initialisées à la même valeur, on utilise la directive dup :
Exemples ...
...
...
...
...
...
Manipulation de données
1. Operateur offset : Renvoie l’adresse à laquelle située une étiquette de donnée.
Exemples ...
...
...
...
...
...
...
...
2. Operateur PTR : Permet de spécifier la taille des transferts.
Exemples ...
...
...
...
...
...
...
Instructions de la pile
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) ;
La pile est implémentée en mémoire et le registre SP pointe sur le haut de la pile, c’est à dire sur la première case mémoire libre à son sommet (SS : SP) ;
Pour accéder à la pile nous auront 2 instructions : PUSH, POP.
Instructions de la pile Instruction PUSH
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 ;
2 La source et sauvegardée à l’adresse SS :SP.
Exemple
MOV SP, 20h MOV AX, 1234h MOV BX, ABCDh PUSH AX PUSH BX ....
....
....
....
Instructions de la pile Instruction POP
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.
2 Le registre de SP est incrémenté de 2⇒SP←SP+2 ; Exemple
MOV SP, 20h MOV AX, 1234h MOV BX, ABCDh PUSH AX PUSH BX
POP CX⇒ CX←ABCDh
POP BX⇒ BX←1234h ...
...
Instructions arithmétiques
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
Instructions arithmétiques
3. INC (Incrémentation) : Cette instruction incrémente de 1 l’opérande.
Exemple MOV AX,18h
INC AX ; AX contient 19h
4. SUB (Soustraction) : Cette instruction soustrait le deuxième opérande au premier : (Destination←Destination-Source).
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
Instructions arithmétiques
6. DEC (Décrémentation) : Cette instruction décrémente de 1 l’opérande.
Exemple MOV AX, 18h
DEC AX ; AX contient 17h
7. CMP (Comparaison) : Cette instruction effectue une soustraction (comme SUB), mais ne stocke pas le résultat, seuls les indicateurs sont modifies.
Exemple MOV AL, 40h MOV AH, 30h
CMP AL, AH ; Résultat←AL - AH.
Plus la mise à jour des indicateurs : CF←0 ; OF←0 ; SF←0 ; ZF←0.
On peut dire que AL6= AH ou AL est plus grand que AH.
8. NEG (Negation) :Cette instruction effectue un complément à 2 sur l’opérande. En fait, inverse chaque bit de l’opérande et lui ajoute 1. Les indicateurs modifiés : OF - PF - SF - ZF
Exemple
MOV AX,0000 1000b (+8)
NEG AX ; AX= 1111 0111 + 0000 0001= 1111 1000 (-8)
Instructions arithmétiques
9. MUL (Multiplication ) : Cette instruction effectue une multiplication non signée de l’opérande source avec l’accumulateur :
Syntaxe : MUL Source.
Si la source est un octet : AX←AL*Source Si la source est un mot : DX AX←AX*Source Les indicateurs affectés : CF,OF.
Les indicateurs ZF, SF et PF sont inconnus.
Exemple MOV AL, 20h MOV CL, 02h
MUL CL ; AX←AL*CL ; AX=20h*02h=40h.
10. IMUL (Multiplication signée) : Cette instruction a le même principe de fonctionnement que l’instruction MUL, mais elle supporte les nombres signés.
Instructions arithmétiques
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.
Instructions arithmétiques
13. CBW (Convert Byte to Word)
Permet de doubler la taille de l’opérande signé (Byte→Word).
Reproduit le bit 7 (bit de signe) de AL dans AH jusqu’à remplissage de ce dernier.
.
...
...
...
...
...
...
14. CWD (Convert Word to Doubleword)
Permet de doubler la taille de l’opérande signé (Word→Doubleword).
Reproduit le bit 15 (bit de signe) de AX dans DX jusqu’à remplissage de ce dernier.
.
...
...
...
...
...
...
...
Instructions logiques
1. AND : ET logique entre la destination et la source, le résultat est mis dans la destination. Les indicateurs affectés : PF - SF - ZF. Mais CF=0 et OF=0.
Exemple
MOV AH,1001 1101b MOV BH,0110 1101b
AND AH, BH ; AH←AH ET BH= 0000 1101b
2. OR : OU logique entre la destination et la source, le résultat est mis dans la destination. Les indicateurs affectés : PF - SF - ZF. Mais CF=0 et OF=0.
Exemple
MOV AH,1001 1101b MOV BH,0110 1101b
OR AH, BH ; AH←AH OU BH =1111 1101b
3. XOR : OU exclusif entre la destination et la source, le résultat est mis dans la destination. Les indicateurs affectés : PF - SF - ZF. Mais CF=0 et OF=0.
Exemple
MOV AH,1001 1101b MOV BH,0110 1101b
XOR AH, BH ; AH←AH XOR BH=1111 0000b
Instructions logiques
4. NOT : Négation logique de la destination, le résultat est mis dans la destination.
Exemple
MOV AX,1001 1101 1110 0110b
NOT AX ;AX= 0110 0010 0001 1001b ...
5. TEST : ET logique entre la destination et la source pour positionner les indicateurs sans modification de destination.
Syntaxe :
TEST Dest, Src ; Résultat←Dest (ET) Src.
. ; Plus la mise à jour des indicateurs.
Exemple ...
...
...
...
...
...
...
...
...
Instructions de tarnsferts
1. XCHG :Exchange
Elle permet de permuter la source avec la destination.
Exemple ...
...
...
...
...
2. LEA : Load Effective Address
Transfère l’adresse d’offset de la source dans le registre de destination (de type index ou base).
Exemple ...
...
...
...
...
...
...
Instructions de tarnsferts
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 ..
..
..
..
4. LAHF :Load AH from Flags
Charge AH par les 8 bits du poids faible de registre d’état.
5. SAHF : Store AH into Flags
Place le contenu de AH dans l’octet de poids faible du registre d’état.
Instructions de tarnsferts
6. LDS : Load Data Segment
Charge le contenu d’une adresse 32 bits dans le registre destination de 16 bits et le registre de segment DS.
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) ..
..
..
..
..
..
..
..
7. LES : Load Extra Segment
Cette instruction est semblable à l’instruction LDS, mais elle utilise le registre de segment ES au lieu de DS.