Forum UVSQ
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -20%
Ecran PC GIGABYTE 28″ LED M28U 4K ( IPS, 1 ms, ...
Voir le deal
399 €

Corrigé TP4 archi

Aller en bas

Corrigé TP4 archi Empty Corrigé TP4 archi

Message  romain L. Lun 21 Nov - 15:45

Modèle Compte Rendu, TP4 ARCHI
Marouane Belaoucha
28/11/2010

Démystification des instructions 3Pts


Instruction
Signification
LDA #5
Charger la valeur 5 dans le registre ACCUMULATEUR
BRA 12
Sauter à l'instruction qui se trouve dans l'adresse 12 de la mémoire
LDA 4
Charger le contenu de l'adresse 4 dans l'accumulateur
ADD #1
Incrémenter la valeur l'accumulateur
STA 4
Stocker la valeur de l'accumulateur dans le mot mémoire 4
BRA 0
Sauter à l'instruction qui se trouve à l'adresse 0

Démystification du programme 2Pts

Le programme incrémente la variable stockée à l'adresse 4 (nommons la i)

LDA 4
ADD #1 ==> i=i+1;
STA 4

Tout branchement vers une adresse antérieur est une boucle. Ici la boucle est infinie.
Le programme incrémente interminablement la variable i (stockée dans le mot mémoire 4).

Programme équivalent en C:

while(1){
5; // <=> LDA #5, OUI on peut faire cela, même si ça ne sert à rien
i ++;
}

Instructions microcycle par microcycle 15pts

*LE* microcycle récurrent 5pts
Nous remarquons que chaque instruction est exécutée en trois microcycles.
Le microcycle 0: aller rechercher l'instruction courante dans la mémoire, la récupérer dans le registre RI puis faire le décodage en COP et OP (Code OPération) (Opérande). Cette partie est commune à toutes les instructions.
Le mirocycle 1: l'instruction à exécuter est, à présent, connue. Son exécution est achevée durant ce microcycle si il s'agit d'une opération à adressage immédiat ou un branchement. S'il s'agit d'une instruction à adressage direct, ce microcycle prépare l'opérande (aller le chercher dans la mémoire).
Le microcycle 2: Pour les instructions qui utilise l'adressage direct. Instruction décodée (cycle 0), opérande calculé (cycle 1) … il ne reste qu'à réaliser l'opération demandée.


La recherche et le décodage d'instruction. Le microcycle 0 de toutes les instructions.

Nous devons aller chercher l'instruction dans la mémoire, le CO (qui contient l'adresse de l'instruction courante) doit être utilisé comme index de la mémoire. Pour cela il doit être sélectionné par le multiplexeur MUX1 (et donc selmux1 à 0). La mémoire est indexée, la valeur pointée par l'index (CO) est lue, et vue que c'est une instruction, elle doit être écrite dans le registre RI (et donc HRI doit être à 1). Etant codé, le contenu de RI, est décodé en COP+OP.
Tous les autres registres de l'architecture doivent être verrouillées [i.e. Doivent conserver leurs anciennes valeurs] (pour ne pas écrire ce qui est impertinent à cette étape).

FIN CYCLE 0

L'instruction à exécuter est, désormais, connue (car décodé) … c'est à partir de qu'on commence à avoir des déroulements d'exécutions spécifiques (schémas de contrôles) pour chaque instruction.


LDA # 5 : 1pt
Le microcycle 0: recherche & décodage instruction (décrites précédemment).
COP=0, OP=5
Microcycle 1: étant donné que l'instruction est un LDA immédiat (COP=0), on doit propager son opérande (5) et l'écrire dans l'accumulateur. Or le seul moyen d'accès à l'accumulateur est le BUS. Etant donné que la partie OP est liée à l'entrée B du MUX2 et que la sortie du MUX2 est reliée à l'entrée B de l'UAL dont la sortie affecte le bus principal. Il suffit de mettre selmux2 à 1 et falu à 1 pour diriger l'opérande vers le bus.
À présent, le bus contient la valeur de l'opérande de l'instruction LDA, il suffit d'autoriser l'écriture dans l'accumulateur en mettant HACCU à 1. Et en faisant attention à ne pas écrire dans RADM (HRADM = 0) et dans CO, car c'est le même bus qui les lient avec l'accumulateur.
Tous les autres registres (qui ne sont pas mentionnées ici) doivent être verrouillés par mesure de sécurité.

L'instruction est achevée, on demande au CO de s'incrémenter (CO+1 à 1, HCO à 1) pour passer à l'instruction suivante.

Le LDA IMMEDIAT s'exécute dans 2 microcycle, c'est une instruction *courte*

BRA 12 : 2pt
Le microcycle 0: recherche & décodage instruction (décrites précédemment).
COP=1, OP=12
Microcycle 1: à ce moment là l'opérande (12) est une adresse, une adresse qui contient une instruction codée. Vue que le COP indique un branchement inconditionnel, la prochaine instruction à exécuter est celle qui se trouve dans l'adresse 12. Or la seule composante qui pointe la prochaine instruction est CO. Il suffit d'écrire cette adresse dans le CO pour réaliser le branchement. L'OP doit sortir dans le bus (SELMUX2 = 1, FALU = 1), puis écrit dans le registre CO (CO+1 à 0, HCO à 1), l'accumulateur est le RADM doivent être verrouillés (HACC = 0, HRADM = 0).
Tous les autres registres (qui ne sont pas mentionnées ici) doivent être verrouillés par mesure de sécurité.
L'OP est écrit dans CO, la prochaine instruction à exécuter est OP (ici 12), l'instruction BRA est achevée. C'est une instruction courte.


LDA 4 : 2,5Pts
Le microcycle 0: recherche & décodage instruction (décrites précédemment).
COP=2, OP=4
Microcycle 1: à ce moment, on sait que l'instruction est un LDA en adressage direct (COP = 2), et que l'OP est l'adresse qui contient la valeur à additionner (au contenu de l'ACCU). Une relecture de la mémoire (mais cette fois-ci pour récupérer une donnée, pas une instruction) s'impose. Et vue que c'est une donnée qu'on veut récupérer, on va utiliser RADM comme index (surtout pas le CO). Tout est tracé, OP doit être écrit dans RADM. Pour ce faire, OP doit sortir sur le bus (SELMUX2=1, FALU=1), puis écrit dans RADM (HRADM = 1), pas dans ACCU (HACCU = 0), et surtout pas dans CO (CO+1=0, HCO = 0). le microcycle se termine à ce point.
Microcycle 2: RADM contient, désormais, l'adresse de la donnée mémoire à récupérer. C'est lui qui doit être utilisé comme index (SELMUX1=1). La mémoire est lue, son contenu est sur le bus qui desserve à la fois RI et l'entrée A de MUX2. La donnée ne doit surtout pas être écrite dans RI (HRI = 0, car sinon, elle sera décodée et traitée comme une instruction), et elle doit être écrite dans l'ACCU (COP=2 => LDA dir). Faut l'ecrire dans le bus (SELMUX2=0, FALU=1) puis dans l'ACCU (HACCU = 1). pas dans RADM (HRADM=0). L'exécution de l'instruction est achevée, on passe à l'instruction suivante (CO+1 = 1, HCO =1).
le LDA dir comsomme ses 3 microcycle, il s'agit d'une instruction longue.

ADD #1: 1,5Pts
Le microcycle 0: recherche & décodage instruction (décrites précédemment).
COP=3, OP=1
Microcycle 1: l'instruction fait de l'addition en adressage immédiat (l'OP est la valeur à additionner). La seule composante qui nous permet de faire des opérations arithmétique est l'UAL son premier opérande est toujours l'ACCU, son deuxième est la sortie du MUX2, le résultat est versé automatiquement dans le bus. OP doit franchir MUX2 (SELMUX2=1), l'UAL a ses deux opérandes (ACCU et OP) il suffit de choisir le fontion addition (FALU=2), et d'écrire le résultat dans l'accumulateur (HACCU =1), et de verrouiller ailleurs (HRADM = 0). l'instruction est finie, on passe à l'instruction suivante (CO+1=1, HCO=1).
STA 4: 3Pts
Le microcycle 0: recherche & décodage instruction (décrites précédemment).
COP=4, OP=4
Microcycle 1: Nous devons écrire le contenu de l'accumulateur dans le mot mémoire 4. On doit d'abord indexer le mot mémoire qui sera mis à jour, en propageant l'OP dans RADM. L'OP sera écrit dans le bus (SELMUX2=1, FALU=1), puis dans RADM (HRADM = 1).
Microcycle 2: la mémoire doit être indexée par RADM et pas CO (SELMUX2=1), le contenu de l'accumulateur est versé dans le bus (FALU=0), puis le contenu du bus sera écrit dans la mémoire (HMEM=1), tous les autres registres sont verrouillés (HACCU=0, HRADM=0). On passe à l'instruction suivante (CO+1=1, HCO=1).

BRA 0
Le branchement a été déjà étudié.

romain L.
Noob en Informatique
Noob en Informatique

Messages : 3
Date d'inscription : 12/11/2011

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum