Mettre tout ensemble
générer du code mmixal pour un ``langage'' simple
- Liste d'entiers
- Les imprimer (seulement pour tester)
- Code généré au niveau du programme
- Code généré pour chaque entier
Expressions
arithmétiques
- Calculer chaque sous-expression dans un registre
- Décider quel registre (attribut hérité ou
pile)
- Code pour un entier
- Code pour une expression
- Code pour une instruction
Variables et
Affectations arithmétiques
- (Pour maintenant) variables seront d'une lettre majuscule
- Stockées en mémoire selon allocation
prédéterminée
- Trouver l'adresse en mmixal
- Code pour une utilisation d'une variable
- Code pour une affectation (avec affichage)
EXPRESSIONS BOOLEENNES
Calcul des valeurs booléennes (pas forcément 0/1!)
par comparaison de deux valeurs arithmétiques
CMP, suivi de
- JMP/SET ou
- opérations arithmétiques ou logiques (pages 10) ou
- instructions CS ou ZS
- un deuxième CMP
Expressions plus compliquées par AND/OR etc. nécessitent
que le code pour une comparaison peut faire le calcul dans
n'importe quel registre
Les Boucles
Code simple pour boucles while et repeat normales
L1 Expression.code
BZ Expression.place, L2
Instruction.code
JMP L1
L2
et
L1
Instruction.code
Expression.code
PBP Expression.place, L1
Le deuxième est plus court et plus efficace!
Pareil pour les if-then et les if-then-else ...
Les étiquettes
Il faut une fonction qui génère des étiquettes
uniques
Et une méthode de placer la bonne étiquette (une seule)
sur une instruction du code généré
peut-être un attribut ``etiquette'' de chaque expression et
instruction (source)
et un attribut hérité (?) signalant si l'étiquette
doit
être émise
COMMENT FAIRE MIEUX
Presque toujours une expression booléenne est
évaluée pour
être utilisée immédiatement dans la décision
d'une if
ou d'une boucle
donc, pas besoin de calculer la vraie forme booléenne (0/1 ou
autre)
quand la valeur est connue, aller directement à une
étiquette
nécessite des attributs hérités pour
l'étiquette appropriée
si la valeur est positive/négative
facilement traité par une pile
File translated from
TEX
by
TTH,
version 3.05.
On 22 Mar 2005, 13:18.