Examen nal (rattrapage) Clément Jonquet {jonquet@lirmm.fr} 30 mars 2011 Instructions L'examen dure 2h. Il y a 12 questions pour 20 points. 1 point supplémentaire de lisibilité et clarté pourra être ajouté. Les questions sont indépendantes les unes des autres. Vous pouvez les traiter dans l'ordre que vous voulez. Pensez à toujours justier synthétiquement vos réponses. Votre copie ne doit pas être rédigée au crayon à papier, ni au stylo rouge. Support de cours/td/livres autorisés. Tous moyens de communication (bavardage, téléphone, SMS, chat, etc.) interdits. Toute sortie de la salle est dénitive. Questions de cours Question 1 Quelle est le composant de l'architecture de Von Neumann qui dirige le fonctionnement des autres unités? Unité de commande (ou de contrôle). Question 2 Qu'est-ce qu'un mot mémoire? En quoi est-ce que sa taille est un élément important de la l'architecture d'un ordinateur? Correspond à une cellule mémoire adressable (i.e., chaque mot possède sa propre adresse). La taille du mot mémoire est généralement celle des instructions, des registres et du bus de la machine. Question 3 Citer 3 caractéristiques importantes des mémoires (tout type de mémoire)? Adresse : valeur numérique désignant un élément physique de mémoire (e.g., adresse d'un mot). Capacité : (taille) nombre d'information que la mémoire peut contenir. Vitesse : Temps d'accès : temps de l'exécution d'une opération de lecture ou d'écriture. Cycle mémoire : temps minimal entre 2 accès (plus long que le temps d'accès). Débit : nombre d'informations lues ou écrites par secondes. Volatilité : caractérise la permanence des informations dans une mémoire (i.e., ce qui ce passe si on coupe le courant!)
Type d'opération : Mémoire vive : lecture / écriture Mémoire morte : lecture seulement Question 4 Citer 3 registres diérents et décrire leur rôle en une courte phrase. Registre Adresse (RA) Contient l'adresse d'un mot mémoire. Registre Mot (RM) Contient le contenu d'un mot mémoire. Registre Instruction (RI) Contient l'instruction (opération + opérande) en cours d'exécution. Compteur Ordinal (CO) Contient l'adresse de la prochaine instruction a exécuter. Pointeur de pile (SP) Indique la position courante du sommet de la pile. Registres d'état (PSW) Indiquent l'état du système (retenue lors d'une opération, dépassement de capacité, etc.) Registres arithmétiques Servent aux opérations arithmétiques. Registres de base et d'index Servent pour le calcul d'adresses. Registres banalisés Servent à diverses opérations telles que le stockage de résultats intermédiaires (variables). Question 5 Qu'est ce qui oppose fondamentalement les registres des disques durs? Les registres sont volatiles, ont une très grande vitesse et une très petite capacité. Les disques durs, c'est tout le contraire. Question 6 Pourquoi est-ce que l'exécution d'un programme "compilé" est plus rapide que l'exécution d'un programme "interprété"? Lors de l'exécution d'un programme compilé, la traduction du code en langage machine est eectué une seule fois (i.e., lors de la compilation). Tandis que lors de l'exécution d'un programme interprété, la traduction est réalisée à chaque exécution. Question 7 Dans un programme assembleur, lors de l'appel de procédure, pourquoi est-ce important de sauvegarder l'état de la machine? Le programme appelant doit retrouver la machine (i.e., les valeurs des registres, mots mémoires) dans le même état après l'appel de procédure pour pouvoir continuer à s'exécuter. Étant donné que les ressources (registres, mémoires) sont limités, le programme appelé pourrait écraser des valeurs sauvegardées par le programme appelant. Exercices Question 8 Représenter les nombres décimaux suivants sur 8 bits : 15 ; 122 en représentation normale, 15 ; 122 ; -15 ; -122 en valeur absolue signée, 15 ; 122 ; -15 ; -122 en complément à 2. 2
15 en représentation normale : 0000 1111 122 en représentation normale : 0111 1010 15 en valeur absolue signée : 0000 1111 122 en valeur absolue signée : 0111 1010-15 en valeur absolue signée : 1000 1111-122 en valeur absolue signée : 1111 1010 15 en complément à 2 : 0000 1111 122 en complément à 2 : 0111 1010-15 en complément à 2 : 1111 0001-122 en complément à 2 : 1000 0110 Question 9 (2 points) Donner la représentation ottante IEEE 754 en simple précision de -12.2 Représentation IEEE 754 : x = ( 1) S (1, M) 2 E (2n 1 1) 12 1100 0.2 2 = 0, 4 0.4 2 = 0, 8 0.8 2 = 1, 6 0.6 2 = 1, 2 0.2 2 = 0, 4... On boucle, il n'y a donc pas de représentation exacte du nombre 0.2. On doit donc tronquer en fonction de la taille de la mantisse (i.e., 23 bits) 12.2 1100.0011 0011 0011 0011 0011 1.100 0011 0011 0011 0011 0011 2 3 S = 1 (le nombre est négatif) M = 100 0011 0011 0011 0011 0011 E = 3+127 = 130 = 1000 0010 sur 8 bits Soit 1100 0001 0100 0011 0011 0011 0011 0011 Question 10 (2 points) Eectuer les opérations arithmétiques suivantes en représentant les nombres en codage normal (entier positif) : (a) 56 18 (b) 198/3 Question 11 0 0 1 1 1 10 10 0 (56) 0 0 0 1 0 1 0 1 1 0 (18) 0 0 1 0 0 1 1 0 (38) 1 1 0 0 0 0 1 1 0 (198) / 0 1 1 (3) 1 0 0 0 0 1 0 (66) A dérouler pour avoir le point complet! Réaliser la synthèse du circuit combinatoire correspondant à la fonction logique décrite par la table de vérité suivante : 3
a b c d f(a,b,c,d) 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0 0 0 1 1 0 0 0 0 1 0 1 1 1 1 0 1 0 0 1 1 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1. La méthode des minterms (somme de produits) nous donne : f(a, b, c, d) = a.b.c.d + a.b.c.d + a.b.c.d + a.b.c.d + a.b.c.d +a.b.c.d + a.b.c.d + a.b.c.d + a.b.c.d + a.b.c.d + a.b.c.d 2. La table de Karnaugh suivante nous permet de simplier : f(a, b, c, d) = b + c.d + a.d 3. Il ne reste plus qu'a dessiner le logigramme : Question 12 Écrire un programme MIPS qui reçoit un entier positif n au clavier et qui ache la valeur du calcul : 1+2+3+...+n.. data str1 :. asciiz " La somme est : " str2 :. asciiz " Entrer un entier positif : " main :. text la $a0, str2 4
loop : end : li $v0, 4 syscall # Print str2 li $v0, 5 syscall # Prompt for int move $t1, $v0 # Save int to t1 ( for recursion ) move $t4, $v0 # Save int to t4 ( for accumulation ) li $t2, 1 # t2 =1 blez $t1, end # end if t1 is less than or equal to 0 sub $t1, $t1, $t2 # t1 =t1-1 add $t4, $t4, $t1 # t4 = t4 +( t1-1) j loop la $a0, str1 li $v0, 4 syscall # Print str1 move $a0, $t4 li $v0, 1 syscall # Print sum li $v0, 10 syscall # Exit 5