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