Répétitions de Structure des ordinateurs (2CING)

Séances d'exercices

  • Première série d'exercices : cette série d'exercices aborde les thèmes suivants :

  • les fonctions logiques de base,
  • les représentations des nombres dans différentes bases,
  • la logique séquentielle.
  • Vous pouvez télécharger ici [PDF] l'énoncé de la première séance d'exercices ainsi que le corrigé correspondant pour les questions 4 à 7[PDF]. Voici en outre les corrigés pour ls autres questions: question 1[PDF], question 2[PDF], question 3[PDF], question 8[PDF], question 9[PDF].

    Comme la question 8 semble très difficile à comprendre, voici une transcription de ce qui a été dit au répétitions. Les bascules "D" du montage ne changent d'état QUE lors du flanc montant de l'horloge. Imaginons que les quatre sorties soient à "0". Remarquez d'abord que la sortie de IC12a ne peut être à "0" QUE dans UN SEUL CAS: il faut que ses quatres entrées soient à "1" ce qui sera le cas uniquement si Q0 et Q1 sont à "0" et Q2 et Q3 à "1" (1100 en binaire qui correspond à 12 en décimal). Ici, puisque les 4 sorties sont à 0, IC12a produit un 1 et donc IC7a, IC5b, IC5c et IC5d laissent passer l'autre signal connecté à leur seconde entrée. Vous pouvez donc les oublier dans un premier temps. Lors du flanc montant de l'horloge, Q0 passe à 1 puisqu'un 1 est appliqué à l'entrée D de la bascule (/Q vaut toujours le contraire de Q).

    On veut que Q1 ne change d'état QUE quand Q0 vaut 1, pour obtenir un comptage (0000, 0001, 0010, 0011, 0100, 0101,...). Si Q0 vaut 1, on applique, grâce à IC3b, /Q1 de la seconde bascule à son entrée D: elle change donc bien d'état dans ce cas. Si Q0 vaut 0, par contre, on recopie simplement Q1 dans lui même grâce à IC3a.

    Pour Q2 et Q3, c'est pareil: Q2 change d'état si et seulement si Q1 ET Q0 sont à 1, sinon il reste inchangé et Q3 ne change d'état QUE si Q0, Q1 et Q2 sont à 1, sinon, il ne change pas. Le mot binaire formé par Q3, Q2, Q1 et Q0 prend donc les valeurs décimales 0, 1, 2,... Cela s'arrête à 12. En effet, comme dit plus haut, si la combinaison binaire de Q0..3 vaut 12 (1100 en binaire), IC12a passe à 0 et bloque IC7a, IC5b, IC5c et IC5d qui produisent toutes un 0. Lors du flanc d'horloge suivant, Q0..3 sont alors toutes remises à 0 puisque toutes les entrées D des bascules sont à 0.

  • Deuxième scéance d'exercices : écrire un programme qui calcule le n-ième nombre premier.

    Vous pouvez télécharger ici[PDF] la solution à ce problème.

  • Troisième scéance d'exercices : on voudrait combiner l'exécution d'une instruction LD(Ra,Litt,Rc) et JMP(Ra,Rc) en une seule opération. La nouvelle instruction JMPI(Ra,Litt,Rc) effectuera un saut à l'adresse contenue à l'adresse spécifiée par le contenu de Ra (indirection). L'adresse suivant celle de l'instruction sera transférée dans le registre Rc. On vous demande d'implémenter cette instruction JMPI(Ra,Litt,Rc) pour la machine ULg02 (pour le mode superviseur).

    Vous pouvez télécharger ici[PDF] la solution à ce problème.

  • Travaux

    Premier travail : l'énoncé est disponible ici[PDF].

    Informations utiles

    Vous pouvez télécharger la fiche de caractéristiques d'une ALU 74181. Notez que nous l'utilisons avec des entrées actives hautes, il faut donc regarder la table de gauche page 5. Dans cette table, les fonctions arithmétiques "+" et "-" sont dénotées par plus et minus respectivement. Les opérateurs "classiques" d'addition et de multiplication correspondent respectivement au "ou" et au "et" logique. Les entrées permettant de sélectionner la fonction calculée se nomment ici S0...S3 au lieu de F0...F3. La colonne de droite de cette table suppose l'absence de carry in (Cn), n'oubliez pas d'ajouter 1 si "carry" vaut 1. Notez aussi que l'entrée Cn est complémentée: si Cn=0, "carry" vaut 1 et vice versa (voyez la page 2 de ce datasheet pour quelques explications supplémentaires). Un moyen simple de simuler cette ALU est de simuler le circuit électronique qui l'implémente (page 6). C'est ce qui a été fait dans le programme chipinfo (voir ci-dessous). Attention aussi au drapeau Z qui vaut 1 quand le contenu de l'alu vaut 15 (0xF).

    Vous pouvez télécharger chipinfo ici. C'est un tutoriel qui vous permet d'essayer dynamiquement une ALU 74181, une bascule D et une bascule JK. Ce programme tourne sous DOS (ou dans une boîte DOS sous Windows (PAS XP) ou encore sous DOSEMU ou autre sous LINUX). Bien qu'en mode texte et d'aspect antique, il est très convivial (souris, boîtes de dialogue, menus,...). Sa taille (inférieure à 13Ko!) est telle que vous n'avez aucune excuse pour ne pas l'essayer! Si ce programme vous intéresse, faites le savoir: j'ajouterai des circuits (MUX, DEMUX, etc). Ce programme a été réalisé entièrement en assembleur x86.

    Voici une copie d'écran pour vous montrer à quoi vous attendre:

    Pour réaliser les travaux, un assembleur et un simulateur beta sont à votre disposition sur vos postes de travail habituels. Si vous voulez travailler chez vous, vous pouvez télécharger ici les archives complètes de l'assembleur et du simulateur pour UNIX utilisant la machine maybe ou utiliser ce lien vers un site du MIT ou vous trouverez un assembleur et un simulateur pour WINDOWS.

    Infos pour UNIX maybe: L'assembleur se trouve dans le répertoire maybe/asm (aller dans ce répertoire, faire "make clean" puis "make": l'assembleur "asm" est créé), le simulateur dans le répertoire maybe/maysim et les deux fichiers à inclure dans le programme en assembleur (betainst et convbetainstr) se trouvent dans maybe/beta. Recompilez l'assembleur pour votre machine (selon instructions ci-dessus) et le simulateur (faire "rm *.o" pour enlever les fichiers objets présents dans l'archive puis faire "make -f maysimux.mak": maintenant, le simulateur est prêt).

    Des exemples de programmes beta se trouvent dans le répertoire maybe/beta (essayez par exemple betafib.asm). Pour essayer ce programme, faire: "xbetasim -rd../beta/betafib.asm.hex". L'option "-rd" permet de charger la DRAM avec le code exécutable. Le script "xbetasim" est en fait un appel au simulateur "maysim" avec le chargement dans maysim de l'émulateur BETA (en effet, maysim est un simulateur pour la machine MAYBE, que vous ne connaissez pas).

    En fait, la SRAM de la machine MAYBE est utilisée pour stocker les registres de la BETA. Les 32 registres de la machine BETA se trouvent aux adresses 0x20 à 0x9f. Vous constaterez que R0 et R30 ont bien été modifiés par l'exécution du programme d'exemple "test.asm", qui se trouve dans le répertoire "beta" et que je vous conseille vivement d'essayer dans le simulateur. A titre d'exercice, retrouvez le registre PC de la BETA dans la mémoire statique de la MAYBE.

    Pour rappel, on ouvre une nouvelle fenêtre avec "Ctrl-o" puis "s" ou "d" pour SRAM ou DRAM. Pour toute aide supplémentaire, appuyez sur F1 dans le simulateur.

    N'oubliez pas que si vous incluez un fichier (par exemple le fichier contenant la définition des instructions BETA: "betainstr"), il doit être accessible, sinon, l'assembleur ne le trouvera pas! Donc, par exemple, si vous voulez assembler "test.asm", vous devrez le faire dans le répertoire "beta", où se trouve "betainstr": dans "beta", faire "../asm/asm test.asm".

    Voici une récapitulation des commandes à exécuter pour utiliser l'assembleur et le simulateur:

    ms815:~> unzip maybe.zip
    Archive: maybe.zip
    creating: maybe/asm/
    inflating: maybe/asm/asm.c
    inflating: maybe/asm/asm
    ...
    extracting: maybe/maysim/xbetasim
    inflating: maybe/maysim/xbetafibsim
    inflating: maybe/maysim/xbetafibusersim
    inflating: maybe/maysim/xbetadebug
    ms815:~> cd maybe/asm
    ms815:~/maybe/asm> make clean
    rm -f *~
    rm -f *.o
    ms815:~/maybe/asm> make
    gcc -c -o ev.o ev.c
    gcc asm.c ev.o -o asm
    ms815:~/maybe/asm> cd ../maysim/
    ms815:~/maybe/maysim> rm *.o
    ms815:~/maybe/maysim> make -f maysimux.mak
    gcc -g -ansi -c maysim.c -o maysim.o
    In file included from maysim.c:19:
    maywin.h:16: warning: `struct WinStr' declared inside parameter list
    maywin.h:16: warning: its scope is only this definition or declaration, which is probably not what you want.
    ...
    maywin.h:17: warning: `struct WinStr' declared inside parameter list
    gcc -g maysim.o machine.o display.o maywin.o memwin.o mayfile.o \
    hard.o regs.o uart.o sram.o dram.o ctlrom.o microrom.o -o maysim \
    -lcurses -ltermcap
    ms815:~/maybe/maysim>

    A ce stade, tout est prêt pour les expérimentations décrites plus haut.

    Bon travail!

    Infos pour WINDOWS bsim: l'assembleur s'appelle uasm.exe et le simulateur bsim.exe.

    Vous pouvez télécharger les informations concernant la machine beta : les instructions[PDF] et un petit résumé[PDF] succint.

    Nous vous conseillons d'utiliser ces programmes chez vous (ils sont compilables sur toutes les plateformes courantes) mais vous aurez accès aux machines de Montéfiore.

    Exemples de questions d'examen:

  • Janvier 2003
  • Juin 2003

  • Dernière modification : 4 décembre 2003

    Hugues Smeets