Contrôle périodique

publicité
Contrôle périodique
INF1600 — Architecture des micro-ordinateurs
Département de génie informatique
École Polytechnique de Montréal
Automne 2012
Enseigné par :
Date :
Durée :
Documentation :
Calculatrice :
Format :
Directives :
Giovanni Beltrame
Lundi 22 octobre 2012
de 14h45 à 16h45
Toute documentation raisonnable permise
Aucune calculatrice permise
4 questions (13 sous questions) sur 4 pages
Total possible de 21 sur 20 points
Répondre dans le cahier d’examen.
Vous n’avez pas à remettre le questionnaire.
Contrôle périodique — INF1600 —Automne 2012
1/4
Question 1 Architecture (9 points)
Pour permettre d’exécuter une plus grande partie des instructions de l’IA-32, nous avons ajouté T2 à
l’architecture du devoir 1 : (les fils de contrôles ne sont pas dessinés, pour la clarté)
IRá23..21ñ
0
IRá20..18ñ
IRá31..24ñ
IRá17..15ñ
32
Q
CLR
e
ct
ur
E
IRá12..0ñ
IR
C
D
Q
Registres
[0..7]
(soit eax,
ebx, …)
e
D
ur
ri t
Donnée
SET
2
éc
IRá14..13ñ
Mémoire1
mux
1B
le
Circuit de
contrôle
F
Adresse
D
SET
Q
EIP
CLR
Q
D
T
Q
Q
+
SET
X UALY
CLR
0
IRá23..0ñ
Q
1
4
Q
mux
A
SET
D
G
Mémoire2
Donnée
T2
CLR
Adresse
L’UAL permet entre autres les opérations suivantes (écrit comme « contrôlesortie de l’UAL ») :
0X : 1Y : 2X + Y : 3X  Y : 4X << Y : 5X >> Y ; 6Y + 4 : 7Y  4 : …
Et les registres sont numérotés (numérotation différente de celle du devoir 1) :
eax:=R[0] : ebx:=R[1] : ecx:=R[2] : edx:=R[3] : esi:=R[4] : edi:=R[5] : ebp:=R[6] : esp:=R[7]
Soit l’instruction IA-32 « POP (%edx) » (pour les sous-questions a)-c)a)b)c)e) );
a) [1 pt]
Donnez le RTN abstrait pour cette instruction.
b) [1 pt]
Indiquez comment pourrait être codée en langage machine, sur cette architecture, une
instruction qui fait cette opération. C’est-à-dire de donner la valeur, dans la base de votre choix,
pour chacun des champs de IR que vous pouvez.
c) [3 pts]
Donnez le RTN concret effectuant cette opération, en supposant que IR contient bien
l’instructionb). Donnez le cas général, avec les IRá…ñ, pas le cas spécifique pour les
registres/constantes spécifiés. Effectuez-le en le moins de cycles possibles.
d) [2 pts]
Indiquez les signaux de contrôle pour « A, B, C, D, E, F, G, UAL, écrireEIP, écrireIR, écrireT,
écrireT2, écrireRegistre » (les signaux « read/write » et « enable » de Mémoire2 étant liés de
manière logique avec F et G, et la Mémoire1 étant toujours active en lecture) pour chaque cycle,
pour le RTN concret « T  8 ; T2  edx + T : T  edx + T ; ecx  Mémoire2[T2] :
IR  Mémoire1[EIP] ; EIP EIP + 0x2000 », en supposant qu’au départ IR=0x004C0008 et
qu’après son écriture, IR contient : IRá12..0ñ=0 : IRá14..13ñ=1 : IRá17..15ñ=0 : IRá20..18ñ=0 :
IRá23..21ñ=0. (Le but est de vérifier que vous savez générer les signaux pour un RTN concret
quelconque; il ne correspond pas à une instruction qui a du sens)
e) [2 pts]
L’architecture ne peut pas exécuter des « pop » avec certains types opérandes. Dites un type
d’opérande pour lequel l’architecture ne peut pas faire « pop ». Proposez comment modifier
l’architecture, en essayant de minimiser la taille des modifications, pour pouvoir exécuter ce
genre d’instruction. Expliquez clairement comment l’opération sera effectuée sur votre
architecture modifiée.
Contrôle périodique — INF1600 —Automne 2012
2/4
Question 2 Lecture d’assembleur (4,5 points)
Soit l’extrait de programme suivant, pour un processeur de la famille x86 (IA-32) :
.data
debut_data:
.equ c, 0x1000
.equ d, .
.int 10
a:
.fill 4,1
.byte 012, 16, 0x10, 0b100
b:
.word -4
.byte 1
fin_data:
.text
main: mov $0x1234, %ax
mov $0x100, %dx
mul %dx
mov $4, %ebx
lea a, %ecx
movl (%ecx,%ebx), %ebx
mov $-4, %esi
movs b(%esi), %esi
movs a+4, %edi
cmp %esi, %edi
ret
a) [1 pt]
Donnez la valeur de chaque octet en mémoire à partir de l’adresse debut_data (incluse), jusqu’à
l’adresse fin_data (non incluse), en hexadécimal. Si debut_data vaut 0x1000, quelles sont les
valeurs associées à a, b, c, d et fin_data, dans la base de votre choix?
b) [2,5 pt]
Donnez les valeurs de %ebx, %ecx, %edx, %esi, et %edi (dans la base de votre choix) après
l’exécution de la routine main (appelée en utilisant l’instruction « call main »).
c) [1 pt]
Suite à l’exécution de l’instruction de comparaison, donnez la valeur des bits CF et OF du
registre eflags. Montrez d’où proviennent les bits CF et OF dans votre calcul et ce qu’ils
signifient.
Contrôle périodique — INF1600 —Automne 2012
3/4
Question 3 Écriture d’assembleur (3,5 points)
Soit le fichier C suivant :
int fun2(int x, char y);
int fun(unsigned int* ptr, int j)
{
int i, res;
res = 0;
for(i = 0; i < j; ++i) {
res = fun2( ptr[i], ‘c’);
if( res < 0 ) res = -res;
}
return res;
}
Traduire la sous-routine fun du C à l’assembleur; faites bien attention aux types des variables utilisées.
Indiquez à quoi sert chaque instruction assembleur, par rapport au code C. Votre programme devrait être
raisonnablement efficace (pas trop d’instructions).
Question 4 Intro (4 points)
Donnez des réponses courtes et précises.
a) [1 pt]
Quelle est la différence fondamentale entre la façon de placer les données sur un CD par rapport
à un disque rigide ?
b) [1 pt]
À quoi sert l'état à haute impédance d'un tampon à trois états? Donnez un exemple de problème
possible en absence de cet état.
c) [1 pt]
Sur un disque rigide standard (à une tête par surface), pourquoi le premier secteur d’un cylindre
n’est pas aligné avec le premier secteur du cylindre précédent? (Le premier secteur d’un
cylindre est celui duquel on doit lire les données en premier, pour faire une lecture séquentielle
des informations.)
d) [1 pt]
Pour quelle(s) valeur(s) de A,B,C la sortie sera à Z (haute impédance)? (où +V vaut la valeur
logique 1, et la mise à la terre vaut la valeur logique 0) :
+V
A
B
Sortie
C
Contrôle périodique — INF1600 —Automne 2012
4/4
Téléchargement