• Aucun résultat trouvé

Exemple de programmation

Dans le document ARCHITECTUREDES ORDINATEURS (Page 81-90)

4.5 Du langage d’assemblage aux instructions de base

4.5.5 Exemple de programmation

Le programme en langage d’assemblage que nous allons prendre comme exemple est le r´esultat de la compilation d’un programme ´ecrit en langage C qui calcule une factorielle. La machine cible est un PowerPC MPC860 de Motorola.

void main (void)

/* Fonction recursive */

int fact (int i) {

int l;

if (i ==1) return 1;

l= i * (fact(i-1));

printf("l = %d\n", l);

return (l);

}

Le programme en langage d’assemblage, accompagn´e de quelques commen-taires, qui est engendr´e par le compilateur (compilateurgcc) est le suivant :

.file "essai.c"

stwu 1,-16(1) ; mecanisme de pile

mflr 0 ; adresse de retour lr-->r0 stw 31,12(1)

stw 0,20(1) mr 31,1

li 3,4 ; valeur 4-->r3

bl fact ; appel fonction

mr 0,3 ; resultat r3-->r0

lis 9,j.3@ha

stw 0,j.3@l(9) ; resultat --> memoire b .L2

.L2: ; section de sortie

lwz 11,0(1) lwz 0,4(11)

mtlr 0 ; r0-->lr pour retour lwz 31,-4(11)

.string "l = %d\n"

.section ".text" ;====================

.align 2 .globl fact

.type fact,@function fact:

stwu 1,-32(1) ; mecanisme de pile:

; r1-->(r1-32), r1-32-->r1 mflr 0 ; adresse de retour lr-->r0 stw 31,28(1)

bl fact ; appel fonction

mr 0,3 lwz 9,8(31)

mullw 0,9,0 ; i * fact(i-1) stw 0,12(31)

lis 9,.LC0@ha ; printf la 3,.LC0@l(9)

.L3:: ; section de sortie

lwz 11,0(1) lwz 0,4(11)

mtlr 0 ; r0-->lr pour retour lwz 31,-4(11)

mr 1,11 blr .Lfe2:

.size fact,.Lfe2-fact

Pour examiner le fonctionnement et le traitement des adresses de retour supposons que le registre r1 contient la valeur 100016, not´ee $1000 au d´epart et que la valeur calcul´ee est 1!.

r1=$FF0 $1000

$1000 r31 retour1 stwu 1,-16(1)

mflr 0 stw 31,12(1) stw 0,20(1) mr 31,1 li 3,1

Figure4.10 : Phase avant appel `a la fonction

$FF0

$FF0 1 r1=$FD0 $FF0

$1000

r31 retour1 retour2

$1000 stwu 1,-32(1) mflr 0 stw 31,28(1) stw 0,36(1) mr 31,1 stw 3,8(31)

Figure4.11 : Phase d’entr´ee dans la fonction

$FF0 r11 := $FF0

r0 := retour2 lr=retour2 r31 := $FF0 r1 := r11 retour

$FF0 1 r1=$FD0 $FF0

$1000

r31 retour1 retour2

$1000 lwz 11,0(1) lwz 0,4(11) mtlr 0 lwz 31,-4(11) mr 1,11 blr

Figure4.12 : Retour au programme principal

r1=$FF0

r11 := $1000 r0 := retour1 lr := retour1 r31 := valeur originale r1 := r11

retour

$1000

r31 retour1 retour2

$1000 lwz 11,0(1)

lwz 0,4(11) mtlr 0 lwz 31,-4(11) mr 1,11 blr

Figure4.13 : Retour au syst`eme d’exploitation

Chapitre 5

Le processeur

Nous avons vu chapitre3qu’un examen des fonctions remplies par le processeur met en ´evidence trois ensembles (figure5.1) :

1. l’unit´e de commandeest charg´ee :

− de la recherche des instructions en m´emoire,

− du d´ecodage de ces instructions,

− de l’´emission de commandes pour assurer le d´eroulement des instruc-tions reconnues ;

2. l’unit´e de traitement doit d´elivrer les r´esultats des op´erations arithm´etiques et logiques ´el´ementaires ;

3. lesregistrespermettent de ranger donn´ees ou r´esultats utilis´es par l’unit´e de traitement.

Donnée

Décodage et émission

des micro-commandes

Unité de traitement

Accès opérande

Processeur Accès instruction

Unité de

commande Registres

Mémoire

Instruction

Figure5.1 : Les ´el´ements constitutifs du processeur 89

En ce qui concerne les commandes ´emises par le s´equenceur, nous convien-drons de d´esigner par :

− micro-instructionun vecteur bool´een repr´esentant l’´etat logique des lignes de commandes issues de l’unit´e de commande.

− micro-op´eration la r´ealisation physique de la micro-instruction,

− et micro-commande la r´ealisation physique de l’une des composantes de la micro-instruction, ce qui peut ˆetre r´esum´e par le sch´ema 5.2.

-instruction

µ-commandes µ

Figure5.2 : µ-commandes etµ-instructions

Apr`es avoir pr´esent´e un exemple de d´eroulement d’une instruction, ce chapitre pr´ecise la constitution de l’unit´e de commande, ainsi que les principes r´egissant sa conception.

5.1 Le bus de contrˆ ole

Nous avons soulign´e le caract`ere r´ep´etitif du travail du processeur : lecture instruction, d´ecodage, ex´ecution, lecture instruction, etc. En fait ce cycle peut ˆetre alt´er´e en fonction de l’´etat de signaux ou ´ev´enements d’origine externe, signaux dont l’´etat se retrouve sur des lignes du bus de contrˆole. Nous avons d´ej`a cit´e en particulier le cas de la ligne d’attente (figure5.3).

L’´etat des lignes de contrˆole est m´emoris´e par des bascules qui sont ainsi le reflet de l’´ev´enement qui les a activ´ees.

Ligne de remise en condition initiale

La ligne de remise en condition initiale (reset ) provoque un “red´emarrage”

du processeur. Lorsqu’elle change d’´etat, il y a tout initialisation des diverses bascules et registres internes, puis l’adresse de d´emarrage est obtenue :

− de fa¸condirecte: lecompteur ordinalest initialis´e avec une valeur donn´ee (cas des microprocesseurs Intel I8080 o`u le compteur ordinal est remis `a z´ero et I8086 o`u l’adressephysiquede d´emarrage est FFFF016) ;

− ou indirecte: le compteur ordinal est charg´e avec une valeur que le pro-cesseur va chercher en m´emoire `a une adressefixe (par exemple en FFFE16

et FFFF16dans le microprocesseur 8 bits Motorola MC6800, sch´ema5.5).

Exécution instruction Lecture et décodage

instruction Test des

lignes de contrôle

Figure5.3 : Test des lignes de contrˆole

Interruptions Suspension Attente Acquittements

Processeur Remise en

conditions initiales

D D

Figure5.4 : Les lignes de contrˆole

Ligne de suspension

La ligne desuspensionest utilis´ee lorsqu’une unit´e autre que le processeur (une autre unit´e centrale ou une unit´e d’´echange) tente de s’octroyer le contrˆole des bus. Si cette tentative aboutit le processeur doit s’abstenir d’acc´eder aux bus.

Le protocole de prise de contrˆole utilise deux lignes du bus de contrˆole : la ligne de suspension (HOLD) et la ligne d’acquittement de suspension (HOLD Acknowledge). En r´eponse `a la demande de suspension, le processeur envoie

Mémoire

Compteur ordinalÊ Programme

de démarrage

$FFFE

$FFFF

$10A0

0001 0000 1010 0000 16

16

0001 0000 1010 0000

Figure5.5 : Le d´emarrage dans le cas du M6800

un acquittement qui indique que les bus de donn´ees et adresses passent en ´etat

“haute imp´edance”. Le processeur est alors dit en ´etat de “repos” (idle mode).

Ligne de contrˆole d’attente

La ligne decontrˆole d’attentes’av`ere n´ecessaire, nous l’avons d´ej`a vu, lorsque le processeur - ou un autre dispositif d’entr´ee-sortie - tente d’acc´eder `a une m´emoirede grand temps d’acc`es. Cette ligne d’attente (WAIT control line ouREADY line) permet au processeur d’introduire des cycles “inactifs” (wait cycles ouwait states) lors d’op´erations de lecture ou d’´ecriture, en attendant que la donn´ee requise soit disponible ou que l’unit´e d’entr´ee-sortie soit prˆete.

Lignes d’interruptions

Les lignes d’interruptionssont utilis´ees par des ´ev´enements externes demandant

`a ˆetre pris en compte. Cela signifie qu’une s´equence d’instructions doit ˆetre ex´ecut´ee en r´eponse `a cette demande. Le traitement de ces ´ev´enements appel´es interruptionssera ´etudi´e dans le chapitre sur les entr´ees-sorties.

Diagramme de principe

Un diagramme de fonctionnement du processeur inspir´e de celui du micropro-cesseur Motorola MC6800 pourrait alors ˆetre sch´ematis´e par lafigure5.6.

Suspension

Interruption

non

oui oui non

oui

non

TraitementÊ interruptionÊ ExécutionÊ

instructionÊ InterruptionÊ logicielleÊ Attente de fin

de suspension Relâchement d'acquittement

AcquittementÊ

Lecture et décodage instruction

Figure5.6 : Exemple de diagramme de fonctionnement

Une phase compl`ete d’ex´ecution de l’instruction est d´esign´ee par cycle instruction. La dur´ee de ce cycle est fonction de l’architecture de la machine.

Dans le document ARCHITECTUREDES ORDINATEURS (Page 81-90)