0% ont trouvé ce document utile (0 vote)
39 vues39 pages

1 Introduction

Le document présente un module sur les systèmes d'exploitation, incluant des notions sur la machine, le langage assembleur et les microprocesseurs, en particulier le 8086. Il décrit la structure de la mémoire, les instructions, les registres et le codage des nombres. Des exercices pratiques sont également proposés pour renforcer la compréhension des concepts abordés.

Transféré par

Ahmed Zuffua
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
39 vues39 pages

1 Introduction

Le document présente un module sur les systèmes d'exploitation, incluant des notions sur la machine, le langage assembleur et les microprocesseurs, en particulier le 8086. Il décrit la structure de la mémoire, les instructions, les registres et le codage des nombres. Des exercices pratiques sont également proposés pour renforcer la compréhension des concepts abordés.

Transféré par

Ahmed Zuffua
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction aux

Systèmes d’Exploitation
2
BEKKOUCHE Mohammed
[email protected]

1
PROGRAMME DU MODULE

I- PRESENTATION DE LA MACHINE
• Description fonctionnelle de la machine
• Code interne et format interne d’une instruction
• Structure interne d’un programme
• Description du langage symbolique (syntaxe générale du langage)
II- PRESENTATION DU LANGAGE ASSEMBLEUR
• Structure général d’un programme source (symbolique)
• Les directives
• Instructions de transferts
• Instructions arithmétiques
• Instructions de comparaison, de boucles (répétitions) et de branchements
• Instructions de manipulation de bits (logiques et décalages)
• Instructions de pile
• Instructions de procédures et interruptions
• Instructions de traitement de chaînes et préfixe
III- MACROS INSTRUCTIONS

IV- INSTRUCTIONS ETENDUES (instructions multi media,…) 2


Sources et Recommandations
• A. Rahmoun, « Cours système d’exploitation 2 » , ESI-SBA, 2017.
• H. Badsi, « Cours Introduction aux Systèmes d’Exploitation 2 » , ESI-
SBA, 2018.
• MICROPROCESSEUR 8086 ARCHITECTURE ET PROGRAMMATION :
https://www.technologuepro.com/cours-genie-electrique/cours-2-
microprocesseur-8086-architecture-programmation/
• Emu8086 documentation : https://yassinebridi.github.io/asm-docs/
• P. Preux, « Assembleur i8086 » IUT informatique du Littoral, 1995.
• A. Oumnad, « Microprocesseurs de la famille 8086 », Ecole des
Ingénieurs Mohamadia, 2007

3
Calcul de la note du Module systèmes d’exploitation 2

30% …… Note de l’examen intermédiaire


30% … Note de l’examen semestriel final
40% ………..… Note de TP

4
Positionnement d’un système d’exploitation

5
Prérequis du module

Algorithmique

Intro. Sys. Exp. (Sem1)

Architecture 1

Prérequis du Module (en rouge)


NB: Le présent module est parallèle et non pas une suite du précédant 6
Positionnement du module Introduction aux
Système d’exploitation 1
Distribution Linux

Applications Shell, GUI, Other Apps….

Système d’Exploitation Linux Kernel (Noyau)

Matériel ou Hardware CPU, Mémoire, Périphériques

ISE1 7
Positionnement du module Introduction aux
Système d’exploitation 2

Applications Shell, GUI, Other Apps….

Système d’Exploitation Linux Kernel (Noyau)

Matériel ou Hardware CPU, Mémoire, Périphériques

ISE1

ISE2 8
Introduction

9
Introduction aux Microprocesseur
L'apparition des microprocesseurs date du début des années 1970. A cette
époque, deux événements favorables sont apparus :
• le concept de "LSI (Large Scale Integration)" permettant d'intégrer
plusieurs milliers de portes sur un même substrat.
• l'arrivée à maturité de la technologie MOS caractérisée par sa faible
consommation.
La conjugaison de ces événements a permis de regrouper une unité centrale
d'ordinateur dans un seul circuit intégré appelé "microprocesseur". Depuis,
une multitude de composants de ce type sont apparus au sein de
familles provenant essentiellement de grands constructeurs américains :
Intel, Motorola, Advanced Micro Devices (AMD), Texas Instruments,...
et japonais : NEC, Mitsubishi,...
10
Introduction aux Microprocesseur
Grâce aux progrès de l'intégration, l'augmentation des performances a
porté sur :
• la vitesse de fonctionnement.
• la largeur des mots traités (8, 16, 32, 64 bits).
• le nombre et la complexité des opérations réalisables.
L'objectif de ce module est double :
1. présenter les notions de base nécessaires à la compréhension des
systèmes utilisant des microprocesseurs,
2. et réaliser des travaux pratiques permettant de programmer en
langage machine (assembleur).
11
Un processeur, en deux mots
• Un processeur constitue le cœur de tout ordinateur : il exécute les
instructions qui composent les programmes que nous lui demandons
d’exécuter. Les instructions sont stockées en mémoire (en dehors du
processeur).
• Ces instructions (dont l’ensemble compose le langage d’assemblage,
ou assembleur) sont très simples mais n’en permettent pas moins, en
les combinant, de réaliser n’importe quelle opération programmable.
• Pour exécuter un programme, le processeur lit les instructions en
mémoire, une par une. Il connait à tout instant l’adresse (l’endroit
dans la mémoire) à laquelle se trouve la prochaine instruction à
exécuter car il mémorise cette adresse dans son compteur ordinal.

12
Un processeur, en deux mots
• Les instructions agissent sur des données qui sont situées soit en
mémoire, soit dans des registres du processeur. Un registre est un
élément de mémorisation interne au processeur et contenant une
valeur.
• Les registres sont en nombre très limité, 14 en l’occurence pour le
8086.
 Pour accéder une donnée en mémoire, il faut spécifier son adresse.
 Pour accéder une donnée dans un registre, il faut spécifier son nom
(chaque registre possède un nom qui est une chaîne de caractères).

13
Un processeur, en deux mots
Le 8086 est un processeur 16 bits, c’est-à-dire qu’il traite des données
codées sur 16 bits.
Quelques définitions :
– un bit est une valeur binaire qui, par convention, peut prendre la
valeur 0 ou 1 ;
– un octet est une donnée codée sur 8 bits ;
– un mot est une donnée codée sur 16 bits ;
– un Koctet est un ensemble de 1024 octets.

14
La mémoire
• La mémoire est une séquence d’octets, tous
numérotés de manière unique par un entier
compris entre 0 et N −1. On dit alors que la
capacité de la mémoire est de N octets. On
a toujours N qui est une puissance de 2 (N =
𝟐𝒎 ).
• On appelle adresse effective (AE) d’un octet
en mémoire le numéro qui lui est associé

15
La mémoire
• Pour le 8086, et donc pour nous programmeurs du 8086, un octet est
désigné par un couple :
(numéro de segment, déplacement dans le segment)
qui constituent une adresse segmentée (AS)
• Un segment est un ensemble de 64 Koctets consécutifs. Le déplacement
(ou offset) spécifie un octet particulier dans un segment (cf. fig du slide
suivant).
• Segment et déplacement sont codés sur 16 bits et peuvent donc prendre
une valeur comprise entre 0 et 65535. On a une relation entre adresses
effectives et couple (segment, déplacement) sous la forme de l’équation :
adresse effective = 16 × segment + déplacement

16
La mémoire
Adressage segmenté. En traits
gras, on a représenté le segment
commençant à l’adresse
effective s dont le numéro est
𝒔
donc N = . s doit être un
𝟏𝟔
multiple de 16 pour être le 1er
octet d’un segment.

17
La mémoire
• Exercice :
Donnez les adresses effectives (physiques) à partir des adresses
segmentées (tout en hexadécimal) :
Adresse segmentée Adresse effective
06D1:000D
059E:0000
0700:00FB
FFFF:0005
Où commence et où se termine chaque segment ?
18
La mémoire
• Solution :
Donnez les adresses effectives (physiques) à partir des adresses
segmentées (tout en hexadécimal) :
Adresse Adresse Adresse du commencement Adresse de la fin du segment
segmentée effective du segment
Adr seg Adr eff Adr seg Adr eff
06D1:000D 06D1D 06D1:0000 06D10 06D1:FFFF 16D0F
059E:0000 059E0 059E:0000 059E0 059E:FFFF 159DF
0700:00FB 070FB 0700:0000 07000 0700:FFFF 16FFF
FFFF:0005 FFFF5 FFFF:0000 FFFF0 FFFF:FFFF ✘ 10FFEF ✘
FFFF:000F ✔ FFFFF ✔ 19
La mémoire
• Une conséquence de la relation énoncée plus haut entre adresse
effective et adresse segmentée est qu’un octet d’adresse effective
donnée peut être accédé de plusieurs manières.
• Plus précisément, à chaque AE correspond 𝟐𝟏𝟐 = 4096 AS différentes.

20
La mémoire
• Les segments : on a représenté
quelques segments pour montrer
leur chevauchement et le fait qu’un
octet-mémoire possède plusieurs
adresses segmentées.
• Par exemple, l’octet d’adresse
effective α peut être adressé de
multiples façons, selon que l’on
considère qu’il se trouve dans le
segment s, s + 1, s + 2, ...
• Dans chacun de ces cas, l’adresse
segmentée de l’octet α est ( s, d ), ( s
+ 1, d − 16 ), ( s + 2, d − 32 ), ...
• Notons que chaque 𝟏𝟐
octet-mémoire
appartient à 𝟐 = 4096 segments
différents.

21
La mémoire
• Exercice :
Donnez deux adresses segmentées pour chaque adresse réelle
(effective) (tout est en hexadécimal):

Adresse effective Adresse segmentée 1 Adresse segmentée 2


FFFFF
08A9F

22
La mémoire
• Exercice :
Donnez deux adresses segmentées pour chaque adresse réelle
(effective) (tout est en hexadécimal):

Adresse effective Adresse segmentée 1 Adresse segmentée 2


FFFFF FFFF:000F FFFE :001F
08A9F 0700:1A9F 0800 :0A9F

23
La mémoire
Lors de son exécution, un programme utilise plusieurs segments
mémoire (cf. fig du slide suivant) :
– un segment contient les instructions du programme (le segment de
code) ;
– un segment contient les données du programme (le segment de
données) ;
– un segment contient la pile du programme (le segment de pile). Ce
segment très important
Ces trois segments peuvent se situer n’importe où en mémoire et
même se recouvrir partiellement ou totalement.

24
La mémoire
• Structure de la mémoire. On a
représenté en traits gras les
segments de code, de données
et de pile qui sont créés lors du
déclenchement de l’exécution
d’un programme (de haut en
bas – en réalité, ils peuvent bien
entendu être situés n’importe
où en mémoire).
• Chaque segment est référencé
par un registre de segment. Les
différents segments peuvent se
recouvrir partiellement ou
complètement.

25
Les registres du 8086
• Le 8086 possède 14 registres de 16 bits

26
Les registres du 8086
• ax registre d’usage général contenant des données. Les 8 bits de poids faible se nomment al et les
8 bits de poids fort se nomment ah.
• bx registre d’usage général contenant des données. Comme ax, bx se décompose en bl et bh.
• cx registre d’usage général contenant des données. Comme ax, cx se décompose en cl et ch.
• dx registre d’usage général contenant des données. Comme ax, dx se décompose en dl et dh.
• si registre d’usage général contenant généralement le déplacement dans un segment d’une
donnée.
• di registre d’usage général contenant généralement le déplacement dans un segment d’une
donnée.
• bp registre utilisé pour adresser des données dans la pile.
• sp registre pointeur de pile.
• ip registre pointeur d’instruction (compteur ordinal). Ce registre indique la prochaine instruction
à exécuter.

27
Les registres du 8086 (flags)
flags registre d’indicateurs de l’état du processeur. Certains bits de ce
registre portent des noms. Ce sont tous des indicateurs binaires :
• O le bit d’overflow est positionné par la plupart des instructions
arithmétiques pour indiquer s’il y a eu un débordement de capacité
lors du calcul (un nombre trop grand ou trop petit)
• D bit de direction. Il sera décrit plus loin.
• S le bit de signe est positionné par la plupart des instructions
arithmétiques pour indiquer le signe du résultat (positif ou négatif)
• Z le bit de zéro est positionné par la plupart des instructions
arithmétiques pour indiquer que le résultat du calcul est 0

28
Les registres du 8086 (flags)
• C le bit de carry (retenue) est positionné par la plupart des
instructions arithmétiques pour indiquer si le calcul a engendré une
retenue qui devra être reportée sur les calculs suivants
• A le bit dit auxiliary carry (retenue auxiliaire) est positionné à 1 par la
plupart des instructions arithmétiques pour indiquer si la dernière
opération a généré une retenue du bit numéro 3 vers le bit numéro
4, il est positionné à 0 dans le cas contraire.
• P le bit de parité est positionné par la plupart des instructions
arithmétiques. Il indique si les 8 bits de poids faible du résultat
comportent un nombre pair de 1.

29
Les registres du 8086
Le 8086 comporte également des registres 16 bits pour contenir des
numéros de segment :
• cs code segment segment contenant le programme en cours d’exécution
• ds data segment segment contenant les données
• es registre segment auxiliaire pour adresser des données
• ss stack segment segment contenant la pile
Les valeurs des registres cs, ds et ss sont automatiquement initialisées par le
système d’exploitation au lancement du programme. Dès lors, ces segments
sont implicites, c’est-à-dire que si l’on désire accéder à une donnée en
mémoire, il suffit de spécifier son offset sans avoir à se soucier du segment.
30
Le codage des nombres
• Les instructions du 8086 manipulent des valeurs numériques entières
codées sur 1 ou 2 octets.
• Nous décrivons ici le codage des nombres entiers. Nous distinguons quatre
types de codage :
– non signé pour des nombres entiers forcément positifs ;
– signé pour des nombres entiers positifs ou négatifs.
– décimal compacté, ou décimal codé binaire
– décimal non compacté
• C’est au programmeur de décider du codage qu’il utilise et à écrire son
programme en conséquence.
• L’ordinateur ne sait pas quel est le codage utilisé. Il exécute simplement des
instructions.
31
Représentation non signée des nombres
entiers
• Avec l bits, il est possible de coder 𝟐𝒍 valeurs différentes. Si l = 8, on
peut donc coder 256 valeurs différentes. On peut établir le codage
suivant, sur 8 bits :

• Ce codage permet de représenter tout nombre entier entre 0 et 255


(0 et 𝟐𝒍 − 1) avec 8 bits (l bits). Du fait que l’on ne représente que des
nombres positifs, ce codage est qualifié de non signé.
32
Représentation signée des nombres entiers
• Si l’on veut pouvoir représenter des nombres positifs et négatifs,
l’idée naturelle consiste, plutôt qu’à coder des nombres compris entre
0 et 255, à représenter des nombres entre -128 et +127, ce qui
représente toujours 256 valeurs différentes à coder avec 8 bits.

33
Représentation signée des nombres entiers
• Ce codage se nomme codage par complément à deux.
• Dans le codage signé, on constate que le bit de poids fort vaut 1 pour
tous les nombres négatifs, 0 pour tous les nombres positifs. Ce bit
indique donc le signe du nombre codé. Aussi, ce bit se nomme le bit
de signe.
• Il faut bien prendre garde que si le bit de signe vaut 0, la valeur
représentée est la même en codage signé ou non signé. Par contre, si
le bit de signe vaut 1, la valeur codée est supérieure à 127 en codage
non signé, inférieure à 0 en codage signé.

34
Codage décimal
• En codage décimal, un chiffre décimal (compris donc entre 0 et 9) est codé
sur 4 bits. 4 bits codant en principe 16 valeurs différentes, seules 10 de ces
16 combinaisons sont effectivement utilisées en codage décimal, les autres
n’ayant alors pas de sens. Le codage est le suivant :

35
Codage décimal
• On distingue deux types de représentation, compactée ou non. Un chiffre
nécessitant 4 bits pour son codage, on peut représenter deux chiffres par
octet. Ce codage porte le nom de codage décimal compacté.
• On peut également ne mettre qu’un seul chiffre par octet, les 4 bits de
poids fort de l’octet étant inutilisés. On qualifie ce codage de décimal non
compacté.
• Par exemple, 19 se code :
odécimal compacté : 00011001
odécimal non compacté : 00000001 00001001
• Deux octets sont nécessaires dans la représentation non compactée.
36
Complément à deux d’un nombre
• Nous indiquons ici comment obtenir le complément à deux d’un
nombre. Cette méthode donne la représentation binaire signée d’un
nombre négatif. L’algorithme est simple. Soit à calculer la
représentation du nombre −n (où n est un nombre positif). On
effectue les opérations suivantes :
oécrire n sous forme binaire
oen complémenter tous les bits (0  1, 1  0)
oajouter la valeur 1 à ce nombre binaire

37
Complément à deux d’un nombre
Nous présentons cet algorithme sur un exemple. Soit à calculer le
complément à deux de -23 :
• la représentation binaire sur 8 bits de 23 est 00010111
• par complément des bits, on obtient : 11101000
• en ajoutant 1, on obtient : 11101001
Le complément à deux de 00010111 est donc 11101001. La
représentation binaire signée de -23 est donc 11101001

38
Extension du signe
• Etendre le signe d’une donnée consiste, lors du transfert de la valeur
d’un octet dans un mot, à recopier le bit de signe de l’octet sur tous
les bits de l’octet de poids fort du mot.
• Par exemple, l’extension du signe de 10011110 en mot donne
1111111110011110

39

Vous aimerez peut-être aussi