/**
* Un programme dans notre « assembleur » (langage machine) qui utilise
* la pile « machine ». Celle-ci est implémentée dans la mémoire à
* la manière de ce qui est fait dans le programme Pile.java.
* La mémoire est elle-même divisée en deux parties : la zone des variables
* statiques, et la zone réservée à la pile.
*
* Exercice : implémenter les opérations push/pop pour la pile machine et
* réécrire le code en les utilisant.
*
* Exercice : abstraire le code, en utilisant une constante entière dont
* la valeur sera l'adresse de début de la pile dans la mémoire, et une autre
* qui sera l'adresse de début de la zone des variables statiques. Modifier en
* conséquence le code de sorte que les accès à la mémoire soient tous
* indexés via l'une ou l'autre de ces constantes...
*/
public class s3 {
public static void main(String []a) {
// i:0, j:1 ; les variables statiques sont en tout début de mémoire
// 2..101 : la pile ; la pile commence à partir de la case n°2
int []memoire = new int[2+100];
int instructionCourante = 1;
boolean fin = false;
int sommetDePile = 2; // adresse du début de la pile
while (!fin) {
switch(instructionCourante) {
case 1: // i = 13
memoire[0] = 13;
break;
case 2: // push(i)
memoire[sommetDePile] = memoire[0];
sommetDePile++;
break;
case 3: // j = pop();
sommetDePile--;
memoire[1] = memoire[sommetDePile];
break;
case 4: // affiche j
System.out.println(memoire[1]);
break;
case 5:
fin = true;
break;
}
instructionCourante++;
}
}
}