Contrôle périodique — INF1600 —Hiver 2012 2/4
Question 1 Architecture (9 points)
Pour permettre d’exécuter une plus grande partie des instructions de l’IA-32, nous avons ajouté H à
l’architecture du devoir 1 : (les fils de contrôles ne sont pas dessinés, pour la clarté)
Q
Q
SET
CLR
DIR
32
+
Q
Q
SET
CLR
DEIP
mux
A4
Mémoire1
Donnée
Adresse
IRá23..0ñ
UAL
Mémoire2
Donnée
Adresse
Registres
[0..7]
(soit eax,
ebx, …)
Q
QSET
CLR
D
T
IRá12..0ñ
C
IRá14..13ñ
mux
B
IRá17..15ñ
IRá20..18ñ
IRá23..21ñ
DE
F
0
1
2
0
1
Circuit de
contrôle IRá31..24ñ
lecture
écriture
X Y
G
mux
H
0
1
L’UAL permet entre autres les opérations suivantes (écrit comme « contrôlesortie de l’UAL ») :
0X : 1Y : 2X + Y : 3X Y : 4X << Y : 5X >> Y ; 6Y + 4 : 7Y 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 « JMP *16(%eax,%ebx,8) » ( pour les sous-questions a), b), c) et 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’instruction b). 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, H, UAL, écrireEIP, écrireIR,
écrireT, é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 ; EIP edx + T : T edx + T ; ecx Mémoire2[T] :
IR Mémoire1[EIP] ; ebx T >> 3 », en supposant qu’au départ IR=0x004C0008 et qu’après
son écriture, IR contient : IRá12..0ñ=3 : IRá14..13ñ=0 : IRá17..15ñ=0 : IRá20..18ñ=0 :
IRá23..21ñ=1. (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 branchements relatifs avec des opérandes (c.-à-d.
EIP = EIP + valeur dans un registre). 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.