Jean-Luc GOERIG1/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Assembleur x86
Assembleur x86
Jean
Jean-
-Luc GOERIG
Luc GOERIG
Jean-Luc GOERIG2/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Mémoire centrale et adresse
Mémoire centrale et adresse
Comment est organisée la mémoire centrale?
La mémoire est composée d'une suite d'emplacements numérotés
séquentiellement, et pouvant contenir un nombre codé sur 8 bits
(octet compris entre 0 et 255).
Chaque emplacement peut être lu ou écrit ; pour cela, il faut
connaître son adresse.
Qu'est-ce qu'une adresse ?
C’est l'endroit où est stockée une donnée.
Selon le micro utilisé, elle peut être un seul nombre qu'on appelle
adresse
ou deux nombres associés : le segment et l'offset, que l'on note
segment:offset.
Jean-Luc GOERIG3/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Segment et offset
Segment et offset
Qu'est-ce qu'un 'segment' ?
Si on imagine que la mémoire est une route, les bornes
kilométriques représentent les segments. Cela signifie que la
mémoire est découpée en morceaux (segments), et que chaque
morceau (segments) contient un certain nombre d'informations.
Qu'est ce qu'un 'offset' ?
En anglais, "offset" signifie "décalage".
La mémoire etant décomposée en segments, il faut, pour localiser
une donnée précise, savoir dans quel segment elle se trouve, et le
décalage qu'il y a entre cette donnée et la première donnée du
segment. C'est ce qu'on appelle l’offset.
Jean-Luc GOERIG4/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registres d’un processeur
Registres d’un processeur
Qu'est ce qu'un 'registre' ?
Il s'agit d'une case mémoire particulière situé dans le processeur
Il contient un certain nombre de bits (généralement 8 pour les petits
microcontrôleurs, 32 voire 64 pour les PC, et encore plus pour
d'autres systèmes
Les données dans ces mémoires sont celles traitées directement par
le processeur. Il peut réaliser diverses actions sur ses registres :
addition, soustraction, décalage, etc.
Chaque instruction en assembleur intervient directement sur le
contenu des registres.
Jean-Luc GOERIG5/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Principaux registres et UAL
Principaux registres et UAL
Quels sont les principaux registres d’un processeur ?
Le compteur ordinal: il contient toujours l’adresse de la prochaine
instruction à exécuter.
Le registre d’instruction: contient l’instruction à exécuter
L’ Unité Arithmétique et Logique (UAL)
est spécialisé dans les calculs arithmétiques et logiques
possède un registre particulier : l’accumulateur sur lequel s’exécute
directement les opérations
Autres registres:
Le registre indicateur d’états (flags): il donne l’état du processeur à
tous moment, et peut seulement être lu
Le pointeur de pile (SP ou Stack Pointer): c’est le pointeur d’une
zone spéciale de la mémoire appelée pile (stack).
Jean-Luc GOERIG6/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Cycle de fonctionnement
Cycle de fonctionnement
Un cycle de fonctionnement du processeur suit toujours la
même séquence d’opérations suivantes:
1. Lecture du compteur ordinal (qui contient …)
2. Lecture de l’instruction en mémoire centrale et transfert
dans le registre d’instruction.
3. Incrémentation du compteur ordinal.
4. Décodage de l’instruction par le décodeur.
5. Exécution de l’instruction.
6. Retour en 1. pour un nouveau cycle.
Jean-Luc GOERIG7/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Assembleur
Assembleur
Qu'est ce que l'Assembleur ?
L'Assembleur est le langage de programmation de plus bas niveau.
Cela signifie qu'il est très proche du matériel.
A chaque instruction correspond un code machine, qui est compris
par le microprocesseur. Le code assembleur est donc la version
lisible du code machine.
Pourquoi programmer en Assembleur ?
S'il est de nos jours impensable de programmer entièrement une
application en Assembleur (sauf à des fins d'apprentissage bien sûr),
de nombreuses situations font que l'on doit avoir recours à ce
langage. C'est par exemple le cas lorsque la vitesse est un facteur
critique, et que la moindre microseconde est précieuse, ou encore
pour écrire un gestionnaire de démarrage (Boot-Loader), etc...
Jean-Luc GOERIG8/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Architecture x86
Architecture x86
Qu'est-ce qu'un x86 ?
x86 fait référence à tous les microprocesseurs de PC, depuis le
8088 (Intel).
Cela inclut les 8008, 8086, 286, 386, 486, 586, 686.
Le numéro est précédé d'un 'i' : i586. Il s'agit d'un problème
d'enregistrement des marques : elles doivent nécessairement
débuter par une lettre.
Jean-Luc GOERIG9/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registres x86
Registres x86
Les registres sont donc des cases mémoire situés à
l'intérieur du microprocesseur
au nombre de 14 sur le 8088 (16 bits), mais depuis cette époque
d'autres registres se sont rajoutés (32 et 64 bits)
on ne verra que ces 14 registres (registres généraux).
Quatre catégories de registres généraux:
les registres de travail
les registres de segment
les registres d'offset
le registre FLAG
Jean-Luc GOERIG10/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registres généraux
Registres généraux
Les registres généraux servent à manipuler des données, à
transférer des paramètres lors de l'appel de fonctions DOS
et à stocker des résultats intermédiaires.
A l'origine, les registres généraux x86 sont: AX, BX, CX, DX, SI, DI,
SP et BP . Taille = 16 bits.
Sur les nouveaux processeurs, TOUS les registres ont été étendus à
32 bits. On y accéde en ajoutant la lettre Edevant le nom du registre
(E pour Extended).
4 registres de travail: (ils ont un usage bien précis)
AX = ACCUMULATEUR
BX = BASE
CX = COMPTEUR
DX = DATA
Jean-Luc GOERIG11/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registres généraux de travail
Registres généraux de travail
AX reste l'accumulateur privilégié
Ils peuvent aussi servir comme zone de stockage de résultats
intermédiaires.
Ces 4 registres peuvent être divisés en deux sous-registres de 8 bits:
Les registres généraux AX, BX, CX, DX peuvent donc être considérés:
soit comme deux registres de 8 bits chacun
ils s'appellent alors AH et AL, BH et BL, CH et CL, DH et DL
H pour High , L pour Low
soit comme des registres 16 bits:
ils s'appellent alors AX, BX, CX, DX
soit comme des registres 32 bits (à partir du 80386)
ils s'appellent alors EAX, EBX, ECX et EDX (E pour Extended)
Jean-Luc GOERIG12/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registres généraux de travail
Registres généraux de travail
Correspondance :
Jean-Luc GOERIG13/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registres généraux de segment
Registres généraux de segment
Les registres de segment:
Ils sont utilisés pour stocker l'adresse de début d'un segment. Il peut
s'agir de l'adresse du début des instructions du programme, du début
des données ou du début de la pile.
CS = CODE SEGMENT : ce registre indique l'adresse du début des
instructions d'un programme ou d'une sous-routine.
DS = DATA SEGMENT : ce registre contient l'adresse du début des
données des programmes. Si le programme utilise plusieurs segments de
données, cette valeur devra être modifiée durant son exécution.
ES = EXTRA SEGMENT : ce registre est utilisé, par défaut, par certaines
instructions de copie de bloc. En dehors de ces instructions, le programmeur
est libre de l'utiliser comme il l'entend.
SS = STACK SEGMENT : il pointe sur une zone appelée la pile.
Jean-Luc GOERIG14/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registres généraux d’offset
Registres généraux d’offset
Les registres d'offset:
Ces registres contiennent une valeur représentant un offset à
combiner avec une adresse de segment
ils sont au nombre de 5: IP, SI , DI , BP, SP
Le compteur ordinal: IP
IP = INSTRUCTION POINTER :
ce registre de 16 bits est associé au registre de segment CS (CS:IP)
Il indique toujours l’adresse de la prochaine instruction à
exécuter.
Ce registre ne pourra JAMAIS être modifié directement; il sera
modifié INDIRECTEMENT par les instructions de saut , par les
sous-programmes et par les interruptions .
Jean-Luc GOERIG15/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registres généraux
Registres généraux
Autres registres d'offset:
SI = SOURCE INDEX : ce registre de 16 bits est principalement
utilisé lors d'opérations sur des chaînes de caractères; il est associé
au registre de segment DS.
DI = DESTINATION INDEX : ce registre de 16 bits est
principalement utilisé lors d'opérations sur des chaînes de
caractères; il est normalement associé au registre de segment DS;
dans le cas de manipulation de chaînes de caractères, il sera
associé à ES.
BP = BASE POINTER : ce registre de 16 bits est associé au registre
de segment SS (SS:BP) pour accèder aux données de la pile lors
d'appels de sous-programmes (CALL)
SP = STACK POINTER : ce registre de 16 bits est associé au
registre de segment SS (SS:SP) pour indiquer le dernier élément de
la pile.
Jean-Luc GOERIG16/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registre général d’état (Flag)
Registre général d’état (Flag)
Le registre FLAG:
Remarque : A l'époque, le registre FLAG était un ensemble de 16
bits. A partir du 386, ce registre est devenu Eflag. Il contient
quelques nouveaux Flags de controle (Virtual Mode Flag, Resume
Flag, Alignment Check, ...).
La valeur représentée par ce nombre de 16 bits n'a aucune
signification en tant qu'ensemble:ce registre est manipulé bit par
bit, certains d'entre eux influenceront le comportement du
programme.
Jean-Luc GOERIG17/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registre général d’état (Flag)
Registre général d’état (Flag)
CF = Carry Flag (retenue)
PF = Parity Flag (parité)
AF = Auxiliary Flag (retenue auxiliaire)
ZF = Zero Flag (zéro)
SF = Sign Flag (signe)
TF = Trap Flag (exécution pas à pas)
IF = Interrupt Flag (interruption)
DF = Direction Flag (direction)
OF = Overflow Flag (débordement)
IOPL = Input/Output privilege level (286 et plus)
NT = Nested Task Flag (386 et plus)
Jean-Luc GOERIG18/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registre général d’état (Flag)
Registre général d’état (Flag)
Les bits de ce registre sont appelés "indicateur", on peut les regrouper
en deux catégories:
Les Flags d'état : (CF, PF, AF, ZF ,SF et OF) seront modifiés par
certaines instructions. Il s'agit des instructions arithmétiques, logiques et
des instructions de comparaison (nous les verrons dans le chapitre
suivant). Les instructions de saut conditionnel testent par la suite l'état
des Flags en vue d'effectuer, ou non, un branchement.
Les Flags de contrôle : (TF, IF, DF) donnent au processeur des
indications quant au déroulement du programme. Ils peuvent être
activés ou désactivés par le programme en cours.
Remarques : Lors d'une instruction non arithmétique ou logique, les
indicateurs CF et OF sont remis à 0. Dans certains cas les indicateurs
ne sont pas modifiés, dans certains cas ils le sont et, parfois, ils sont
indéfinis...
Jean-Luc GOERIG19/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Registre général d’état (Flag)
Registre général d’état (Flag)
Voici la signification des principaux indicateurs
L'indicateur CF (CARRY ou retenue) : il sera mis à 1 s'il y a eu retenue
lors de la dernière instruction arithmétique.
L'indicateur OF (OVERFLOW ou débordement) : il sera mis à 1 (activé,
set) si le résultat d'une addition de 2 nombres positifs donne un nombre
négatif et inversement. En règle générale, cet indicateur est activé quand le
signe change alors qu'il ne devrait pas... En arithmétique non-signé, la
valeur de cet indicateur n'aura donc pas de signification.
L'indicateur ZF (ZERO) : il sera mis à 1 si le résultat d'une instruction
arithmétique a donné zéro et il le restera jusqu'à la prochaine instruction
arithmétique.
L'indicateur SF (SIGN ou sign) : il sera mis à 1 si le résultat d'une
instruction a donné un nombre négatif (bit de poids fort = 1) il sera mis à
zéro dans le cas contraire.
L'indicateur PF (PARITE) : l'indicateur est mis à 1 si le résultat d'une
opération contient un nombre pair de bits 1.
Note : Les indicateurs OF, CF, ZF ,SF et PF sont appelés indicateurs
"arithmétiques" car ils sont tous affectés par des instructions de ce type.
Jean-Luc GOERIG20/36
Fonctionnement d’un processeur
Fonctionnement d’un processeur
Novembre 2007 - #071119
Instructions arithmétiques
Instructions arithmétiques
Une instruction assembleur est également appelé mnémonique.
Instruction MOV:
But : copie le contenu de l'opérande source dans l'opérande de destination.
Syntaxe : MOV destination, source
Flags : aucun flag n'est modifié par cette instruction.
Exemples : Assembleur: Effet:
MOV AX,1234 AX <- 1234
MOV BX,1234H BX <- 1234
16
= 4660
10
MOV DX,CX DX <- CX
MOV BX,AX Echange les contenus
MOV AX,DX de AX et DX mais détruit
MOV DX,BX le contenu de BX.
MOV est l'instruction la plus utilisée en assembleur.
1 / 9 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !