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

Leave a Reply