• Aucun résultat trouvé

Devoir surveillé numéro 1

N/A
N/A
Protected

Academic year: 2022

Partager "Devoir surveillé numéro 1"

Copied!
4
0
0

Texte intégral

(1)

Université Bordeaux 1 INF155, jeudi 18 mars 2010 Licence de Sciences et Technologie Architecture des ordinateurs

Devoir surveillé numéro 1

Exercice 1 Un encodeur avec priorité 3×2 est un circuit avec trois entrées a1, a2, a3 et deux sorties x1, x0 qui codent en binaire le numéro de la dernière entrée non nulle. Par exemple si a1 =a2 = 1 et a3 = 0, le numéro de la dernière entrée non nulle est 2, et x1x0 = 10 ; si les trois entrées sont nulles, les sorties aussi.

Ecrire des formules booléennes aussi simples que possible qui expriment les sorties en fonction des entrées, puis dessiner un circuit qui réalise cet encodeur.

Exercice 2 Cet exercice propose l’analyse progressive du programme ds1.yo situé au verso de cette feuille. Pas de panique, inutile de commencer par lire en détail ce programme, et la plupart des questions sont indépendantes.

La fonctionmap est une fonction à deux argumentstetn, qui appliquef à chacun desnéléments d’un tableaut; autrement ditt1, t2, . . . tnsont remplacés par f(t1), f(t2), . . . f(tn).

Pour que le programme et les questions figurent sur des feuilles séparées, les questions commencent page 3.Attention : les réponses qui n’apportent aucune information nouvelle par rapport à ce qui est déjà écrit noir sur blanc dans le programme ne rapportent aucun point ; par exemple si la question est

“à quoi sert l’instruction pushl %eax?”, la réponse “cette instruction sert à empiler le registre eax”

n’est pas une bonne réponse. . .

1

(2)

Programme ds1.yo

0 x 0 0 0 : 3 0 8 4 0 0 0 2 0 0 0 0 | m a i n : i r m o v l 0 x200 ,% esp

0 x 0 0 6 : 2 0 4 5 | r r m o v l % esp ,% ebp

0 x 0 0 8 : 5 0 0 8 0 0 0 1 0 0 0 0 | m r m o v l p ,% eax

0 x 0 0 e : a 0 0 8 | p u s h l % eax

0 x 0 1 0 : 3 0 8 0 0 4 0 1 0 0 0 0 | i r m o v l u ,% eax

0 x 0 1 6 : a 0 0 8 | p u s h l % eax

0 x 0 1 8 : 801 e 0 0 0 0 0 0 | c a l l map

0 x 0 1 d : 10 | h a l t

0 x 0 1 e : a 0 5 8 | map : p u s h l % ebp

0 x 0 2 0 : 2 0 4 5 | r r m o v l % esp ,% ebp

0 x 0 2 2 : 5 0 1 5 0 c 0 0 0 0 0 0 | m r m o v l 1 2 ( % ebp ) ,% ecx

0 x 0 2 8 : 6 2 1 1 | a n d l % ecx ,% ecx

0 x 0 2 a : 716 c 0 0 0 0 0 0 | jle L3

0 x 0 2 f : a 0 3 8 | p u s h l % ebx

0 x 0 3 1 : 5 0 3 5 0 8 0 0 0 0 0 0 | m r m o v l 8(% ebp ) ,% ebx 0 x 0 3 7 : 5 0 2 3 0 0 0 0 0 0 0 0 | L1 : m r m o v l (% ebx ) ,% edx

0 x 0 3 d : a 0 1 8 | p u s h l % ecx

0 x 0 3 f : a 0 2 8 | p u s h l % edx

0 x 0 4 1 : 8 0 7 1 0 0 0 0 0 0 | c a l l f

0 x 0 4 6 : b 0 2 8 | p o p l % edx

0 x 0 4 8 : b 0 1 8 | p o p l % ecx

0 x 0 4 a : 4 0 0 3 0 0 0 0 0 0 0 0 | r m m o v l % eax ,(% ebx ) 0 x 0 5 0 : 3 0 8 2 0 1 0 0 0 0 0 0 | i r m o v l 1 ,% edx

0 x 0 5 6 : 6 1 2 1 | s u b l % edx ,% ecx

0 x 0 5 8 : 736 a 0 0 0 0 0 0 | je L2

0 x 0 5 d : 3 0 8 2 0 4 0 0 0 0 0 0 | i r m o v l 4 ,% edx

0 x 0 6 3 : 6 0 2 3 | a d d l % edx ,% ebx

0 x 0 6 5 : 7 0 3 7 0 0 0 0 0 0 | jmp L1

0 x 0 6 a : b 0 3 8 | L2 : p o p l % ebx

0 x 0 6 c : 2 0 4 5 | L3 : r r m o v l % esp ,% ebp

0 x 0 6 e : b 0 5 8 | p o p l % ebp

0 x 0 7 0 : 90 | ret

0 x 0 7 1 : 5 0 0 4 0 4 0 0 0 0 0 0 | f : m r m o v l 4(% esp ) ,% eax

0 x 0 7 7 : 2 0 0 1 | r r m o v l % eax ,% ecx

0 x 0 7 9 : 6 0 1 1 | a d d l % ecx ,% ecx

0 x 0 7 b : 6 0 1 1 | a d d l % ecx ,% ecx

0 x 0 7 d : 6 0 1 0 | a d d l % ecx ,% eax

0 x 0 7 f : 90 | ret

0 x 1 0 0 : | . pos 0 x 1 0 0

0 x 1 0 0 : 0 5 0 0 0 0 0 0 | p : . l o n g 5 0 x 1 0 4 : 0 3 0 0 0 0 0 0 | u : . l o n g 3

0 x 1 0 8 : 0 4 0 0 0 0 0 0 | . l o n g 4

0 x 1 0 c : 0 8 0 0 0 0 0 0 | . l o n g 8

0 x 1 1 0 : 0 e 0 0 0 0 0 0 | . l o n g 14

0 x 1 1 4 : 2 a 0 0 0 0 0 0 | . l o n g 42

2

(3)

Questions.

1. Dans le programme ds1.yole code de la fonctionf commence à l’adresse 0x071 ; que calcule-t- elle, autrement dit que vautf(x) ?

Les questions suivantes portent sur la fonction main (instructions d’adresses 0x000 à 0x01d) ; pour répondre à ces questions il est inutile (et même fortement déconseillé) de lire le code demap.

2. Expliquer pourquoi l’instruction d’adresse 0x008 est une instruction mrmovl alors que celle d’adresse 0x010 est une instruction irmovl. A quoi servent les deux instructions pushl dans la fonctionmain?

3. Voici le contenu de la pile et des registresjuste après exécution de l’instructioncall mappar le simulateur Y86 (qui est donc prêt à exécuter la première instruction de la fonctionmap) :

Expliquer en détail les valeurs de chaque mot de la mémoire et de chaque registre (non nul).

4. Lorsque le programme s’arrête (instruction halt), quel est le contenu de la mémoire à partir de l’étiquetteu (adresses 0x104 et suivantes) ? La réponse doit comporter pour chaque mot son adresse et sa valeur décimale.

5. Voici un cliché (partiel) de la mémoire une fois le programme exécuté :

Comparer ce cliché avec la réponse à la question précédente, endétaillant pour chaque mot (non nul) comment convertir en décimal sa représentation hexadécimale.

Les questions suivantes portent sur la fonctionmap.

6. Quel est le rôle de l’instruction d’adresse 0x022 : mrmovl 12(%ebp),%ecx? Que contient le re- gistre%ecxpendant l’exécution de la fonctionmap? Expliquer le rôle des instructions d’adresses 0x050 à 0x058 :

i r m o v l 1 ,% edx s u b l % edx ,% ecx

je L2

3

(4)

7. Quel est le rôle de l’instruction d’adresse 0x031 :mrmovl 8(%ebp),%ebx? Que contient le registre

%ebxpendant l’exécution de la fonctionmap? Quand est-il incrémenté, de combien, et pourquoi ? 8. Pourquoi le registre %ebx est-il sauvegardé avant d’être utilisé ? Quand est-il restauré ? Si on supprime les deux instructions correspondantes, ce programme fonctionne-t-il correctement (il ne suffit pas de répondre par oui ounon, il faut justifier la réponse) ?

9. Il reste à analyser le coeur de la fonction map : L1 : m r m o v l (% ebx ) ,% edx

p u s h l % ecx p u s h l % edx

c a l l f

p o p l % edx p o p l % ecx

r m m o v l % eax ,(% ebx )

(a) Expliquer le rôle de la première et de la dernière instruction, et pourquoi on utilise le registre

%eax dans la dernière instruction.

(b) La fonctionf possède un seul argument, or on empile et dépile deux registres : expliquer ce mystère, et ce qui se passerait si on se contentait d’empiler et de dépiler l’argument def. Et pour ceux qui s’ennuieraient une belle image — et une dernière question. . .

10. Expliquer à quelle étape de l’exécution du programme a été pris le cliché ci-dessous, ainsi que le contenu de la pile et des registres à cet instant.

Feuille mise à jour le 17 mars 2010

4

Références

Documents relatifs

¿De qué colores es la bandera de españa?. ¿Quién

Durant tout le week end, un site marchand propose une promotion pour toute commande d'un montant minimum de

La masse volumique d’un objet est la masse d’une unité de volume c'est-à- dire, dans le système international, la masse d’ 1 m 3... L’orthographe

Un triangle est rectangle quand le carré d’un de ses côtés vaut la somme des carrés des deux autres1. Ou plus exactement, il répond une égalité, ce qui est

Pour ceux qui ont du mal dans les problèmes, c’est justement en écrivant ce que vous faîtes que vous ferrez moins d’erreurs. 3 €

Le papa d'Anna lui donne 15€ pour acheter 3 bouteilles de jus d'orange et un paquet de gâteaux.. Lorsqu'elle veut lui rendre la monnaie, son papa lui dit de garder ce qui lui reste

Il devait tuer un aigle et ramener une plume pour faire preuve de son courage.. Il monta sur son cheval et se mit

-Dessine Jacques qui fait jouer la harpe, avec sa mère, l'oie, et tous les habitants de la petite ville.... Voici les images représentant la petite ville au début et à la fin