/** * 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++; } } }