Vous êtes sur la page 1sur 2

IUT Villetaneuse Architecture des ordinateurs Jeudi 3 avril 2002-2003

GTR 1re anne Contrle court n3 p1/2


Grp Nom
!A Contrle court n3
!B
!C Calculatrice et documents interdits - Dure 1 heure - Rpondre sur la feuille

1. QUESTIONS DE COURS : GENERALITES SUR LA COMPILATION


1.1. Quels sont les diffrents moyens de faire excuter un programme un ordinateur ?
Illustrez votre rponse par les diffrents langages que vous avez rencontr (Assembleur, C,
JavaScript, Java, Matlab, Python, Shell Unix). Prcisez les logiciels ncessaires lexcution de ces
programmes et les avantages ou les inconvnients de ces techniques.
Interprt en ligne ou ligne par ligne (JavaScript, Matlab, Shell),
avec un interprteur (li lOS). Particulirement portable, mais lent.
Compil (Assembleur, C),
avec un compilateur. Non portable mais trs rapide.
Semi-compil vers un byte-code (Java, Python),
avec un compilateur et une machine virtuelle (li lOS). Portable, plus rapide.
Quand on parle de portabilit, cest hors sources.
Parfois, mme les sources ne sont pas portables (bibliothques spcifiques lOS)

1.2. Donnez les tapes pour passer dun algorithme lexcution dun programme (pensez aux
ventuelles diffrences selon les langages et systme dexploitation Linux ou DOS) en donnant
quelques exemples doprations effectues ainsi que les types de fichiers crs.
Ecriture des sources
(clavier -> .py, .c, .java).
Prcompilation
(concatnation des fichiers den-tte, substitution de texte) (.i)
Compilation et optimisation
(traduction des instructions haut niveau en instructions assembleur) (.s .asm .pyc .class)
Assemblage
(traduction en langage machine avec des trous) (fichiers objets .o ou .obj)
Edition de liens
(remplissage des trous) (fichiers excuter)
Sur Linux ventuel changement de droit +x (fichiers excutable)

2. ANALYSE DE TEXTE
Voici un article publi dans PC Expert du mois davril.
Le rgne du BIOS touche sa fin
Dj en place sur les stations quipes de processeur Itanium, lExtensible Firmware Interface (EFI),
le successeur prsum du Bios, ne devrait pas tarder dbarquer sur les PC de bureau.
Microsystme dexploitation, lEFI est capable dapporter des innovations au moment du dmarrage
du PC. Il supporte laffichage en 800 x 600 x 32bits et gre de nombreuses options au dmarrage
(Ethernet, USB). De plus, la programmation est ralise en C interprt, ce qui devrait acclrer,
scuriser et simplifier le dveloppement des mises jour.
Quel(s) avantage(s) et quel(s) inconvnient(s) voyez vous utiliser du C interprt plutt que de
programmer en assembleur compil comme ctait le cas avant ? Expliquez trs succinctement.
interprt ? (cest plus du C alors) On perds lavantage de la rapidit dexcution
mais on doit gagner en portabilit (pilote usb)
C plus facile dcriture que lassembleur, mme si en interprt il y a plus clair.
(il existe des puces qui se programment directement en basic ou en Java)
par ailleurs le C est dj trs rpandu dans le milieu des programmeur bas niveau
IUT Villetaneuse Architecture des ordinateurs Jeudi 3 avril 2002-2003
GTR 1re anne Contrle court n3 p2/2

3. ETUDE DUN PROGRAMME COMPILE


On a rcupr sous forme de fichier objet une fonction dont le code avait t crit en C.
3.1. Pourquoi ne peut-on pas directement lire le contenu de ce fichier ?
Cest du code objet, du binaire !

3.2. On aimerait utiliser cette fonction dans dautres fichiers.


De quel autre fichier devrait-on disposer ( part le fichier source) pour y parvenir facilement ?
Un fichier den-tte .h permettrait dexpliquer la forme des paramtres reus et de la valeur retourne.

Que doit-on faire avec ce fichier ? Et avec le fichier objet ?


Il faut linclure avec #include "fonction.h"
Pour utiliser le fichier objet il faudrait faire une dition de lien.

3.3. On essaye de reconstituer le prototype de la fonction en dsassemblant le fichier objet.


Avant den tudier le code ci-dessous, rappelez les rgles gnrales de compilation du C pour :
- le passage de paramtres
Paramtres empils par lappelant et pile rabaisse au retour par lappelant.

- le retour de valeur
Valeur de retour transmise par un registre (eax ici)

3.4. Voici le code rcupr partir du fichier objet :


@1@0: push bp
mov bp,sp
@1@1: sub sp,2
mov word ptr [bp-2],2 ;word = 16 bits
@1@2: jmp short @1@7

@1@3: mov ax,word ptr [bp+4]


cdq ;prparation pour la division entire
idiv word ptr [bp-2] ;division de ax par le paramtre
@1@4: cmp dx,0 ;dx contient le reste
jne short @1@6
@1@5: mov ax,0
jmp short @1@A
@1@6: inc word ptr [bp-2]
@1@7: mov ax,word ptr [bp-2]
imul ax,word ptr [bp-2] ;multiplication entire
@1@8: cmp ax,word ptr [bp+4]
jl short @1@3
@1@9: mov ax,1
jmp short @1@A

@1@A: mov sp,bp


pop bp
ret
Entre @1@3 et @1@A, quy a-t-il dans la pile en :
- BP2 ?
une variable locale
- BP ?
lancienne valeur de BP, avant lappel
- BP+2 ?
ladresse de retour de la fonction
- BP+4 ?
le paramtre
En dduire le prototype de la fonction.
int fonction( int ) ; // un int 16 bits

Que fait-elle votre avis ?


Fonction est premier
Retourne 0 ou 1 selon que le paramtre est premier ou non