This is an old revision of the document!


Devoir 1 - Simulateur

Information

Deadline: le 21 Mars, 23:55 Points: 1 point de la note finale Link: Téléchargement tardif: 1p/jour (maximum 2 jours)

Objectifs

Le but de ce travail est de vous familiariser avec les concepts suivants:

  1. développement de base de TypeScript
  2. utilisation de structures de données dans TypeScript
  3. utilisation des paramètres de la ligne de commande
  4. lecture de données à partir de fichiers
  5. division et traitement de chaînes
  6. le mode de fonctionnement d'un processeur simple

Description du devoir

Le but de ce devoir est de simuler un CPU. Il s'agit d'un processeur très simple, qui a un registre, appelé R, et un espace de pile infini, appelé STACK. Le CPU effectue tous les calculs en utilisant des nombres entiers signés. Il ne sait pas comment gérer les nombres à virgule flottante.

Ensemble d'instructions

L'ensemble d'instructions est divisé en cinq catégories d'instructions:

  1. Aucune action - ces instructions n'effectuent aucune action
  2. Memory - ces instructions permettent au CPU d'interagir avec la pile (la mémoire)
  3. Math - ces instructions permettent au CPU d'effectuer des opérations mathématiques
  4. Flow - ces instructions permettent au CPU d'effectuer des if et des boucles
  5. Pseudo Debug - ces instructions sont utilisées pour le débogage
Instruction Paramètres Description Exemple
No Action
nop pas de paramètres Elle ne fait rien, en étant utilisée seulement pour les commentaires
 nop
 
Memory
push numéro entier Elle ajoute le paramètre dans la pile
 ; la pile est [ ]
 push 1 
 ; la pile est [ 1 ]
 push 2
 ; la pile est [ 1 2 ]
 
pop - Elle extrait un nombre de la pile; en d'autres termes, il supprime un nombre de la pile
 ; la pile est [ 1 2 ]
 pop 
 ; la pile est [ 1 ]
 
load - Elle extrait un nombre de la pile et le stocke dans R (le registre du processeur)
 ; la pile est [ 1 2 ]
 load 
 ; la pile est [ 1 ]
 ; R est 2
 
store - Elle ajoute le nombre de R (le registre du processeur) dans la pile
 ; la pile est [ 1 ]
 ; R est 2
 store 
 ; la pile est [ 1 2 ]
 ; R est 2
 
Math
add - Elle extrait deux nombres de la pile, fait l'addition, et ajoute le résultat à la pile
 push 1 
 push 2
 ; la pile est [ 1 2 ]
 add 
 ; la pile est [ 3 ]
 
sub - Elle extrait deux nombres de la pile, fait la soustraction, et ajoute le résultat à la pile
 push 1 
 push 2
 ; la pile est [ 1 2 ]
 sub 
 ; la pile est [ -1 ]
 
mul - Elle extrait deux nombres de la pile, fait la multiplication, et ajoute le résultat à la pile
 push 1 
 push 2
 ; la pile est [ 1 2 ]
 mul 
 ; la pile est [ 2 ]
 
div - Elle extrait deux nombres de la pile, fait la division en utilisant une division entière et ajoute le résultat à la pile
 push 1 
 push 2
 ; la pile est [ 1 2 ]
 div 
 ; la pile est [ 0 ]
 
mod - Elle extrait deux nombres de la pile, calcule le reste de leur division et ajoute le résultat à la pile
 push 5 
 push 3
 ; la pile est [ 5 3 ]
 mod 
 ; la pile est [ 2 ]
 
Flow
jump numéro entier / étiquette Au lieu d'exécuter l'instruction suivante, la CPU prendra l'instruction: a) au numéro de ligne spécifié comme paramètre or b) de l'étiquette spécifié par le paramètre
 ; exemple avec la ligne 
 push 5 ; line 1
 jump 5 ; line 2
 push 3 ; line 3 - ignoré
 push 2 ; line 4 - ignoré
 push 2 ; line 5 - jump ici
 mul
 ; la pile est [ 10 ] 
 ; exemple avec étiquette
 push 5 
 jump two 
 push 3 ; ignoré
 push 2 ; ignoré
 two: push 2 ; label two
 mul
 ; la pile est [ 10 ]
 
jumpz numéro entier / étiquette Si la valeur supérieure de la pile est zéro, cela fonctionne de la même manière que jump, sinon cela ne fait rien
 ; example ignore
 push 5  
 jumpz two ; ignoré, le sommet de la pile est 5
 push 3 
 push 3 
 two: push 2 
 mul
 ; la pile est [ 5 3 6 ] 
 ; example jump
 push 0  
 jumpz two ; saute, le sommet de la pile est 0
 push 3 ; ignoré
 push 3 ; ignoré
 two: push 2 
 mul
 ; la pile est [ 0 ]
 
jumpnz numéro entier / étiquette Si la valeur du sommet de la pile n'est pas zéro, cela fonctionne de la même manière que jump, sinon cela ne fait rien
 ; example ignore
 push 5  
 jumpz two ; jumps, le sommet de la pile n'est pas 0
 push 3 ; ignoré
 push 3 ; ignoré
 two: push 2 
 mul
 ; la pile est [ 10 ] 
 ; example jump
 push 0  
 jumpz two ; ignoré, le sommet de la pile est 0
 push 3 
 push 3 
 two: push 2 
 mul
 ; la pile est [ 0 3 6 ]
 
Pseudo Debug
print - Affiche le numéro du sommet de la pile
 ; la pile est [ 1 2 ]
 print ; affiche 2
 
stack - Affiche la pile
 ; la pile est [ 1 2 ]
 stack ; imprime [ 1 2 ]
 
alf/teme/tema_1.1615059984.txt.gz · Last modified: 2021/03/06 21:46 by diana.ghindaoanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0