144 lines
1.8 KiB
Plaintext
144 lines
1.8 KiB
Plaintext
|
|
Code en pseudo python à traduire en MVàP
|
|
j = 1
|
|
i = 0
|
|
i = j
|
|
while i < 10:
|
|
i += 1
|
|
print(i)
|
|
|
|
|
|
Pour le début (affectation des variables)
|
|
j = 1
|
|
i = 0
|
|
i = j
|
|
|
|
PUSHI 1 # j adresse 0
|
|
PUSHI 0 # i adresse 1
|
|
PUSHG 0 # récupère j
|
|
STOREG 1 # affecte à i
|
|
|
|
Pour la structure de la boucle While, il suffit de recopier l'exemple du cours.
|
|
|
|
LABEL 0
|
|
# le test qui va laisser une valeur 0 ou 1 en haut de la pile
|
|
JUMPF 1 # saut conditionnel vers le label 1 si le test est Faux sinon continue
|
|
# quelque chose
|
|
JUMP 0
|
|
LABEL 1
|
|
#La suite
|
|
|
|
Il faut qu'on traduise les 3 morceaux de code :
|
|
test,
|
|
corps de la boucle,
|
|
la suite.
|
|
|
|
Le test.
|
|
i < 10
|
|
|
|
PUSHG 1 # valeur de i
|
|
PUSHI 10
|
|
INF
|
|
|
|
Le corps de la boucle.
|
|
i += 1 # même chose que i = i+1
|
|
|
|
PUSHG adresse de i
|
|
PUSHI 1
|
|
ADD
|
|
STOREG adresse de i
|
|
|
|
Comme i habite à l'adresse 1 ça donne ce code.
|
|
|
|
PUSHG 1
|
|
PUSHI 1
|
|
ADD
|
|
STOREG 1
|
|
|
|
la suite.
|
|
print(i)
|
|
|
|
en pratique on récupère i, on utilise WRITE, on fait POP pour nettoyer la pile.
|
|
|
|
PUSHG 1 # adresse de i vaut 1
|
|
WRITE
|
|
POP
|
|
|
|
Solution complète.
|
|
|
|
|
|
PUSHI 1 # j adresse 0
|
|
PUSHI 0 # i adresse 1
|
|
PUSHG 0 # récupère j
|
|
STOREG 1 # affecte à i
|
|
|
|
LABEL 0
|
|
# test
|
|
PUSHG 1
|
|
PUSHI 10
|
|
INF
|
|
JUMPF 1
|
|
#corps boucle
|
|
PUSHG 1
|
|
PUSHI 1
|
|
ADD
|
|
STOREG 1
|
|
JUMP 0
|
|
LABEL 1
|
|
#La suite
|
|
PUSHG 1
|
|
WRITE
|
|
POP
|
|
# Effacer les variables
|
|
POP
|
|
POP
|
|
HALT
|
|
|
|
|
|
|
|
### Autre exercice donné au tableau
|
|
|
|
Expression avec deux variables x et y qu'on demande à l'utilisateur
|
|
|
|
PUSHI 0 # x adresse 0
|
|
PUSHI 0 # y adresse 1
|
|
# demande user val x
|
|
# READ
|
|
PUSHI 10
|
|
STOREG 0
|
|
# demande user val y
|
|
# READ
|
|
PUSHI 3
|
|
STOREG 1
|
|
# calcul de
|
|
# (x+3)*y+4*x
|
|
# Parenthesage egal arbre de syntaxe comme au tableau
|
|
# de base en haut et de gauche à droite on écrit le code MVàP
|
|
# x+3
|
|
PUSHG 0
|
|
PUSHI 3
|
|
ADD
|
|
PUSHG 1
|
|
MUL
|
|
PUSHI 4
|
|
PUSHG 0
|
|
MUL
|
|
ADD
|
|
WRITE
|
|
POP
|
|
# effacer var x et y
|
|
POP
|
|
POP
|
|
HALT
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|