• Aucun résultat trouvé

[PDF] Formation Informatique de base sur l’architecture des ordinateurs | Cours informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Formation Informatique de base sur l’architecture des ordinateurs | Cours informatique"

Copied!
36
0
0

Texte intégral

(1)

Assembleur (cours)

Architecture des ordinateurs

I.

Historique

1) Les précurseurs

La création des premières machines à calculer était basée sur la technologie des engrenages (mécaniques).

Parmi les inventeurs, il y a :

• Blaise Pascal (1623 – 1662) _ France

• Gottfried W.Phelm Leibniz (1646 – 1716) _ Allemagne • Charles Babbage, Ada Lovelace (1792 – 1871) _ Angleterre

Jacquard : utilisation des cartes perforées (Æ machines programmables à l’aide de cartes perforées).

Il a fallu attendre l’avènement de l’électronique pour mettre en pratique les idées théoriques développées par les précurseurs.

En 1936 : machine de Zuse (électromécanique)

En 1940 : machine de George Stibitz (Laboratoires Bell) En 1944 : le Mark I, université de Harvard Ai Ken avec IBM

Ces machines étaient dépassées avant même d’être construites ; au même moment des chercheurs travaillaient sur la technologie des tubes à vide.

2) Première génération de calculateurs (1937 – 1955) Tubes à vide

1937 : machine ABC de Atanasoff - Berry (Iowa State University)

1943 : Colossus, machine construite en Angleterre ; décodage des messages allemands

1944 : Von Neumann étudiait le stockage des programmes sous forme numérique avec Eckert et Mauchly :

EDVAC (=Electronic Discrete Variable Automatic Computer) = projet de Von Neumann

(2)

1946 : ENIAC (= Electronic Numrical Integrator And Calculator), construite à l’université de Californie :

30 mètres de long ; 2,5 m de haut ; chacun des 20 registres de 10 chiffres avait 60 cm de long ; 18000 tubes à vide ;

la programmation se faisait manuellement en enfichant des câbles et en positionnant des interrupteurs

1949 : Maurice Wilkes (Cambridge)

ETSAC qui fut la première machine à programmes enregistrés de grande envergure.

Un prototype appelé le Mark I fut construit à l’université de Manchester en 1948

1951 : Eckert et Mauchly ont construit l’UNIVACI (vendu à 48 unités) 1952 : l’EDVACI est opérationnel

1953 : 1ère machine d’IBM : IBM 701 (vendu à 19 unités)

3) Deuxième génération : transistors (1955 – 1965)

1948 : invention des transistors (Laboratoires Bell) 1961 : PDP 1 de DEC

1963 : B5000 de Bunaighs (architecture à pile) supportait les langages de haut niveau comme l’ALGOLqui utilisait un système d’explication écrit dans un langage de haut niveau

1964 : IBM devient n°1 avec l’IBM 7094 et l’IBM 1401 (calculateur pour gestion)

4) Troisième génération : circuits intégrés (1965 – 1980)

1964 : IBM 360 : 1ère famille d’ordinateurs à architecture commune.

CDC 6600 créé par Control Data : le 1er ordinateur pipeline

(parallélisme). 1965 : PDP 8 de DEC 1970 : PDP 11 de DEC

1978 : VAX, un seul système d’exploitation VHS, succès pendant 10 ans.

5) Quatrième génération (1980)

1980 : retour d’une architecture plus simple (Bakcley).

Ditzel et Patterson ont étudié l’idée d’ordi à jeu d’instructions réduit (RISC).

Idée conservée par CRAY – CRAY I 1981 : PC d’IBM

1984 : Apple lance son Macintosh

1987 : Sun fournit des machines basées sur l’architecture SPARC (RISC) 1993 : Power PC

(3)

II.

Architecture à microprocesseur

1) Architecture de Von Neumann

Cette machine se compose :

• d’une unité centrale (de contrôle) qui supervise le fonctionnement de la mémoire

• d’une unité de calculs

• d’une unité d’échange (entrées / sorties) • d’une mémoire finie

2) L’unité centrale

C’est elle qui exécute les instructions. Elle comporte des registres qui sont des zones privilégiées de stockage de l’information (données et instructions). Cette information sera codée dans ces registres par une suite de 0 et de 1.

8086 registres de 16 bits 80386 registres de 32 bits

Ces registres sont utilisés pour stocker :

• Les instructions arithmétiques et logiques • L’adresse de la prochaine instruction à exécuter

• L’adresse en mémoire d’une donnée (constante stockée en mém.)

3) La mémoire

La mémoire à pour première raison d’être de fournir des registres

supplémentaires. Cette mémoire, tout comme les registres de l’unité centrale, ne contient de façon réelle que des nombres (0 ou 1) Æ tout ce que manipule la machine de Von Neumann doit avoir un format numérique qu’il s’agisse de programmes ou de données (pas de distinction intrinsèque entre instruction de programmes ou de données).

Dans la mémoire les 0 et les 1 sont regroupés par 8 (octets).

Capacité de la mémoire = nombre d’octets (1 Ko = 2^10 octets ; 1 Mo = 2^20 octets ; 1 Go = 2^30 octets).

Les octets sont considérés comme contigus et numérotés de 0 à N-1 (adresse physique) si la mémoire est de taille MAX.

On appelle "mot mémoire" l’unité d’accès à la mémoire Æ taile des registres du processeur.

(4)

On a plusieurs façons de coder les infos en mémoire : Æ binaire

Æ DCB (décimal codé binaire Æ code ASCII

Æ virgule flottante

La mémoire est décomposée en mémoire morte (qui contient le jeu

d’instructions de base du processeur) et en mémoire vive = RAM (qui contient le programme que l’on désire exécuter).

4) Les entrées / sorties

Elles permettent l’interaction avec l’homme à travers les appareils dits périphériques :

• Clavier • Ecran

• Mémoire de masse (= mémoire externe), c-à-d disque dur, disquettes, CD, …) Æ fonction de stockage de l’information. Elle possède un caractère permanent par opposition avec la mémoire vive qui garde les infos de façon temporaire.

5) Les bus

Ce sont des fils de communication entre l’unité centrale (U.C.), la mémoire et les entrées / sorties :

• Bus des données Æ transporte la valeur de l’octet

• Bus d’adresse Æ fixe l’adresse de l’octet à accéder en mémoire centrale

• Bus de contrôle Æ fixe le sens de l’échange

6) Les instructions

C’est ce qui forme le jeu d’instruction du processus : • Instructions arithmétiques

• Instructions logiques de transfert

• Instructions de contrôle (boucle, conditionnelle) - Architecture RISC (jeu d’instruction réduit)

(5)

1°) recherche de l’instruction en mémoire centrale ; l’adresse est indiquée par le compteur cardinal

• L’U.C. renvoie l’adresse de l’instruction sur le bus d’adresse et demande une lecture sur le bus de contrôle

• La mémoire dépose la valeur contenue à cette adresse sur le bus de données, la valeur est lue par l’U.C.

2°) décodage

• L’U.C. détermine l’instruction correspondant à la valeur lue (code) sur le bus des données

3°) recherche de l’opérande même principe que 1°) 4°) exécution

L’instruction n’est exécutée que si tous les opérandes sont présents ; le résultat est gardé dans l’U.C.

Simultanément l’U.C. calcule l’adresse de la prochaine instruction à exécuter.

5°) écriture du résultat en mémoire principe :

• Valeur déposée sur le bus de données • Adresse déposée sur le bus d’adresse • Ecriture demandée sur le bus de contrôle

(6)

III. Intel 80x86 (Pentium)

Circuit intégré du type VLSI.

Le 8086 est le processeur 16 bits qui est à l’origine des Pentium (donc utilisé initialement dans tous les PC).

1) Les registres

Les registres généraux : • AX : 16 bits

(Subdivisé en deux registres 8 bits : AH, AL) Accumulateur (contient en particulier les résultats) • BX (BH, BL)

Registre de base , sert souvent de registre d’adressage • CX (CH, CL)

Compteur (dans les instructions de répétition) • DX (DH, DL)

Registre de donnée , c’est une extension de l’accumulateur • Sur 32 bits on a l’équivalent : EAX, EBX, ECX, EDX Les registres d’adressage (ou registres pointeurs) :

• BX • BP

Pointeur de base (travaillé dans la pile) • SI, DI

Registres d’index (mémoire) • SP

Indique le sommet de la pile Les registres de segment :

• CS

Pointeur du segment de code • DS

Pointeur du segment de donnée • SS

Pointeur du segment de pile • ES

(7)

Les registres de contrôle :

• IP : Pointeur d’instruction (compteur ordinal) • SF : Indicateur de signe

• ZF : Indicateur du zéro • CF : Indicateur de retenue

• OF : Indicateur de dépassement de capacité • PF : Indicateur de parité

• IF : Indicateur d’interruption • TF : pas à pas

• AF : retenue auxilliaire

IV. Mémoire centrale du 80x86

Les adresses des octets de la mémoire sont codées sur 20 bits (mode réel). Mais les registres étant sur 16 bits, l’espace adressable est de 2^16 octets (64 Ko). Ceci était la limite du Dos pendant longtemps.

La mémoire centrale est divisée en segments toujours à cause de la taille des registres. Chaque segment aura une taille limitée à 64 Ko (8086).

L’adresse du début de segment sera un multiple de 16.

Il y aura 2^16 segments possibles qui peuvent se chevaucher (ces segments environnent tous les 16 octets).

Il y a 4 types de segments :

• Le segment de code : Repéré par le registre CS.

Il contient les instructions en cours d’exécution. Il contient l’adresse dans le segment de code de la prochaine instruction à exécuter.

• Le segment de pile : Repéré par le registre SS.

Il contient les données temporaires structurées sous forme d’une pile.

Le sommet de cette pile est indiqué par le registre SP. Le registre BP permet de travailler dans le pile (Æ on peut prendre des choses au milieu de la pile !).

• Le segment des données : Repéré par le registre DS.

Il contient les données permanentes du programme.

(8)

• Les segment des données supplémentaires : Repéré par le registre ES.

L’ADRESSAGE :

• adresse physique : codée sur 20 bits • adresse logique : 3 systèmes d’adressage :

sur le 8086 : Mode réel sur le 80286 : Mode protégé

sur le Pentium : Mode protégé et mode virtuel

Le mode réel :

Les impératifs de compatibilité ont conduit à représenter l’adresse 20 bits à partir de 2 mots de 16 bits.

On a besoin d’un couple de valeurs : N° de segment : sur 16 bits

Déplacement dans le segment : n° de l’octet dans le segment

On note : seg : dép

ex : 154F : 6254 Æ 154F0 ‘déplace de 4 à gauche car *16 + 6254

1B744 Å adresse physique

segment x 16

adresse déplacement physique

(9)

V.

Les instructions

Format général des instructions :

Code opération mode déplacement valeur (1) (2) (3) (4) (1) : type de l’opération à exécuter

(2) : méthode de calcul à l’adresse des opérandes (3) : déplacement à ajouter à l’adresse (8 ou 16 bits) (4) : valeur d’une constante (8 ou 16 bits)

Les instructions ont une taille variable de 1 à 6 octets. En pratique on utilise les mnémoniques :

Codop Dest, Source

Codop : opération à exécuter

Dest : argument destination (registre, zone mémoire) Source : argument source

Ex : MOV AX, BX Æ transfert du contenu du registre BX dans le registre AX, plus parlant que 89D8.

Adressage des opérandes :

Æ spécifie où se trouvent les opérandes. Cela peut être :

• des constantes

• se trouver dans les registres • en mémoire

Lorsque ces opérandes sont en mémoire, on a différents modes d’adressage :

a) adressage direct :

ex : MOV AX, [1000] ; entre [] = adresse sous forme de cste

adresse effective : 1000

adresse logique : DS : 1000 ‘ DS par défaut adresse physique : DS x 16 x 1000 ‘ x 16 car en hexa

(10)

b) adressage indirect :

L’opérande est en mémoire. Son adresse effective est contenue dans un registre pointeur.

ex : MOV AX, [BX] ; [] donc on est dans la mémoire adresse effective : BX

adresse logique : DS : BX adresse physique : DS x 16 x BX

c) adressage basé et indexé :

ex : MOV AX, [BX + DI + 1000] MOV AX, [SI + 1000]

adresse effective : somme des contenus d’un registre de base d’un registre d’index et d’un déplacement : SI + 1000 adresse logique : DS : [SI + 1000]

adresse physique : DS x 16 x [SI + 1000]

d) adressage immédiat :

ex : MOV AX, 12

e) adressage direct :

ex : MOV AX, [1000] ÍÎ MOV AX, [DS : 1000] ; 1000 = déplacement dans DS

Les instructions de transfert autorisées :

• transferts de registres généraux à registres généraux • transferts de registres généraux à mémoire

• transferts de registres généraux à registres pointeurs de segments • transferts de registres pointeurs de segment à registres généraux • transferts de registres pointeurs de segment à mémoire

• transferts de mémoire à registres généraux

• transferts de mémoire à registres pointeurs de segments • transferts valeur immédiate à mémoire

(11)

Les transferts interdits :

• transferts de mémoire à mémoire

• l’affectation d’une valeur immédiate à un registre pointeur de segment

Les transferts immédiats :

Il est nécessaire de spécifier le type de transfert (16 bits ou 8 bits) MOV BYTE [mem], val ‘transfert 8 bits

MOV WORD [mem], val ‘transfert 16 bits

Transfert 16 bits : MOV reg,[mém] regH Å [mém + 1] regL Å [mém] MOV [mém],reg [mém + 1] Å regH [mém] Å regL

VI. Les instructions arithmétiques

2 types d’opérations sur 2 nombres :

opération à 2 opérandes (1) opération à 1 seule opérande (2)

(1) Si l’instruction a 2 opérandes, ils occupent le but et la source. Après l’exécution de l’opération, la valeur initiale du but est remplacée par le résultat.

ADD but, source ; but Å but + source

SUB but, source ; but Å but – source

H L

mém mém + 1

(12)

but = registre ou emplacement mémoire si la source est un registre source = soit une valeur ; soit un registre ; soit un emplacement mémoire

(2) Si l’instruction est à un seul opérateur, l’opérande est considéré comme source et le but est le registre AX. Dans ce cas AX reçoit avant l’exécution de l’opération un des 2 arguments, puis reçoit après exécution le résultat de l’opération.

MUL source ; source = registre

(8 bits) AX Å AL * source

(16 bits) (DX, AX) Å AX * source

DIV source

(8 bits) AH Å AX % source AL Å AX / source

(16 bits) DX Å (DX, AX) % source AX Å (DX, AX) / source

Cas particulier : (n’utilisant pas AX) INC but ; but Å but + 1 DEC but ; but Å but – 1

but : registre ou emplacement mémoire.

VII. Les instructions logiques

3 instructions :

AND but, source ; but Å but et source OR but, source ; but Å but ou source

(13)

VIII. Les comparaisons

(instruction à 2 opérandes) CMP but, source

Æ compare but et source en faisant une soustraction Æ met à jour les indicateurs

Æ ne change pas les valeurs de but et source but : registre ou emplacement mémoire

source : registre, emplacement mémoire à une valeur

IX. Rupture de séquence, branchements, sauts

Les instructions sont exécutées de façon séquentielle par la mise à jour du compteur cardinal (IP). Cette séquence est rompue lors de l’exécution de sauts.

1) sauts inconditionnels JMP adr

adr : adresse de la prochaine instruction à exécuter

IP Å adr

Adressage relatif CS par défaut 100 MOV AX , 00 104 MOV BX, 61 108 MOV CX, 64 MUL CX DIV CX JMP 0100 Adressage direct : JMP seg : dép 2) sauts conditionnels

La rupture n’a lieu que si une condition est vérifiée. Syntaxe générale :

Jcond adr

(14)

si la condition n’est pas vérifiée, l’exécution continue en séquence.

• test d’égalité :

JE Æ si ZF = 1 (=) JNE Æ si ZF = 0 (!=) • test d’ordre :

codage binaire vrai :

JA CF = 0 et ZF = 0 (>) JB CF = 1 et ZF = 0 (<) JAE CF = 0 et ZF = 1 (>=) JBE CF = 1 et ZF = 1 (<=) Codage complément à 2 : JG ZF = 0 et SF = OF (>) JL SF != OF (<) JGE SF = OF (>=) JLE ZF = 1 et SF != OF (<=) Ces instructions sont souvent associées à CMP. • Test des indicateurs :

JZ ZF = 1 JNZ ZF = 0 JC CF = 1 JNC CF = 0 JS SF = 1 JNS SF = 0 JO OF = 1 JNO OF = 0 LOOP (boucle)

LOOP adresse (utilise CX par défaut) Æ décrémente CX

Æ teste si CX est nul, sinon va à l’adresse indiquée par l’argument. Si CX est nul, passe à l’instrction suivante.

ex: MOV CX,BX

105 INC AX LOOP 105 MOV CX,AX

(15)

X.

La pile

Ensemble de mots mémoire utilisés pour stocker les valeurs temporaires. Progression de la pile = dans le sens inverse de la mémoire.

Sommet de la pile SS : SP

BP : registre pointeur travaillant dans la pile. 2 opérations :

PUSH Æ empiler POP Æ dépiler

1°) PUSH [mem]

PUSH reg ; reg : registre 16 bits Si BP = SP ; SP = sommet de la pile

DEC BP Î PUSH AX

DEC BP

MOV [BP], AX

PUSH décrémente SP après l’exécution (SP Å SP – 2).

2°) POP reg POP [mem] MOV AX, [BP]

INC BP Î POP AX

INC BP

POP incrémente SP après l’exécution (SP Å SP + 2). Utilisation : - sauvegarde des registres

- passage de paramètres Ex : PUSH AX

PUSH BX

PUSH CX ; sauvegarde des registres AX, BX, CX dans la pile Instructions modifiant AX, BX, CX

POP CX POP BX POP AX

(16)

Exécution de sous-programmes : 2 instructions :

CALL RET

CALL déroute l’exécution vers la 1ère instruction du sous-programme en

compilant l’adresse de retour.

RET retourne à l’instruction qui suit le CALL en déroutant l’exécution dont l’adresse est au sommet de la pile.

Ex : CALL adr RET adr SP Å SP – 2 IP Å [SS : SP] [SS : SP] Å IP SP Å SP + 2 IP Å adr

Traduction d’une fonction écrite en langage de haut niveau, en langage machine. Ex : i = xor(i,j)

En langage machine : PUSH DI ; paramètre j PUSH SI ; paramètre i CALL XOR

POP CX POP CX

MOV SI,AX ; récupération du résultat L’accès aux paramètres à l’intérieur de la fonction :

PUSH BP MOV BP,SP MOV BX,[SP : BP+6] MOVAX,[SP : BP+8] POP BP RET - passage de paramètres :

Les paramètres sont placés sur la pile par l’appelant ainsi que l’adresse de retour (provoqué par l’instruction CALL).

Toutes ces infos sont dépilées au retour par l’appelant. - Traduction du RETURN

Les valeurs sont retournées dans le registre AX si on est en 16 bits, dans le registre DX,AX si on est en 32 bits.

XI. Principe des interruptions

DI SI RET BP BP + 2 + 2 + 2 + 2

(17)

La machine de Von Neumann repose sur une boucle infinie : Démarrage .1 Attente commande Enregistrement commande Exécution commande Retour .1

Pendant que le processeur exécute une commande, il rafraîchit l’écran dans les 1/50e de seconde Æ principe du temps partagé.

La machine possède une horloge couplée au processeur ; à intervalles réguliers, l’horloge rappelle au processeur en envoyant des signaux qu’il faut interrompre la tâche qu’il exécutait et appelle le gestionnaire d’écran pour lui demander de rafraîchir l’image.

2 types d’interruptions :

• Celles déclenchées par un signal (matérielles)

• Celles qui sont programmées ou programmables (logicielles)

Les Interruptions logicielles

Utilisées pour appeler des sous-programmes appartenant au système

d’exploitation. On utilise un n° correspondant à une entrée dans la table des interruptions.

INT numéro

numéro : entrée dans la table d’interruption contenant l’adresse du sous-programme.

Sauvegarde dans la pile de :

• L’adresse de retour (CS : IP) • Les indicateurs SP Å SP – 2 [SS : SP] Å indicateurs SPÅ SP – 2 [SS : SP] Å CS SPÅ SP – 2 [SS : SP] Å IP IP Å table d’interruptions[numéro]

(18)

IRET

Discute l’exécution vers une instruction dont l’adresse est donnée dans la pile. Le registre des indicateurs est remis en place.

IP Å [SS SP] SP Å SP + 2 CS Å [SS SP] SP Å SP + 2 Indicateurs Å [SS SP] SP Å SP + 2

La table des interruptions se situe à l’adresse 0000 : 0000, adresse physique 0.

interruptions matérielles

(BIOS) BIOS= Basic Input / Output System interruptions DOS DOS = Disk Operationg System

Réservé Disponibles

Les interruptions matérielles : 0 division par zéro 1 pas à pas 3 point d’arrêt 4 dépassement de capacité 5 impression d’écran 8 horloge 9 clavier B communication C D disque dur E disquette F imprimante 10 écran

(19)

Les interruptions DOS :

20 fin du programme 21 appel à DOS 23 CTRL BREAK 24 erreur fatale

25 lecture d’un secteur disque 26 écriture d’un secteur disque

INT 21

Permet l’exécution des fonctions système : • lecture du clavier

• affichage

• gestion des fichiers

pour indiquer la fonction à exécuter

• déposer un code dans le registre AH (ex : 2 pour l’affichage) • dépasser les paramètres nécessaires dans les registres DL ou DX

ex : MOV DL, 41h MOV AH, 2 INT 21h

Affiche le caractère 41 à l’écran.

En retour, le registre AH contiendra un code indiquant si l’opération s’est bien déroulée.

1: lecture

2A : lecture de la date 2C : lecture de l’heure 4C : fin du programme 9 : affichage d’une chaîne

L’ASSEMBLEUR

Un macro assembleur NASM

Æ facilite la conception des programmes Æ les rend plus lisibles

Les macro assembleur introduisent des directives qui sont des ordres donnés au macro assembleur et remplacent les adresses hexa par des adresses

symboliques (labels).

Æ fait ressembler les macro-assembleurs à des langages de "haut niveau". [LABEL :] [OPERATEUR OPERANDE] [ ; COMMENTAIRES]

(20)

Les directives ou pseudo-instructions

Ordres donnés au macro-assembleur, elles ne créent pas de code. (ce ne sont pas des instructions du processeur.)

a) les constantes : par défaut elles sont exprimées en décimal MOV AX, 10

• en hexadécimal, elles doivent débuter par un chiffre et être suivies par le caractère H ou précédées par 0x .

MOV AX, 0Ah ou

MOV AX,0x0A

• en binaire, elles sont suivies du caractère B MOV AH, 0001010b

• en ASCII, un caractère est représenté par le caractère entre apostrophes

MOV AH, ‘A’

b) déclaration de constantes symboliques : EQU

Ex : DOS EQU 33

longueur EQU $_message

$ : position de début de la ligne suivante

c) déclaration de données initialisées :

DB , DW

Ex : Réservation d’un octet initialisé à 10 : octet1 DB 10

Réservation d’un mot : mot 2 DW 0FBh

Réservation de tableaux et de chaînes : message DB ‘hello’

message DB ‘h’, ‘e’, ‘l’, ‘l’, ‘o’ nombres DW 12, 10, 5

tab 1 DW 41h , 60, 60

Rq : le label correspond à l’adresse du 1er élément de la zone mémoire

(21)

d) déclaration de données non initialisées :

RESB , RESW

Ex : octet RESB 1 ; réservation d’un octet buffer RESB 64 ; réservation de 64 octets mot RESW 10 ; réservation de 10 mots

e) duplication : TIMES

duplique des instructions ou des données

tab 10 TIMES 10 db 0 ; 10 octetsinitialisés à zéro tab 256 TIMES 256 dw 0

; réservation de 256 mots initialisésà zéro

buffer db ‘hello’ TIMES 64 - $ + buffer db ‘’ ; ayant des nbres nécessaires d’espaces pour que le buffer contienne 64 octets

TIMES peut également s’appliquer à des instructions : Ex : TIMES 100 movsb ; répète 100 fois movsb

; movsb copie l’octet se trouvant dans [ES DI] dans la case indiquée par [ES SI] et incrémente DI et SI (en fonction de DF indicateur de direction)

f) accès aux zones mémoires déclarées par DB, DW, RESB, RESW :

Il suffit d’encadrer le nom de la zone mémoire par des crochets. Le nom désigne l’adresse du 1er élément de la zone.

Ex : WordVar dw 1, 10, 11, 12

MOV AX, [WordVar] ; AX contient 1 MOV AX, [WordVar + 2] ; AX contient 10

MOV AX, WordVar ; AX contient l’adresse du 1er élément

La structuration des programmes :

Elle se décompose en plusieurs segments logiques : • la définition des données

(22)

a) la directive segment permet de définir dans quel segment mémoire le code sera assemblé.

Dans certains cas, les noms des segments sont fixés (langage C). On utilisera :

• .text pour le segment code

• .data pour le segment de données initialisées • .bss pour le segment de données non initialisées ex : SEGMENT .bss

int var resw 1 SEGMENT .text ..start

..start : définit le point d’entrée dans le programme (point où l’on commence l’exécution).

b) initialisation des registres pointeurs de segment : • le registre DS doit être explicitement initialisé

SEGMENT data SEGMENT code ..start : mov ax, data mov ds, ax

• le registre CS est implicitement initialisé • le registre SS

SEGMENT stack Resw 64

SEGMENT code ..start : mov ax, stack mov SS, ax

Groupement des segments logiques :

Æ regroupement dans un seul segment physique GROUP G1 SEG1, SEG2

(23)

La programmation modulaire :

Comme en JAVA ou en C, il est possible de diviser un programme en plusieurs fichiers.

En NASM on a 2 directives :

GLOBAL et EXTERN

• GLOBAL :

Indique que certains symboles peuvent être accessibles à un autre module.

SEGMENT data

GLOBAL MemVar, Tableau 1

MemVar DW 10 Tableau 1 RESP 100 SEGMENT code GLOBAL Proc Proc1 : (…) RET • EXTERN :

Utilisé pour rendre les labels d’autres modules accessibles à un module donné.

SEGMENT data

EXTERN MemVar Word, Tableau 1 BYTE

SEGMENT code

EXTERN Proc1

MOV AX, [MemVar] MOV BX, Tableau 1 Call Proc1

On empile séparément les fichiers : (dans MSDOS) Nasm –f obj Princ.asm

Nasm –f obj Routine.asm Tlink princ+Routine

(24)

Le processeur de Nasm : Définition de macro

Nasm permet de définir des petits modules utilisables dans le code assembleur. (1) Macro à 1 ligne :

% défini

Ex : % défini param (a, b) ((a) + (a) * (b)) MOV byte [param (2, bx)], ‘D’ Sera réécrit en :

MOV byte [(2) + (2) * (bx)], ‘D’ Ex : % défini a(x) 1 + b(x)

% défini b(x) 2 * x MOV ax, a(8) Sera réécrit en :

MOV ax, 1 + 2 * 8

(2) Macro à plusieurs lignes : % macro nom nb_paramètres

Ex : % macro prologue 1 ; % 1 désigne le 1er paramètre

Push bp ; % 2 désigne le second max bp, sp sub sp, % 1 % end macro mafct : prologue 12 ce qui correspond à : mafct : push bp mov bp, sp sub sp, 12

XII. Initiation au langage C

Langage à la syntaxe similaire au langage JAVA : • Même déclaration des variables

(25)

• Même instructions de contrôle

Mais ne contient pas de notion de classe et a une vraie notion de procédure.

1) Organisation générale d’un programme C

#include <stdio.h> /* déclaration des fonctinos d’E/S */

/* déclaration des fonctions et procédures */ /* programme principal */ main ( ) { } ex : #include <stdio.h> main ( ) {

printf (« hello word ») ; }

2) Déclaration des fonctions et procédures a) fonctions :

correspond à la notion de fonction static en JAVA.

Type nom_fct (liste_des_paramètres_en _entrée)

{

(…)

return résultat ;

}

ex : int calcul (int i, int j) { int res ; res = i + j ; return res ; } b) les procédures :

(26)

void nom_proc (liste_des_paramètres_en_entrée_et_sortie)

{ }

Les paramètres de sortie : passage par adresse

Fournir à la procédure le n° de la case mémoire où se trouve la valeur à utiliser.

S’écrit en C à la déclaration de la procédure :

Type * nom_variable

Ex : void échange (int *a, int *b) { int temp ; tem = *a ; *a = *b ; *b = temp ; } A l’appel :

Indiquer les paramètres passés par adresse & nom_variables. Ex : main ( )

{

int x, y ; x = 4 ; y = 5 ;

échange (&x, &y)

} /* après l’appel : x = 5 et y = 4 */

XIII. C et assembleur

Conventiond’appel des fonctions et procédures en C : • Passage des paramètres :

Les paramètres sont placés sur la pile par le programme appelant, les paramètres sont empilés dans l’ordre inverse de leur déclaration. Toutes ces informations sont ensuite dépilées par l ‘appelant.

• Déclaration des variables locales : Placées dans SI et DI puis dans la pile. • Traduction du « return » :

Dans le registre AX si on est en 16 bits, dans les registres DX, AX si on est en 32 bits.

(27)

Ex : c = xor (i, j) Push di ; valeur de j Push si ; valeur de i Call xor Pop cx Pop cx

Mov si, ax return

i Dans la fonction la pile aura la configuration suivante : j L’aide aux paramètres se fait grâce à BP :

Push BP Mov BP, SP Mov bx, [BP + 4] Mov ax, [BP + 6] Ex : void lire ( ) { int i, j, h, l ; SI et DI pile } Push BP Mov BP, SP Sub SP, 4 Mov [BP – 2], 6 ; k = 6 Mov SI, 3 ; i = 3

XIV. Les entrés – sorties

Permet les échanges d’information entre l’ordinateur et son environnement (imprimante, modem, disques, …). Chaque boîtier externe comporte des registres (ports) qui permettent de les piloter. Ces registres ont des adresse codées sur 16 bits fixées par le concepteur du système. Le processeur peut lire et écrire sur ces registres à l’aide d’instructions spéciales d’E/S.

1) instruction de lecture IN AL, DX

DX : indique l’adresse des registres d’E/S à lire AL : contiendra la valeur lue sur ce registre externe

(28)

2) instruction d’écriture OUT DX , AL

DX : adresse du registre d’E/S

AL : valeur à écrire sur le registre externe dont l’adresse est dans DX.

3) les interruptions matérielles

Elles sont provoquées par les boîtiers externes pour signaler au processeur un événement et lui permettre de le traiter.

Les signaux d’interruptions :

µproc. Æ RESET Æ NMI Æ INTR Å INTA • RESET

Il force les registres aux valeurs suivantes : CS Å 0FFFFh

IP Å 0 DS Å 0 SS Å 0 ES Å 0

A l’adresse physique FFFF0 se trouve un JUMP vers la 1ère instruction

du programme de chargement. • NMI

Evénements exceptionnels (erreur de parité, mémoire, …). Le

processeur termine l’instruction en cours, sauvegarde les indicateurs, CS et IP sur la pile et exécute l’interruption 2.

• INTR

Evénements liés aux E/S.

Le processeur termine l’instruction en cours, sauvegarde les

indicateurs, CS et IP sur la pile et exécute la routine d’interruption dont le n° est déposé sur le bus de données et envoie un signal

(29)

4) Le boîtier contrôleur d’interruption 8259

gère les priorités entre les différents événements externes et assure l’interface avec le processeur en fournissant le n° de l’interruption sur le bus de données.

5) Masquage d’interruption globale STI ; autorise les interruptions CLI ; interdit les interruptions 6) Masquage d’ interruption individuelle

Le processeur peut masquer ou démasquer les interruptions individuellement en programmant un registre de contrôle du 8259.

Masquage :

Mov dx, 21h ; registres des masques IN al, dx ; lecture

Or al, 01 ; masquage de l’ interruption 1 OUT dx, al ; écriture

Démasquage :

Mov dx, 21h IN al, dx

And al, Feh ; démasquage de l’ interruption 1 OUT ax, al

Accès au vecteur d’interruption MOV AL, num MOV AH, 35h INT 21h

En retour ES : BX contient l’adresse logique correspondant à la routine num.

7) Le son

Pour produire un son, un programme devra faire vibrer la membrane du haut-parleur à la fréquence exigée par la note voulue.

Ex : le LA sera obtenu avec une fréquence de 440 Hertz (440 vibrat°/sec.) Un PC peut produire des fréquences de 1 à 1 000 000 Hz mais nous ne

percevons que les fréquences entre 20 et 20 000 Hz.

Le haut-parleur dispose d’un port d’E/S (61h) à travers lequel on peut indiquer si la membrane doit se mouvoir en avant ou en arrière.

(30)

Le contrôle s’effectue par les 2 bits de poids faible du port 61h (bit 0 et bit 1). Le bit 1 active ou désactive le haut-parleur.

Le bit 0 détermine si le haut-parleur reçoit un signal d’horloge.

Pour générer un son, on peut :

• Activer ou désactiver plus ou moins rapidement le haut-parleur (la fréquence dépend de la vitesse d’impulsion).

• Soumettre le H-P à un signal d’horloge en utilisant le boîtier 8253 (timer).

Æ transmission au 8253 des vibrations du cœur du PC (un oscillateur qui produit 1 193 180 impulsions par seconde).

• Dire au 8253 qu’il doit commencer à générer un signal cyclique dès que l’intervalle entre 2 signaux lui aura été communiqué.

On envoie la valeur 182 sur le port 43h du 8253. • Communiquer l’intervalle sur le port 42h.

L’intervalle de temps est calculé à l’aide de la formule suivante : compteur = 1 193 180 / fréquence

Cette valeur est stockée sur 16 bits mais ne peut être transformée que sur 8 bits.

On fait le transfert en 2 temps : Transfert des poids faibles Transfert des poids forts

Transmission des données : couche physique 4 notions à distinguer :

(1) la liaison physique câblage :

fil électrique, câble blindé, paires torsadées, … connecteur ligne connecteur

(3) le codage des informations sous forme binaire :

à chaque caractère on associe une suite précise d’éléments binaires : le nombre de bits utilisés pour coder un caractère est le nombre de moments du code.

Un code à n moments permet de coder 2^n caractères distincts. Ex : . le code télégraphique a 5 moments (32 caractères)

. le code ASCII à 7 moments (128) . le code ASCII à 8 moments (256)

(31)

(4) Mode de transmission :

Deux types de transport : série ou parallèle.

La succession de caractères peut se faire de 2 façons :

le mode synchrone ou asynchrone

(5)Le protocole de transmission (couche liaison) c’est-à-dire les règles qui

définissent le dialogue entre émetteur et récepteur.

a) la transmission parallèle

Les données sont échangées caractère par caractère.

Tous les bits sont transmis simultanément grâce à l’utilisation d’un fil par bit.

Cette méthode pose des problèmes de synchronisation qui conduisent à ne l’utiliser que sur de très courtes distances (bus d’un ordinateur, imprimante,…).

Les cas du PC :

Un PC autorise jusqu’à 4 ports // , certains ports permettent des transferts bidirectionnels.

Le BIOS fournit un service d’imprimante spécial, l’INT 17 qui permet d’initialiser l’imprimante, de récupérer l’état de celle-ci et de lui envoyer des données.

Les 2 principaux ports // ont leur adresse d’E/S en 278h et 378h. Protocole de transmission :

- 0,5 µs après l’envoi des données : Stroboscope se met à 0 et ça va provoquer la mise à 1 de « occupé ».

- dès que le périphérique a traité l’octet, la ligne d’accusé est positionnée à 0 pendant 0,5 µs au minimum.

- dés que la ligne « accusé » repasse à 1, la ligne « accusé » repasse à 1, la ligne « occupé » est remise à 0 pour recevoir un autre octet. Le débit max. théorique est de 500 Ko/s mais dans la pratique, étant donnés les retards de réponse des périph. On a un taux de transfert d’environ 150 Ko/s.

b) La transmission série

Les différents bits sont transmis successivement sur le même fil. Une liaison série peut être synchrone ou asynchrone.

1°) mode synchrone

L’émetteur et le récepteur se mettent d’accord sur un intervalle constant qui se répète dans le temps.

Les bits sont envoyés les uns derrière les autres et sont synchronisés avec le début des intervalles de temps.

(32)

Les caractères sont émis en séquence sans aucune séparation. Ce mode est utilisé dans le cas d’un très fort débit.

2°) mode asynchrone

- pas de relations préétablies entre l ‘émetteur et le récepteur - les bits d’un même caractère sont entourés de 2 signaux :

l’un concernant le début de la transmission (bit START) et l’autre de fin (bit STOP).

Le début d’une transmission peut se faire à un instant quelconque de temps.

Au repos la ligne est un niveau électrique 1.

Pour débuter une transmission, le bit START est à 0 (la ligne est mise à 0 pendant la durée d’un bit.

c) la vitesse de transmission :

Le signal émis est synchronisé sur une horloge lorsqu’un élément binaire est transmis.

La vitesse de l’horloge donne le débit de la ligne en bauds (nombre de tops d’horloge par seconde).

Ex : une ligne de communication à 50 bauds indique qu’il y a 50 intervalles de temps élémentaires par seconde.

Généralement sur un intervalle de temps élémentaire on émet 1 bit (0 ou 1). On parle de bit/ seconde.

On pourrait envoyer 2 informations sur un intervalle de temps élémentaire. Dans ce cas on dira que le signal a une valence de 2.

Ex : une ligne de vitesse 50 bauds qui a une valence de 2 a une capacité de 100 bits/ seconde.

émission réception horloge d’émission horloge de réception

(33)

d) La transmission en bauds de base :

Comment un émetteur peut envoyer un signal que le récepteur connaîtra comme étant 1 ou 0 ? :

code tout ou rien 0 1 1 0 0 1 0

code NRZ (Non Return to Zero)

code bipolaire

Le bit 1 est indiqué par un courant positif ou négatif à tour de rôle. Le bit 0 est indiqué par un courant nul.

Code bipolaire à haute densité 0 1 1 0 0 1 0

Æ permet de ne pas laisser le courant nul pendant les suites de 0. Des suites spéciales de remplissage (--, 0, +) sont insérées à la place de ces 0. Un nouveau 1 est indiqué par un courant positif ou négatif en violation avec la suite de remplissage. Les 2 derniers codes permettent d’éviter les courants continus souvent très difficiles à faire passer entre 2 stations.

e) La modulation

La transmission en bauds de base ne peut être utilisée que sur de courtes distances (moins de 5 km) car le signal, s’il n’est pas régénéré, se

dégrade avec la distance parcourue.

Sur une longue distance on utilise un signal de forme sinusoïdale. Pour moduler le signal on utilise un modem (modulateur /

démodulateur). Ex :

(34)

f) La détection d’erreurs (couche liaison)

Pour permettre la détection d’erreurs on a 2 possibilités :

• Envoyer l’information en redondance (correction directe) • Utiliser un code de détection d’erreur

Dans la plupart des cas c’est la 2ème solution qui est choisie : détection

d’erreur et retransmission de la trame (donnée). Principe : copie des trames

Retour d’acquittement

Emission

Emetteur Récepteur

A chaque acquittement négatif la trame est retransmise. Une façon de détecter les erreurs consiste à ajouter au caractère transmis un bit de parité. Il est positionné de façon à ce que la somme des éléments binaires modulo 2 soit égale à 0 si bit de parité pair (ou à 1 si bit de parité impair).

XV. Compléments sur les mémoires

1) SRAM et DRAM

Il existe 2 technologies pour la réalisation de mémoire dynamique (DRAM) et la

mémoire statique (SRAM).

Les SRAM sont plus rapides mais plus chères. Les mémoires se présentent physiquement sous la forme de barrettes : les SIMM (= Single Intime Memory Modules) .

Pour obtenir une mémoire rapide capable de suivre la cadence du processeur on doit construire une hiérarchie de mémoire.

Chacune des mémoires aura une plus grande capacité que la précédente mais un accès moins rapide.

(35)

Cette hiérarchie se base sur 2 principes : • Le principe de localité :

La donnée la plus récemment utilisée sera accédée dans un futur proche Æ un programme n’accède pas à tout le code et à toutes les données de manière uniforme.

• Les caractéristiques de coût/ performance des technologies mémoire.

But : fournir un système mémoire presque aussi bon marché que le niveau le plus bas et aussi rapide que le niveau le plus haut.

Registres Æ mémoire cache Æ mémoire interne Æ disque

2) 1er niveau de hiérarchie : la mémoire cache Principe :

La mémoire est divisée en « blocs » ; un bloc est l’unité minimale d’information qui peut être prescrite dans le cache.

C’est dans cette mémoire que l’on chargera les données intervenant souvent, en se basant sur le principe de localité.

Æ l’accès à ces éléments sera plus rapide. a) placement de bloc

Trois façons de charger un bloc à une seule place possible dans la mémoire cache :

• cache à correspondance directe :

chaque bloc a une seule place possible de la mémoire cache (n°bloc mod nbre_de_blocs_dans_le_cache)

• cache totalement associatif :

un bloc peut être placé n’importe où dans le cache. • Cache associatif par ensemble de blocs :

Généralement par ensemble de 2 ou 4 blocs. Un ensemble est un groupe de blocs dans le cache. Un bloc est affecté à un ensemble de blocs puis placé n’importe où dans l’ensemble.

b) remplacement de bloc

Si un échec intervient, le contrôleur de cache doit choisir un bloc à remplacer par la donnée dérivée.

• En correspondance directe :

Un seul bloc est testé pour déterminer si la donnée est présente, et seul ce bloc peut être remplacé.

• En placement associatif total ou par ensemble : Il faut choisir entre plusieurs blocs.

(36)

Deux stratégies possibles :

- le hasard : les blocs candidats sont choisis de façon aléatoire. - le plus ancien (LRU : Least Recently Used) : le bloc remplacé

est celui qui n’a pas été utilisé depuis le plus longtemps.

3) La mémoire virtuelle

Avant quand un programme devenait trop grand pour la mémoire interne, le programmeur avait la responsabilité de le faire tenir en mémoire.

Il divisait le programme en morceaux mutuellement exclusifs. Ces morceaux étaient chargés et déchargés à l’exécution sous le contrôle du programmeur utilisateur (OVERLAYS).

La mémoire virtuelle fut inventée pour éviter ce travail.

Dans la mémoire virtuelle l’espace d’adressage est divisé en pages. Si l’U.C. veut accéder à un élément d’une page absente du cache ou de la mémoire interne, un défaut de page intervient et la page entière est transférée des disques dans la mémoire interne.

Cache

0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 Traitement

associatif Correspondancedirect ensemble de 2 blocsAssociatif par

ens.1 ens.2 ens.3 ens.4

A B C D C A B Adresse

virtuelle physiqueAdresse

Mémoire virtuelle Mémoire principale physique D 0 4 8 12 4 16 24 disque

Références

Documents relatifs

En conséquence, le statut des territoires français de la Caraïbe en fait potentiellement des pièces maîtresses du dispositif de coopération entre l’UE et les pays de la région,

La troisième partie traite de « la modernité dans l’espace rhodanien », à travers les travaux pour maintenir la navigation, les travaux de la Compagnie nationale du

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

Mise en oeuvre d’une démarche géohistorique pour la connais- sance de l’évolution des paysages fluviaux : l’exemple de la moyenne vallée de la Garonne... Pour les périodes plus

Yvette Vaguet, Les hydrocarbures, les villes et les hommes dans le nord-ouest sibérien, Festival International de Saint-Dié des Vosges, 2007. Gregory Vilchek, «Environmental Impact

Parmi les particularités et les curiosités du dialecte de Cao Lao Hạ et dans les limites imposées par les organisateurs de ces journées, nous ne retiendrons

Ce n’est toutefois pas le « comment » précis, c’est-à-dire ce qu’il s’est passé, qui intéresse l’auteur en priorité, mais le « pourquoi » : pourquoi

Groupes sociaux et positions engagés dans le travail diplomatique à l’ONU Ainsi, la décision de mobiliser le Conseil de sécurité de l’ONU face à un conflit armé engage