langage assemblage - micro-architecture - programmation-cpu ARCHITECTURE des ORDINATEURS : EXERCICES
ARCHITECTURE
des ORDINATEURS : EXERCICES
Exercices
sur la partie langage d'assemblage
Exercice
1 : Codage des données et organisation en mémoire
Sachant
que les entiers et les flottants sont codés sur 32 bits, étudier l’implantation
en mémoire de la structure suivante
à partir de l’adresse, dont les contenus en Hexadécimal sont spécifiés, pour le
cas gros-boutiste et petitboutiste :
Struct
{
Int
a ; /* vaut 11121314
Double
b ; /* vaut 2122232425262728
Char
*c ;/ vaut 31323334
Char
d[7] ; /* vaut ‘A’,’B’,’C’,’D’,’E’,’F’,’G’
Short
e ; /* vaut 5152
Int
f : /* vaut 61626364
}
data ;
Exercice 2 : Modes d’adressage
Etant
donnés les valeurs des mots mémoire ci-dessous et une machine à une adresse
disposant d’un registre spécialisé
dans le transfert de mots mémoire, quelles sont les valeurs chargées dans ce
registre après l’exécution des
instructions suivantes ?
Le
mot 20 contient la valeur 40
Le
mot 30 contient la valeur 50
Le
mot 40 contient la valeur 60
Le
mot 50 contient la valeur 70
a)LOAD IMMEDIAT 20
b)LOAD INDIRECT 20
c)LOAD DIRECT 30
d)LOAD DIRECT 20
e)LOAD IMMEDIAT 30 f)LOAD INDIRECT 30.
Exercice 3 : Codage expansif
Spécifiez
si possible un code opération expansif qui permette de coder toutes les
instructions dans les deux configuration
suivantes :
1)
Instructions sur 36 bits :
7
instructions avec deux champs adresse de 15 bits et un champ registre de 3 bits
500
instructions avec un champ adresse de 15 bits et un champ registre de 3 bits
50
instructions sans champ adresse ni registre
2)
Instructions sur 12 bits :
4
instructions avec 3 champs registres sur 3 bits
255
instructions avec un champ registres
16
instructions sans registre.
Exercice 4 : comparaisons de machines types
Considérons
les trois machines suivantes :
M0
est une machine à pile : elle peut ranger un mot mémoire dans une pile (PUSH
X), ranger le sommet de la pile
en mémoire et dépiler (POP X) , et les opérations arithmétiques consistent à
enlever deux mots de la pile faire
l’opération et mettre le résultat dans la pile (ADD et SUB ici)
M1
est une machine à accumulateur : elle peut transférer un mot mémoire dans
l’accumulateur (LOAD X) et réciproquement
(STORE X). Elle peut additionner un mot mémoire avec le contenu de l’accumulateur
et ranger le
résultat dans l’accumulateur (ADD X) et de même retirer un mot mémoire de
l’accu (SUB X).
M2
est une machine à chargement-rangement, avec plusieurs registres généraux. Les
accés de et vers la mémoire se
font uniquement via des registres (LOAD Ri,X ou STORE Ri, X). Les opérations
arithmétiques se font uniquement de registre à registre (ADD Ri,Rj,Rk ou SUB
Ri,Rj,Rk avec Ri destination, et dans le second cas différence
Rj-Rk.
On
considère que les variables A, B,C ,D sont en mémoire. Ecrire et comparer en
taille de code et nombre d’accès
mémoire le code pour les trois machines correspondant à la suite d’instructions
:
A=B+C
;
B=A+C
;
D=A-B
;
On
supposera que le compilateur (vous) tente d’optimiser le nombre d’accès
mémoire.
Exercice 5 : Compilation de structures de contrôle.
On
utilise dans cet exercice les jeux d’instructions MEXS, et IJVM MEXS
possède une mémoire gros-boutiste organisée en octets, 32 registres de 32 bits
avec R0 câblé à 0.
Question
1 : Observer le jeu d’instructions MEXS. Quel est le nombre maximal de
bits d’un immédiat dans une instruction
arithmétique ? Comment peut-on réaliser le chargement de 0100 0000 (en
Hexadécimal) dans le registre
R1 ?
Décrire
d’une manière générale une suite d’instructions permettant de charger un
immédiat sur 32 bits dans un registre.
Question
2 : Ecrire la séquence d’instructions assembleur correspondant à :
Int i,j
i=max(i,j)
(supposées
indexées 1 et 2 respectivement dans les variables pour l’IJVM, rangées aux
adresses @i et @j pour MEXS)
Question
3 : Soit la boucle :
Pour
i=1, 256
S=s+2*i
Ecrire
un programme assembleur correspondant pour MEXS et IJVM
Question
4 : on considère la boucle :
Pour
i=0,999
S=s+X(i)
où X est un vecteur d’entiers. Pourquoi ne peut- on écrire un programme
assembleur en IJVM correspondant
à cette boucle ? Ecrire le programme assembleur MEXS correspondant, sachant que
le vecteur X est
implanté à partir de l’ adresse 10000000 et la variable s est placée à
l’adresse 100 et la variable i à l'adresse 104
Question
5 : Ecrire les programmes assembleurs MEXS pour les boucles suivantes ,
sachant que les vecteurs X et Y
sont implantés à partir des adresses 10000000 et 20000000 hexadécimal, s et i
comme dans la question précédente
.
Exercice 6 : Multiplication
Question
1: Proposer une procédure IJVM permettant de réaliser une
multiplication des deux mots au sommet de
la pile.
Question
2: En supposant que le langage IJVM comporte en outre une instruction
permettant de décaler d'un bit sur
la gauche le sommet de la pile (SL) et d'un bit sur la droite avec recopie du
bit le plus à gauche (SR), comment
les utiliser pour réaliser cette même multiplication?
Exercice 7 : Factorielle
Proposer
un programme IJVM, pouvant comporter plusieurs procédures, permettant de
calculer de manière récursive
la factorielle d'un entier. On simulera l'état de la pile pour un appel à
factorielle 3.
10.1
Jeu d’instructions de MEXS
exercices sur la partie micro-architecture
Langage
de description des micro-instructions:
Les
actions réalisées simultanément dans un cycle sont séparées par des
points-virgule.
Signaux
indiqués (rd,wr, fetch)
Instruction
suivante: si c'est celle écrite juste en dessous on n'indique rien sinon goto
etiquette.sauts conditionnels
(par rapport aux bits N et Z): If N goto x else goto y Transferts
de registre à registre par signe d'affectation: exemple MAR=SP SP transféré
dans le registre MAR.
Opérations
arithmétiques (commande de l'ALU): exemple PC=PC+1; PC est mis sur le bus B,
commande de l'incrémentation
de l'ALU et PC en registre de sortie sur le bus C.
Décalage:
exemple H=MBRU<<8 : commande de l'ALU pour transfert et décalage d'un
octet vers la gauche.
Affectations
et opérations en chaîne: exemple MDR=TOS=MDR OR H décrit le fait que MDR est
mis sur le bus B,
un ou logique est réalisé dans l'ALU en autorisant l'entrée de H, et sur le bus
C TOS et MDR sont indiqués pour
récupérer le résultat.
Format
des instructions IJVM, placement des micro-instructions dans
la mémoire de commande.
Les
différents formats d'instructions ISA:
1 octet:
DUP, IADD,IAND, IOR,IRETURN, ISUB,NOP, POP,
SWAP
2
octets:
(1
octet code opération, 1 octet constante ou numéro de variable)
BIPUSH,
ILOAD,ISTORE
3
octets:
(1
octet code opération, 2 octets pour un opérande)
GOTO, IFEQ, IFLT,IF_ICMPEQ, INVOKEVIRTUAL,
LDC-W
(1
octet code opération, 2 opérandes d'un octet)
IINC
4
octets:
(1
octet préfixe WIDE, 1 octet code opération, 2 octets opérande)
WIDE
ILOAD, WIDE ISTORE
Placement
des micro-instructions
Chaque
instruction IJVM, y compris le préfixe WIDE, est une adresse dans la mémoire de
commande, correspondant
à celle de la première micro-instruction associée.
Les
autres micro-instructions sont placées dans les trous restant dans la mémoire
de commande(pas nécessairement
consécutivement).
La
contrainte sur le placement est la réalisation des sauts éventuels de séquence
(avec le champ JAM). Lorsque l'instruction
suivante est conditionnée par un bit de sortie, il faut que les deux branches
se trouvent à 256 mots l'un
de l'autre
Article plus récent Article plus ancien