• Aucun résultat trouvé

M1105 TD1 Architecture d un ordinateur.

N/A
N/A
Protected

Academic year: 2022

Partager "M1105 TD1 Architecture d un ordinateur."

Copied!
33
0
0

Texte intégral

(1)

M1105 – TD1 – Architecture d’un ordinateur.

Éric Würbel

Table des matières

1 Objectifs 1

2 Architecture générale 1

3 La mémoire centrale 2

4 Le processeur 2

5 Les instructions du processeur LMC 3

6 Instructions simples 3

7 Instructions de branchement 8

8 Correction des exercices 15

1 Objectifs

La séance d’aujourd’hui aura pour but de comprendre le fonctionnement d’un ordinateur fictif à vocation pédagogique : Little Man Computer (LMC). L’objectif est de vous faire comprendre la façon dont fonctionne un ordinateur utilisant l’architecture de Von Neumann (c’est à dire l’architecture de tous les ordinateurs actuels).

Le but n’est pas de faire de vous des spécialistes de la couche matérielle, mais bien de com- prendre suffisamment le fonctionnement de ce matériel de façon à prendre conscience de ce qu’un système d’exploitation doit prendre en charge.

2 Architecture générale

Bus

Processeur Mémoire vive

Périphérique d’entrée

Périphérique de sortie

FIGURE 1 – Little Man Computer : un modèle simplifié d’ordinateur avec architecture de Von Neumann

On retrouve les éléments vus en cours :

— Leprocesseur: chargé d’exécuter des instructions trouvées en mémoire. Ces instructions manipuleront des données situées elles aussi en mémoire, et écriront éventuellement des résultats en mémoire.

— La mémoire vive : est une mémoire réinscriptible, qui perd son contenu à l’extinction de l’ordinateur.

(2)

— Périphérique d’entrée : permet d’acquérir des données du monde extérieur. Ici on pourra considérer qu’il s’agit d’un clavier.

— Périphérique de sortie : permet d’envoyer des résultats au monde extérieur. Ici on pourra considérer qu’il s’agit d’un écran.

3 La mémoire centrale

La mémoire de LMC est très simple : elle est constituée de 100 cases consécutives, numérotées de 0 à 99. Chaque case peut contenir un nombre entier de 3 chiffres, (de 000 à 999 donc). La figure 2 représente la mémoire et un exemple de contenu.

adresse contenu

00 599

02 030

03 000

04 001

05 010

06 551

. . . .

99 000

FIGURE2 – La mémoire de la machine LMC

La mémoire contiendra aussi bien des données que des programmes. Il faudra donc faire attention à ne pas tout mélanger.

4 Le processeur

Le processeur est constitué de :

— un registre appeléaccumulateur(Acc), pouvant contenir un nombre entier à trois chiffres ;

— Deux registres pour la manipulation des instructions :

— un registre appelécompteur ordinal(PC : program counter), qu’il est possible de re- mettre à zéro. Ce registre contient l’adresse de la prochaine instruction que va exécuter LMC. Ce registre est normalementincrémentéde 1 après chaque instruction exécutée.

Ainsi, l’exécution des instructions estséquentielle. Nous verrons qu’il existe des instruc- tions permettant de forcer la valeur du compteur ordinal, et ainsi d’indiquer où continuer l’exécution, appelées instructions de branchement. Ce branchement peut être forcé (branchement inconditionnel) ou soumis à une condition (branchement conditionnel) ;

— unregistre d’instruction(IR : instruction register) contenant une instruction à exécuter

— un registre d’état (nous y reviendrons plus tard). Le processeur s’en sert pour indiquer que l’exécution d’une instruction a généré une situation anormale ;

— uneUnité Arithmétique et Logique(UAL) capable d’effectuer des additions et des soustrac- tions.

— UneUnité de Commandechargée de coordonner les opérations dans le processeur comme nous l’avons vu en cours. Dans les fait, l’unité de commande, ce sera nous !

L’exécution d’un programme commence toujours à l’adresse 0.

L’exécution d’un programme est décrite par lecycle d’exécution(voir le cours). Celui-ci est défini de la façon suivante.

(3)

Définition 4.1 — Cycle d’exécution de la machine LMC. Le cycle d’exécution effectué par l’unité de commande est toujours le même, et consiste à répéter idéfiniment (ou jusqu’à l’arrêt de LMC) :

1. Lire le registre PC, aller à l’adresse mémoire correspondante, récupérer l’instruction et la mettre dans IR (Fetch).

2. Incrémenter le registre PCa. 3. décoder l’instruction 4. exécuter l’instruction

a. Incrémenter signifieajouter 1

Ce cycle d’exécution, bien que légèrement plus simple que le cycle d’exécution d’un vrai processeur, en est malgré tout proche. Tous les éléments principaux sont présents. Ce dont il faut bien se rendre compte, c’est qu’en réalité tout cela va très vite. L’horloge d’un microprocesseur actuel utilise une fréquence d’environ 2GHz. Autrement dit, elle génère 2 milliards d’impulsions par seconde. On peut raisonnablement dire qu’en moyenne, un cycle d’exécution prend environ 10 cycles d’horloge. Ce qui revient à dire que le processeur est capable d’exécuter 200 millions

d’instructions par seconde !

5 Les instructions du processeur LMC

Une instruction est un nombre compris entre 000 et 999. Autrement dit, une instruction peut être stockée dans un emplacement mémoire.

Chaque instruction est composée de deux parties :

— le chiffre de gauche indique l’opération à efffectuer

— Les deux autres chiffres indiquent l’opérande sur laquelle agir, quand cela a un sens. Si l’opération ne nécessite pas d’opérande, celle-ci vaudra 00.

Le tableau 1 décrit toutes les instructions du processeur de LMC. Ne vous préoccupez pas pour l’instant de la colonnecode mnémonique, nous y reviendrons plus tard.

6 Instructions simples

Exemple 6.1 — addition simple. Voici un exemple de programme qui additionne deux valeurs situées à l’adresse 4 et 5 de la mémoire, et range le résultat à l’adresse 6 :

Adresse Contenu Opération Commentaires

00 504 MÉMOIRE[4]→Acc Charge la valeur située à l’adresse 4 dans l’ac- cumulateur

01 105 Acc = Acc + MÉMOIRE[5] Ajoute le nombre situé à l’adresse 5 à la va- leur de l’accumulateur. Ranger le résultat dans l’accumulateur

02 306 Acc→MÉMOIRE[6] Range la valeur actuelle de Acc à l’adresse 6

03 000 Arrête le fonctionnement

04 030 Première valeur à aditionner

05 100 Deuxième valeur à aditionner

06 000 Emplacement de stockage du résultat. Sa va-

leur avant exécution importe peu

L’état du système avant l’exécution du programme peut se représenter de la façon suivante :

(4)

TABLE1 – Little Man Computer : jeu d’instructions du processeur

Code Code Instruction Description

Numérique Mnémonique

1xx ADD ADD Ajoute la valeur présente à l’adressexx de la mé-

moire à la valeur actuellement dans l’accumulateur.

Le résultat se trouvera dans l’accumulateur. Si la somme est supérieure à 999, la valeur de l’accumula- teur n’est pas modifiée.

2xx SUB SUBSTRACT Soustrait la valeur présente à l’adressexxde la mé- moire à la valeur actuellement présente dans l’accu- mulateur. Le résultat se trouvera dans l’accumulateur.

Si le résultat est négatif, la valeur de l’accumulateur n’est pas modifiée, et un drapeau NEG est armé dans le registre d’état.

3xx STA STORE Enregistre le contenu de l’accumulateur à l’adresse

xxde la mémoire (opération destructive). Le contenu de l’accumulateur n’est pas modifié.

5xx LDA LOAD Charge la valeur présente à l’adressexxdans l’accu-

mulateur. La valeur à l’adressexxn’est pas modifiée, mais le contenu de l’accumulateur est écrasé.

6xx BRA BRANCH Branchement inconditionnel. Fixe le compteur or-

dinal PC à l’adresse xxdonnée. L’exécution de la prochaine instruction se fera donc à cet emplacement.

7xx BRZ BRANCH IF ZERO Branchement conditionnel. Si laccumulateur contient la valeur 000, fixe le compteur ordinal PC à la valeur xx. Ne fait rien autrement.

8xx BRP BRANCH IF POSITIVE Branchement conditionnel. Si le drapeau NEGn’est pas armé dans le registre d’état, fixe le compteur ordinal PC à la valeur xx. Autrement, désarme le drapeau NEG et ne fait rien d’autre.

901 INP INPUT Lit le port d’entrée, récupère la valeur et la stocke dans l’accumulateur.

902 OUT OUTPUT Copie la valeur de l’accumulateur sur le port de sor- tie.

000 HLT/COB HALT/COFFEE BREAK Arrête le fonctionnement.

(5)

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 000

PC 000 000 IR

Acc 000

On lance maintenant l’exécution du programme. On suit donc le cycle d’exécution décrit dans la définition 4.1. Le registre PC contient l’adresse de la prochaine instruction à exécuter. On charge donc cette instruction dans le registre IR :

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 000

PC 000 504 IR

Acc 000

On incrémente de 1 le compteur ordinal PC :

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 000

PC 001 504 IR

Acc 000

L’instruction est ensuite décodée : Le chiffre le plus à gauche (5) indique qu’il s’agit d’une instruction servant à charger le registre accumulateur Acc avec la valeur contenue à une certaine adresse mémoire. L’adresse est donnée par les deux derniers chiffres (ici 04).

Une fois décodée, l’instruction est exécutée :

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 000

PC 001 504 IR

Acc 030

(6)

On commence un nouveau cycle. Le registre PC contient l’adresse de la prochaine instruction à exécuter. On charge donc cette instruction dans IR :

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 000

PC 001

IR 105

Acc 030

On incrémente de 1 le compteur ordinal PC :

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 000

PC 002 105 IR

Acc 30

L’instruction est ensuite décodée : Le chiffre le plus à gauche (1) indique qu’il s’agit d’une instruction servant à additionner au contenu du registre accumulateur Acc la valeur contenue à une certaine adresse mémoire. L’adresse est donnée par les deux derniers chiffres (ici 05).

Une fois décodée, l’instruction est exécutée :

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 000

PC 002

IR 105

Acc

130 (30+100)

On commence un nouveau cycle. Le registre PC contient l’adresse de la prochaine instruction à exécuter. On charge donc cette instruction dans IR :

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 000

PC 002 306 IR

Acc 130

(7)

On incrémente de 1 le compteur ordinal PC :

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 000

PC 003 306 IR

Acc 130

L’instruction est ensuite décodée : Le chiffre le plus à gauche (3) indique qu’il s’agit d’une instruction servant à stocker le contenu du registre accumulateur Acc à une certaine adresse mémoire.

L’adresse est donnée par les deux derniers chiffres (ici 06).

Une fois décodée, l’instruction est exécutée :

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 130

PC 003 306 IR

Acc 130

Nouveau cycle : le registre PC contient l’adresse de la prochaine instruction à exécuter. On charge donc cette instruction dans IR :

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 000

PC 003

IR 000

Acc 130

On incrémente de 1 le compteur ordinal PC :

Mémoire

00 504 01 105 02 306 03 000 04 030 05 100 06 000

PC 004 000 IR

Acc 130

(8)

Le décodage de l’instruction 000 indique que la machine doit s’arrêter.

Le programme termine donc son exécution, et le résultat du programme se trouve à l’adresse 06 de la mémoire.

En résumé, ce programme sert à additionner le nombre se situant à l’adresse 04 au nombre se situant à l’adresse 05 et à ranger le résultat à l’adresse 06.

Exercice 6.1 Écrire un programme pour la machine LMC qui :

— lit deux nombres sur le périphérique d’entrée,

— soustrait le second nombre au premier,

— envoie le résultat sur le port de sortie.

Quelques remarques sur cet exercice :

— Les tâches décrites dans la liste ci-dessus sont indépendantes. Traitez-les spéramément, cela vous évitera de vous embrouiller.

— Pour lire un nombre sur le périphérique d’entrée (imaginez que c’est un clavier), consultez l’instruction 901 dans la table 1.

— Pensez que vous allez probablement devoir stocker temporairement les nombres lus sur sur le périphérique d’entrée dans la mémoire centrale. Cela implique que vous réserviez des cases mémoire à cet usage.

7 Instructions de branchement

Dans l’exemple et l’exercice précédent, l’exécution du programme se faiten séquence. On commence l’exécution à l’adresse zéro, puis on exécute l’instruction à l’adresse 1, puis à l’adresse 2, etc. On s’arrête lorsqu’on rencontre une instruction d’arrêt (000).

Rapidement on va se retrouver limités. Par exemple, il est impossible avec ces seules instructions de prendre une décision sur ce que doit faire le programme en fonction d’une certaine condition.

Pour cela, il faudrait pouvoirbriser la séquence, autrement dit indiquer au processeur que lors du cycle suivant il doit poursuivre son exécution à une adresse particulière de la mémoire que ne soit pas la suivante. C’est ce qu’on appelle un branchement.

Exemple 7.1 — Branchement inconditionnel. Un branchement inconditionnel permet de dérouter l’exécution d’un programme quoi qu’ils se passe. On le réalise à l’aide de l’instruction BRANCH (6xx). Voici un petit exemple (qui ne fait rien de spécial).

Adresse Contenu Assembleur Commentaires 00 604 BRA 03 saute à l’adresse 04

01 510 LDA 10 Copie la valeur située à l’adresse 10 dans le registre accumulateur

02 902 OUT Envoie le contenu de l’accumulateur sur le port de sortie (affiche la valeur 1)

03 000 HLT Arrête le fonctionnement

04 511 LDA 11 Copie la valeur située à l’adresse 11 dans le registre accumulateur

05 902 OUT Envoie le contenu de l’accumulateur sur le port de sortie (affiche la valeur 0)

06 000 HLT Arrête le fonctionnement

10 001

11 002

(9)

Notez au passage l’utilisation de la notation mnémonique pour ce programme. Pour nous autres humains c’est plus simple à lire, mais évidemment le processeur lui ne comprend que les nombres de la colonne « Contenu ». Cette notation symbolique s’appellelangage d’assemblage, ou assembleur.

La question est ici : qu’est-ce qui est envoyé sur le périphérique de sortie ? 1 ou 2 ? Simulons l’exécution de ce programme. L’état initial de la mémoire est le suivant.

Mémoire

00 604 01 510 02 902 03 000 04 511 05 902 06 000 ... ... 10 001 11 002

PC 000 000 IR

Acc 000

IN (port d’entrée) OUT (port de sortie)

On commence à exécuter. Le registre PC indique l’adresse de l’instruction à exécuter. On copie cette instruction dans IR, pyuis on incrémente le registre PC.

Mémoire

00 604 01 510 02 902 03 000 04 511 05 902 06 000 ... ... 10 001 11 002

PC 001 604 IR

Acc 000

IN (port d’entrée) OUT (port de sortie)

On décode ensuite l’instruction. C’est une instruction de type 6xx. Son effet est d’écrirela valeurxxdans le registrePC.

(10)

Mémoire

00 604 01 510 02 902 03 000 04 511 05 902 06 000 ... ... 10 001 11 002

PC 004

604 IR Acc 000

IN (port d’entrée) OUT (port de sortie)

Lors du cycle suivant on va donc charger dans le registre IR l’instruction se trouvant à l’adresse indiquée par PC, c’est à dire l’adresse 04 ! On incrémente ensuite PC (déroulement normal du cyle).

Mémoire

00 604 01 510 02 902 03 000 04 511 05 902 06 000 ... ... 10 001 11 002

PC 005

IR 511

Acc 000

IN (port d’entrée) OUT (port de sortie)

On décode l’instruction se trovuant dans IR : 511 signifie qu’on va copier dans le registre accumulateur la valeur contenue à l’adresse 11. Après exécution on a :

Mémoire

00 604 01 510 02 902 03 000 04 511 05 902 06 000 ... ... 10 001 11 002

PC 005

IR 511

Acc 002

IN (port d’entrée) OUT (port de sortie)

La suite de l’exécution se déroule normalement en séquence, et donc c’est bien la valeur 2 qui va être affichée.

Remarquez que les instructions situées aux adresses 01, 02 et 03ne seront jamais exécutées.

(11)

Avant d’aborder le branchement conditionnel (c’est-à-dire dépendant d’une certaine condition), revenons sur le registre d’état S. Celui de notre processeur est très simple : il contient un drapeau, c’est-à-dire une valeur particulière, noté NEG, signalant qu’une soustraction a fourni une valeur négative. Si le déroulement du programme ne rencontre pas cette situation, alors le drapeau n’est pas présent dans le registre d’état.

Je vous rappelle (voir la table 1) que l’instruction de soustraction, lorsqu’elle produit un résultat négatif, a deux effets :

1. Elle ne modifie pas la valeur de l’accumulateur ; 2. Elle arme le drapeau NEG dans le registre d’état S.

L’instruction BRP (8xx) va écrire la valeur xx dans PCuniquement si le grapeau NEG n’est pas armé dans le registre d’état. Voici un petit exemple.

Exemple 7.2 — Branchement conditionnel. Voici un petit programme utilisant le branche- ment conditionnel.

Adresse Contenu Mnémonique Commentaires

00 511 LDA 11 Copie la valeur située à l’adresse 11 dans le registre accumulateur

01 210 SUB 10 Soustrait la valeur située à l’adresse 10 à Acc et range le résultat dans Acc

02 806 BRP 06 copie 06 dans PC si le drapeau NEGn’est pas armé

03 510 LDA 10

04 902 OUT

05 000 HLT

06 511 LDA 11

07 902 OUT

08 000 HLT

10 001

11 002

Question : qu’est-ce qui est envoyé sur le périphérique de sortie ? 1 ou 2 ? Simulons l’exécution.

L’état initial de la machine est

Mémoire

00 511 01 210 02 806 03 510 04 902 05 000 06 511 07 902 08 000 ... ... 10 001 11 002

PC 000 000 IR

Acc 000

S

IN (port d’entrée) OUT (port de sortie)

On commence à exécuter. Le registre PC indique l’adresse de l’instruction à exécuter. On copie cette instruction dans IR, puis on incrémente le registre PC.

(12)

Mémoire

00 511 01 210 02 806 03 510 04 902 05 000 06 511 07 902 08 000 ... ... 10 001 11 002

PC 001 511 IR

Acc 000

S

IN (port d’entrée) OUT (port de sortie)

Décodage : l’instruction 511 copie la valeur située à l’adresse 11 dans ACC. On exécute :

Mémoire

00 511 01 210 02 806 03 510 04 902 05 000 06 511 07 902 08 000 ... ... 10 001 11 002

PC 001

IR 511

Acc 002

S

IN (port d’entrée) OUT (port de sortie)

Nouveau cycle : copie l’instruction située à l’adresse 1 dans IR, puis on incrémente PC :

(13)

Mémoire

00 511 01 210 02 806 03 510 04 902 05 000 06 511 07 902 08 000 ... ... 10 001 11 002

PC 002 210 IR

Acc 002

S

IN (port d’entrée) OUT (port de sortie)

Décodage : l’instruction 210 soustrait la valeur située à l’adresse 10 au contenu de Acc.

Elle range le résultat dans ACC si tout se passe bien. Si l’opération produit un nombre négatif, l’accumulateru est inchangé, et le drapeau NEG est armé dans le registre d’état S. On exécute :

Mémoire

00 511 01 210 02 806 03 510 04 902 05 000 06 511 07 902 08 000 ... ... 10 001 11 002

PC 002 210 IR

Acc 001

S

IN (port d’entrée) OUT (port de sortie)

2−1=1

Tout s’est bien déroulé (car 2−1=1). Donc le drapeau NEG n’est pas armé.

On commence un nouveau cycle : chargement dans IR de l’instruction désignée par PC, puis incrémentation de PC :

(14)

Mémoire

00 511 01 210 02 806 03 510 04 902 05 000 06 511 07 902 08 000 ... ... 10 001 11 002

PC 003 806 IR

Acc 001

S

IN (port d’entrée) OUT (port de sortie)

Décodage : 806 est une instruction debranchement conditionnel: si le drapeau NEGn’est pas armédans le registre S, copier la valeur xx dans le registre PC.

Exécution : ici le drapeau NEG n’est pas armé, donc on effectue la copie.

Mémoire

00 511 01 210 02 806 03 510 04 902 05 000 06 511 07 902 08 000 ... ... 10 001 11 002

PC 006

806 IR Acc 001

S

IN (port d’entrée) OUT (port de sortie)

Le nouveau cycle d’exécution va donc commencer à l’adresse 06. Vous avez maintenant suffisam- ment de connaissance de la machine LMC pour voir que c’est la valeur 2 qui va être envoyée sur le

périphérique de sortie.

Exercice 7.1 Écrire un programme pour la machine LMC qui :

— lit deux nombres sur le périphérique d’entrée,

— envoie la valeur 1 sur le port de sortie si le premier nombre est supérieur ou égal au second.

Dans le cas contraire il renverra zéro.

Y Observez la façon dont vous êtes amené à gérer la mémoire : une partie pour le programme, une partie pour les données (on ne doit pas mélanger les deux). C’est une des tâches fondamentales du système d’exploitation.

(15)

Exercice 7.2 Pour illustrer la remarque précédente, analysez l’exécution du programme suivant.

Que se passe-t-il ?

Dans la colonne en assembleur, on voit apparaitre une instruction nouvelle, qui n’en est pas une :DATA. Ce n’est pas une instruction du processeur, mais unedirectived’assemblage permettant de définir le contenu de l’adresse mémoire à laquelle elle se trouve.

Adresse Contenu Assembleur 00 504 LDA 04 01 105 ADD 05 02 303 STA 03

03 000 HLT

04 400 DATA 400 05 200 DATA 200

8 Correction des exercices

Solution de l’exercice 6.1 Voici une solution possible pour cet exercice : adresse contenu mnémonique commentaire

00 901 INP Lecture d’un nombre sur le port d’entrée 01 399 STA 99 Écrit le nombre lu à l’adresse 99

02 901 INP Lecture d’un nombre sur le port d’entrée 03 398 STA 98 Écrit le nombre lu à l’adresse 98

04 599 LDA 99 Charge la valeur située à l’adresse 99 dans Acc 05 298 SUB 98 Acc - valeur à l’adresse 98

06 902 OUT Affichage

07 000 HLT Arrêt

Quelques remarques sur ce programme :

— Remarquez la colonne contenant la notation mnémonique. Pour nous autres humains c’est plus simple à lire, mais évidemment le processeur lui ne comprend que les nombres de la colonne « contenu ». Cette notation symbolique s’appellelangage d’assemblage, ou assembleur.

— Prêtez attention à l’organisation de la mémoire : les adresses de 0 à 8 contiennent les instructions du programme. Les adresses 98 et 99 contiennent lesdonnées manipulées par le programme. On aurait pu choisir de stocker ces données aux adresses 8 et 9, qui sont libres. Toutefois, cela réclame de connaître à l’avance la taille du programme. En commençant à stocker à partir de la « fin » de la mémoire, on est à peu près certains, vu la simplicité du programme à écrire, qu’on utilisera pas ces adresses pour le programme.

Traçons l’exécution du programme : État initial de la machine

(16)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000

PC 000 000 IR

Acc 000

Port d’entrée

Port de sortie

On lance maintenant l’exécution du programme. Le registre PC contient l’adresse de la prochaine instruction à exécuter. On charge donc cette instruction dans IR, et on incrémente PC :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000

PC 001 901 IR

Acc 000

Port d’entrée

Port de sortie

On décode l’instruction : l’instruction 901 (INP) lit un nombre sur le port d’entrée (le périphérique d’entrée). Supposons que le nombre 45 soit disponible sur ce périphérique (un utilisateur a tapé 45 au clavier). Cette valeur va être placée dans Acc. Après exécution on a :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000

PC 001

IR 901

Acc 045

Port d’entrée 045

Port de sortie

On continue : chargement dans IR de l’instruction située à l’adresse désignée par PC, puis incrémentation de PC :

(17)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000

PC 002 399 IR

Acc 045

Port d’entrée 045

Port de sortie

Décodage de l’instruction dans IR : il s’agit d’une instruction de stockage (3xx,STA) de la valeur de Acc à une adresse mémoire, ici 99. On exécute :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000 ... ... 98 000 99 045

PC 004

IR 398

Acc 045

Port d’entrée 045

Port de sortie

On charge l’instruction située à l’adresse indiquée par PC, puis on incrémente PC :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000 ... ... 98 000 99 045

PC 003

IR 901

Acc 045

Port d’entrée 045

Port de sortie

(18)

On décode l’instruction : l’instruction 901 (INP) lit un nombre sur le port d’entrée (le périphérique d’entrée). Supposons que le nombre 5 soit disponible sur ce périphérique (un utilisateur a tapé 5 au clavier). Cette valeur va être placée dans Acc. Après exécution on a :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000 ... ... 98 000 99 045

PC 003

IR 901

Acc 005

Port d’entrée 005

Port de sortie

On charge l’instruction située à l’adresse indiquée par PC, puis on incrémente PC :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000 ... ... 98 000 99 045

PC 004

IR 398

Acc 005

Port d’entrée 005

Port de sortie

Décodage de l’instruction dans IR : il s’agit d’une instruction de stockage (3xx,STA) de la valeur de Acc à une adresse mémoire, ici 98. On exécute :

(19)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000 ... ... 98 005 99 045

PC 004 398 IR

Acc 005

Port d’entrée 005

Port de sortie

On charge l’instruction située à l’adresse indiquée par PC (004), puis on incrémente PC :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000 ... ... 98 005 99 045

PC 005 599 IR

Acc 005

Port d’entrée 005

Port de sortie

Décodage de l’instruction dans IR : il s’agit d’une instruction de chargement (5xx,LDA) de la valeur contenue à une adresse mémoire — ici 99 — dans Acc. On exécute :

(20)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000 ... ... 98 005 99 045

PC 005 599 IR

Acc 045

Port d’entrée 005

Port de sortie

On charge l’instruction située à l’adresse indiquée par PC (005), puis on incrémente PC :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000 ... ... 98 005 99 045

PC 006 298 IR

Acc 045

Port d’entrée 005

Port de sortie

Décodage de l’instruction dans IR : il s’agit d’une instruction de soustraction (2xx,SUB) de la valeur contenue à une adresse mémoire — ici 98 — à la valeur présente dans Acc. Le résultat est placé dans Acc. On exécute :

(21)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 902 07 000 ... ... 98 005 99 045

PC 006 298 IR

Acc 040

Port d’entrée 005

Port de sortie

— (45−5)

Solution de l’exercice 7.1 Voici une solution possible pour cet exercice : adresse contenu mnémonique commentaire

00 901 INP Lecture d’un nombre sur le port d’entrée 01 399 STA 99 Écrit le nombre lu à l’adresse 99

02 901 INP Lecture d’un nombre sur le port d’entrée 03 398 STA 98 Écrit le nombre lu à l’adresse 98

04 599 LDA 99 Copie la valeur située à l’adresse 99 dans Acc 05 298 SUB 98 Acc - valeur à l’adresse 98

06 810 BRP 10 Si le drapeau NEG n’esp pas armé, copier 10 dans PC 07 596 LDA 96 Copie la valeur située à l’adresse 96 (0) dans Acc 08 902 OUT Envoie la valeur dans Acc sur le périphérique de sortie 09 612 BRA 12 copie yy dans PC (pour aller à la fin du programme) 10 597 LDA 97 Copie la valeur située à l’adresse 97 (1) dans Acc 11 902 OUT Envoie la valeur dans Acc sur le périphérique de sortie

12 000 HLT Arrêt

. . .

96 000 valeur 0 (pour l’affichage)

97 001 valeur 1 (pour l’affichage)

98 000 stockage du premier nombre

99 000 stockage du deuxième nombre

Avant de simuler l’exécution du programme, remarquons que les adresses 00 à 05 sont identiques à celles de l’exercice 6.1 :

— Les instructions aux adresses 00 et 01 récupèrent un premier nombre sur le port d’entrée et le rangent à l’adresse 99.

— Les instructions aux adresses 02 et 03 récupèrent un second nombre sur le port d’entrée et le rangent à l’adresse 98.

— L’instruction à l’adresse 04 charge dans l’accumulateur le premier nombre

— L’instruction à l’adresse 05 réalise la soustraction premier nombre−deuxième nombre.

C’est précisément cette soustraction qui nous intéresse, puisque :

(22)

— si le premier nombre est supéreur ou égal au second, le résultat de la soustraction sera positif, et le drapeau NEG ne sera pas armé dans le registre S.

— si le premier nombre est inférieur au second, le résultat de la soustraction sera négatif, et le drapeau NEG sera armé dans le registre S.

Traçons l’exécution du programme. Nous allons partir de la situation où l’instruction à l’adresse 5 a été exécutée, en supposant que les nombres lus sur le port d’entrée étaient 45 pour le premier, et 5 pour le second (soit le même exemple que dans la correction précédente).

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 005 99 045

PC 006 298 IR

Acc 040

S

IN (port d’entrée) OUT (port de sortie)

Quelques remarques sur cet état avant de poursuivre :

— Le registre PC contient 006 : on est prêt à exécuter l’instruction à l’adresse 6.

— Le registre IR contient 298 : c’est l’instruction qui vient juste d’être exécutée (la soustrac- tion).

— Le registre Acc contient 040 : c’est le résultat de la soustraction 40−45 qui vient d’être exécutée.

— Le registre d’état S est vide puisque la soustraction a produit un résultat positif.

On entame un nouveau cycle d’exécution : On copie donc dans IR la valeur située à l’adresse indiquée par PC, puis on incrémente PC :

(23)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 005 99 045

PC 007 810 IR

Acc 040

S

IN (port d’entrée) OUT (port de sortie)

Décodage : 810 (BRP 10)signifie que si le registre d’étatne contient pasle drapeau NEG, alors on copie la valeur 10 dans PC.

Exécution : dans notre cas, on constate que le drapeau NEG n’est pas présent dans le registre d’état S, donc on copie la valeur 10 dans PC.

(24)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 005 99 045

PC 010

810 IR Acc 040

S

IN (port d’entrée) OUT (port de sortie)

Cycle suivant : On copie dans IR la valeur présente à l’adresse indiquée par PC (10), plus on incrémente PC :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 005 99 045

PC 011 597 IR

Acc 040

S

IN (port d’entrée) OUT (port de sortie)

(25)

Décodage : 597 (LDA 97) : copier la valeur présente à l’adresse 97 dans l’accumulateur.

Exécution :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 005 99 045

PC 011

IR 597

Acc 001

S

IN (port d’entrée) OUT (port de sortie)

Cycle suivant : charger dans IR l’instruction située à l’adresse désignée par PC, puis incrémenter PC.

(26)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 005 99 045

PC 012 902 IR

Acc 001

S

IN (port d’entrée) OUT (port de sortie)

Décodage : 902 (OUT) : copier la valeur présente dans Acc sur le périphérique de sortie.

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 005 99 045

PC 012 902 IR

Acc 001

S

IN (port d’entrée) OUT (port de sortie) 001

(27)

L’instruction suivante arrêtera le programme. Le comportement attendu du programme s’est donc réalisé : étant donné que 45≥5 on a affiché 1.

Considérons maintenant le cas où le premier nombre est inférieur au second. Par exemple, imaginons que le premier nombre lu sur le périphérique d’entrée est 10 et le deuxième 30.

Supposons qu’on démarre la simulation après l’exécution de l’instruction située à l’adresse 05 (la soustraction). L’état de la machine est alors le suivant :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 030 99 010

PC 006 298 IR

Acc 010

S NEG

IN (port d’entrée) OUT (port de sortie)

Quelques remarques avant d’entamer l’exécution :

— Le registre PC contient 006 : on est prêt à exécuter l’instruction à l’adresse 6.

— Le registre IR contient 298 : c’est l’instruction qui vient juste d’être exécutée (la soustrac- tion).

— Le registre Acc contient 010 : en effet, la soustraction 10−30 a donné un résultat négatif, donc Acc a été laissé tel qu’il était.

— Le registre d’état S contient le drapeau NEG car la soustraction a produit un résultat négatif.

Un nouveau cycle commence : on copie dans IR l’instruction située à l’adresse désignée par PC, puis on incrémente PC :

(28)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 030 99 010

PC 007 810 IR

Acc 010

S NEG

IN (port d’entrée) OUT (port de sortie)

Décodage : 810 (BRP 10) : si le registre d’état S ne contient pas le drapeau NEG, copier la valeur 10 dans le registre PC.

Exécution : ici, le registre d’état NEG contient le drapeau NEG, donc on ne fait rien et on continue.

Un nouveau cycle commence donc : on copie dans IR l’instruction située à l’adresse désignée par PC, puis on incrémente PC.

(29)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 030 99 010

PC 008 596 IR

Acc 010

S NEG

IN (port d’entrée) OUT (port de sortie)

Décodage : 596 (LDA 96) : copier dans l’accumulateur la valeur présente à l’adresse 96 (ici 000).

Exécution :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 030 99 010

PC 008 596 IR

Acc 000

S NEG

IN (port d’entrée) OUT (port de sortie)

(30)

Cycle suivant : on copie dans IR l’instruction située à l’adresse désignée par PC, puis on incrémente PC.

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 030 99 010

PC 009 902 IR

Acc 000

S NEG

IN (port d’entrée) OUT (port de sortie)

Décodage : 902 (OUT) : copier la valeur contenue dans l’accumulateur sur le périphérique de sortie.

Exécution :

(31)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 030 99 010

PC 009 902 IR

Acc 000

S NEG

IN (port d’entrée) OUT (port de sortie) 000

Cycle suivant : on copie dans IR l’instruction située à l’adresse désignée par PC, puis on incrémente PC.

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 030 99 010

PC 010 612 IR

Acc 000

S NEG

IN (port d’entrée) OUT (port de sortie) 000

(32)

Décodage : 612 (BRA 12) : copier la valeur 12 dans le registre PC.

Exécution :

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 030 99 010

PC 012

IR 612

Acc 000

S NEG

IN (port d’entrée) OUT (port de sortie) 000

Cycle suivant : on copie dans IR l’instruction située à l’adresse désignée par PC, puis on incrémente PC.

(33)

Mémoire

00 901 01 399 02 901 03 398 04 599 05 298 06 810 07 596 08 902 09 612 10 597 11 902 12 000 ... ... 96 000 97 001 98 030 99 010

PC 013 000 IR

Acc 000

S NEG

IN (port d’entrée) OUT (port de sortie) 000

Décodage et exécution : arrêt du programme.

Le programme s’est donc bien comporté conformément à nos attentes : 10<30, le pro- gramme a donc envoyé la valeur 0 sur le périphérique de sortie.

Notez qu’à l’adresse 9, au lieu de réaliser un branchement inconditionnel vers l’adresse 12, on aurait aussi pu directement placer une instructionHLT(000). Cependant, et on en reparlera en programmation, il est toujours préférable d’avoir un unique point de fin dans un programme.

Références

Documents relatifs

1) Un magasin en ligne vend des CD au prix de 40 Fr. An d'habituer les consommateurs aux achats sur Internet, il ore un rabais de 50% pour les premiers 8 CD achetes. Le

3- Ne cessant d’améliorer notre commande, nous avons constaté qu’un phénomène d’oscillation de l’eau autour d’un niveau provoque de nombreux démarrage et arrêt

o écrire, en respectant les critères d’évaluation, un texte court expliquant l’expression « Voir loin, c’est voir dans le passé », texte qui sera à rendre sur feuille pour

En B l’action de contact ponctuel entre le plot de maintient et la barrière nommée B de 0 sur 2.. Objectif : déterminer complètement les torseurs des actions mécanique A ,

Exit, voice and loyalty a ainsi pour objectif d’étudier les conditions de développement, conjoint ou non, des deux modes d’action, leur efficacité respective dans

L’objectif du calcul est de vérifier la résistance de la poutre 1. Nom prénom :

Pour jeudi 15/10 Exercice n°5 et 6 p° 38 Vendredi 09/10 Correction des

De la même manière, mais sans l'aide du professeur, observer puis mettre en route le système, et compléter le modèle fonctionnel en réalisant l'exercice 2 de la page 20 de