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.