Téléchargement

publicité
Questionnaire d'examen intra
Sigle du cours
r
T
Nom :
PrCnom :
Matricule :
Signature :
Sigle et titre du cours
Groupe
Voir directives particuliires
Directives particulicres :
Jtil Toute documentation raisonnable permise.
Jtil Total maximum de 20120.
-
Trimestre
Non programmable
I QUESTION 1 - LeJ makefila
(4 points)
1
A partir de l'arbre de dCpendance pdsentk ci-dessous, vous devez tcrire un makefile qui
utilise vos Propre Sgles implicites autant que cela est possible pour produire le fichier
jeux . zip qui contient les deux fichiers extcutables (notez bien que jeux . z i p doit &re la
cible par defaut). La compilation de tous les modules doit inclure les informations de
dkboguage. Aussi, votre ma kefile doit aussi avoir une cible clean pour effacer tous Ies
fichiers . o, la librairie, Ies deux fichiers exicutables et le fichier .zip.
Note : pour compresser des fichiers en . z i p , il faut utiliser la commande z i p qui s'utilise
C o m e suit : z i p [fichier de s o r t i e .z i p ] [le( s ) f ichier ( s I B cornpresser]
output. a
pqq-y-+,
input. e
input. h
.
define h
algo. e
&,&,
Sousquestion 1.2
Imginons maintenant que la sortie de la commande
contenant le projet dans le compte de l'usager bobby soit :
<< IS -1h
.rp
du ripertoire
total 633K
-p,q-~--~--
-rw-C--r--,---=--=--
-rw-r--r--rW-f--r--rwxr-xr-X
-r,,q-r--r--
-rw-r--r--,---=--=--
-rwxr-xr-x
-rw-r--r--rW-r--r--
-rt,q-r--r--j-w-=--r-- ~ W - ~ - - ~ - -
1 bobby users
1 bobby users
1 bobby users
1 bobby users
1 bobby users
1 bobby users
1 bobby users
1 bobby users
1 bobby users
1 bobby users
1 bobby users
1 bobby users
1 bobby users
1 bobby users
1 bobby users
103K
86K
1.2K
1.9K
1.3K
4.9K
5.5K
Jan
Jan
Jan
Jan
2 5 15:20 a1go.o
25 15:20 a1go.c
18 16:19 define.h
24 0 9 : 5 8 con fig.^
config.s
Jan 24 09: 58
Jan 24 09:58
Jan 25 15:55
8 8 4 -g4$-30 13: 56
31K Jan 2 5 15:55
138K Jan 25 16:02
43K Jan 25 16:02
1.3K Jan 18 15:31
7.6K Jan 25 16:02
3.3K Jan 2 4 0 9 : 5 8
1.2K Jan 30 1 3 : 5 5
configure*
input.c
input. h
input.0
jeux*
1ibinout.a
rnakefile
0utput.s
param.0
par am.^
Si l'usager bobby conserve dans le fichier m a k e f i l e une solution valicle de la sousquestion grdcddente, donnez, s'il y a lieu, une siquence possible de commandes qui sera
lancde quand bobby tapera
make j e u x r dans ce repertoire. Notez que tous les
fichiers sont datQ de la mEme annee, et on suppose que tous les fichiers sources
cornpilent sans erreurs.
1 QUESTION 2 - Questions diverses
(4 points)
Aprks l'exkcution de ces trois instructions, quelles sera la valeur (en binaire) de
movb
movb
xorb
sbl
?
$Ob001101~11, % a 1
$Ob01111011, % b l
%all %bl
Aprks l'exicution de ces trois instructions, quelles seront les valeurs du Carry Flag, du
Overflow Flag et du Zero Flag ?
movb
movb
addb
$Ob11111110, % a 1
$Ob00000010, % b l
%all %bl
Vous voulez additionner la valeur contenue dans % a 1a celle contenue dans % e d xet placer
le risultat dans s e a x . ~ c r i v e z quelques instructions qui permettent d'effectuer
correctement cette operation si les deux nombres sont signis.
~ c r i v e zmaintenant les instructions qui permettent d'effectuer l'addition si les deux
nombres sont non-signis.
Contrsle pe'riodique - INF2600 - Hiver 2006
~
Soient les instructions :
cmpl
ja
$-I, %eax
label
Dans quel cas est-ce qu7un saut sera effectue a I'etiquette label (autrement dit, pour
quelle valeur de %eax la condition sera-t-elle satisfaite) ?
Supposons que nous avons la valeur -19 (en complement A 2) contenue dans le registre
%ax. Donnez la representation binaire et hexadecimale des registres %ah et %al.
Donnez une instruction (ou un groupe d'instructions) qui permet de diviser par 32 l'entier
s i n contenu dans % eax.
ContrGle pkriodique
- INF2600 - Hiver
2006
1 QUESTION 3 - Analyse de petits programmes
(4 points + 1 point bonus)
1
Soit le programme suivant :
.data
varl:
.byte 4,
5 , 6, 0 , 255, 0 , 8 , 0
.word 2,
1, 0 ,
var2 :
4,
0
var3 :
.int
.equ
100
t a i l l e , var3 - varl
.t e x t
. g l o b a l -s t a r t
:
-s t a r t
p u s h 1 $6
pop1 % e s i
imulw $ - I , % s i
movw
movl
movl
movw
cwtd
movw
movl
movw
$1, %dx
$4, % e a x
$0, % e c x
v a r l (%eax, %ecx, 2 ) , %ax
S t a i l l e , %bx
$9, %ecx
v a r l ( % e c x ), % c x
ici :
movl
int
Si vous exkcutez ce programme, dites la valeur des registres % a x , % b x , % c x , % d x et % s i
une fois que vous serez rendu A l'ktiquette i c i . VOUSpouvez donner la reponse dans le
format que vous voulez (binaire, dkcimal, hexadkcimal.. .).
Contr6le pe'riodiqtle - INF2600
- Hiver
2006
Voici une petite sous-routine mystkre pour laquelle aucun commentaire n'est kcrit :
mystere:
movl
movl
boucle :
rorl
test1
loopnz
ret
$ 3 2 , %ecx
$1, %edx
$1, %edx
%edx, %eax
boucle
a) Quel registre contient le paramktre de la sous-routine ? Comment le savez-vous ?
b) Quel est le contenu des registres A la fin de la sous-routine si on passe la valeur (en
b i n a i r e ) O b l l l l l l l l 11111111 11111111 11110001 commevaleurduparamktre?
c) A quoi correspondent les valeurs contenues dans les registres
la sous-routine ? Y a-t-il une exception ?
% e c xet %edxA
la fin de
d) (pour 1 point bonus) ~ c r i v e zune sous-routine optimiske qui donne, pour la grande
majorit6 des cas, exactement les msmes rksultats pour % e c xet %edx. Se fait sans boucle
en 5 instructions (4 instructions + le r e t final).
Contr6le pe'riodique - INF2600 - Hiver 2006
1 QUESTION
4
-
~ c r i r des
e programmes en assembleur
(8 points + 1 point bonus)
Sous-question 4.1 - ~ c r i r ela fonction absolue
Vous devez Ccrire la fonction absolue qui r e ~ o i ten paramktre l'adresse d'un tableau
d'entiers signCs de 4 octets (les donnkes sources) et l'adresse d'un tableau destination.
L'objectif de la fonction est de copier la valeur absolue des iliments du tableau source
dans le tableau destination (vous pouvez supposer qu'il y a assez d'espace disponible
dans le tableau destination). La fin du tableau source est atteinte lorsque l'entier 0 est
detect6 (et ce dernier dement doit aussi etre copie dans le tableau destination). Voici un
exemple du tableau destination que vous devriez obtenir si le tableau source est :
tableau source
tableau dest
Si vous riussissez A icrire un code fonctionnel et optimisk (au maximum 12 instructions),
vous obtiendrez 1 point bonus (indice : utilisez les operations sur les chaines de
caractkres). Voici l'entete du fichier dans lequel vous devez Ccrire votre fonction, les
entries et sorties de la fonction y sont spkcifiies.
.....................
# fichier : abso1ue.s
.....................
...........................................................
# La fonction absolue rend positives toutes les valeurs
# d r u n tableau
...........................................................
# Entrke : les adresses des tableaux sont sur la pile
# tat de la pile :
#
...
#
#
...............................
#
8 (%esp) #
adresse du tableau dest
#
#
...............................
#
4(%esp) # adresse du tableau source #
#
...............................
#
(%esp) #
%eip de retour
#
#
..............................
# Sortie : Le tableau dest est modifik
# Note : I1 nrest pas nkcessaire de preserver les registres
...........................................................
.text
.global absolue
absolue :
# A completer
.
Contrble pe'riodique - INF2600 - Hiver 2006
1
sous-question 4.2 - ficrire le programme bissext ile
Vous devez maintenant &ire le programme bissextile. Ce dernier prendra en
paramitre un ou plusieurs nombres (qui correspondent aux annees) et pour chaque annee,
le programme devra afficher si elle est bissextile ou non. Par exemple, l'usager qui desire
connaitre si les annkes 1992, 1979, 1980, 2000 et 1900 sont bissextiles devra ecrire la
commande suivante :
> bissextile 1992 1979 1980 2000 1900
Pour cet exemple, puisque 1992, 1980 et 2000 sont bissextiles alors que 1979 et 1900 ne
le sont pas, la sortie 6 l'ecran produite sera :
1992
1979
1980
2000
1900
oui
non
oui
oui
non
:
:
:
:
:
Notez que la sortie se fait dans le meme ordre par lequel les annees ont etC entrees sur la
ligne de commande et qu'il y a un nombre indetermine d'annees en entree.
Pour faire votre programme, vous devez utiliser la fonction est-bissextile pour
determiner si une annee est bissextile ou non ; vous pouvez aussi utiliser les fonctions
indec et affiche-nombre, le detail de ces fonctions ainsi que leurs entrees et sorties
respectives sont spkcifiees en annexe. Un fichier bi ssexti1e . s de depart vous est
fourni, notez toutefois que vous ne pouvez rien ajouter dans la section . data et donc que
les variables globales sont interdites. Vous n'avez aucun test d'erreur 6 faire mais votre
programme ne doit pas boguer si aucun paramitre n'est entrC sur la ligne de commande.
........................
# fichier : bissexti1e.s
........................
oui :
non
.ascii " : oui\nU
.equ length-oui, .
-
oui
.ascii " : non\nW
.equ length-non, .
-
non
:
.text
. global
-start
-start :
ContrGle pe'riodique
-
INF2600 - Hiver 2006
1
ANNEXE
............................
# fichier : est bissexti1e.s
............................
.........................................................
# La fonction est-bissextile permet de determiner si
# une annee est bissextile ou non
.........................................................
# Entree : EAX contient lrannee a evaluer
# Sortie : Carry Flag = 1 si lrannee est bissextile
#
Carry Flag = 0 si lrannee n'est pas bissextile
# Note : Aucun registre nrest modifie par la fonction
.........................................................
....................
# fichier : indec.s
###################
.........................................................
# La fonction indec lit un nombre entier non-signe ecrit
# sous la forme d'une chaine de caractere qui se trouve
# a une adresse memoire donnee.
.........................................................
# Entree : EBX contient lradresse de la chaine de
#
caracteres representant le nombre
# Sortie : EAX contient l'equivalent en binaire du nombre
# Note : Aucun registre n'est modifie par la fonction
.........................................................
..........................
# fichier : affiche nombre
..........................
........................................................
# La fonction affiche-nombre affiche 5 l'ecran le nombre
# reCu en parametre.
.........................................................
# Entree : EAX contient le nombre 2 afficher
# Sortie : Aucune, le nombre est affiche 2 l'ecran
# Note : Aucun registre n'est modifie par la fonction
.........................................................
Contrble pe'riodiqzie
- INF2600 - Hiver
2006
I
Téléchargement