
2.2 Environnement de travail
Toujours afin de nous simplifier la vie, nous avons édité le script python interprétant le lan-
gage en lui donnant en paramètre un booléen indiquant l’activation ou non d’un mode debug.
Nous avons ainsi pu voir, à chaque instruction, l’état des registres, du début de la mémoire
et du début de la pile :
REGIS T E R S = [( R0 = 475); ( R1 = 897); (R2 = 988); (R3 = 776); (R4 = 884); (R5 = 30 9 ) ; ( R6 = 639); (R7 = 761); (R8 = 751); ...]
STACK = [132; 328; 869; 922; 207; 623; 995; 490; 986; 373; 933; 669; 626; 914; 252; 654; 541; 505; 530; 437; 648; 527; ...]
MEMORY = [679; 577; 776; 105; 16; 11; 804; 787; 34; 353; 790; 92; 509; 270; 609; 309; 483; 653; 528; 882; 342; 942; 37; ...]
COMMAND = XOR R 29 R 29 R29 # R29 = 0
REGIS T E R S = [( R0 = 475); ( R1 = 897); (R2 = 988); (R3 = 776); (R4 = 884); (R5 = 30 9 ) ; ( R6 = 639); (R7 = 761); (R8 = 751); ...]
STACK = [132; 328; 869; 922; 207; 623; 995; 490; 986; 373; 933; 669; 626; 914; 252; 654; 541; 505; 530; 437; 648; 527; ...]
MEMORY = [679; 577; 776; 105; 16; 11; 804; 787; 34; 353; 790; 92; 509; 270; 609; 309; 483; 653; 528; 882; 342; 942; 37; ...]
C OMMAND = A DDi R 30 R 29 6 55 3 5 # S P = 2 ^1 6 - 1 ( e nd o f memory )
REGIS T E R S = [( R0 = 475); ( R1 = 897); (R2 = 988); (R3 = 776); (R4 = 884); (R5 = 30 9 ) ; ( R6 = 639); (R7 = 761); (R8 = 751); ...]
STACK = [132; 328; 869; 922; 207; 623; 995; 490; 986; 373; 933; 669; 626; 914; 252; 654; 541; 505; 530; 437; 648; 527; ...]
MEMORY = [679; 577; 776; 105; 16; 11; 804; 787; 34; 353; 790; 92; 509; 270; 609; 309; 483; 653; 528; 882; 342; 942; 37; ...]
COMMAND = A D Di R28 R 29 1 # R28 = 1 (not to be repe a t e d in loops for i n stru c t i ons t h a t don ’ t handle i mmed i a t e s ( JEQU ...))
REGIS T E R S = [( R0 = 475); ( R1 = 897); (R2 = 988); (R3 = 776); (R4 = 884); (R5 = 30 9 ) ; ( R6 = 639); (R7 = 761); (R8 = 751); ...]
STACK = [132; 328; 869; 922; 207; 623; 995; 490; 986; 373; 933; 669; 626; 914; 252; 654; 541; 505; 530; 437; 648; 527; ...]
MEMORY = [679; 577; 776; 105; 16; 11; 804; 787; 34; 353; 790; 92; 509; 270; 609; 309; 483; 653; 528; 882; 342; 942; 37; ...]
COMMAND = ST R 2 9 R30 # We push @ T = 0 on the s t a c k
REGIS T E R S = [( R0 = 475); ( R1 = 897); (R2 = 988); (R3 = 776); (R4 = 884); (R5 = 30 9 ) ; ( R6 = 639); (R7 = 761); (R8 = 751); ...]
STACK = [0; 328; 869; 922; 207; 623; 995; 490; 986; 373; 933; 669; 626; 914; 252; 654; 541; 505; 530; 437; 648; 527; 542; ...]
MEMORY = [679; 577; 776; 105; 16; 11; 804; 787; 34; 353; 790; 92; 509; 270; 609; 309; 483; 653; 528; 882; 342; 942; 37; ...]
COMMAND = S U B i R 30 R30 1 # SP --
REGIS T E R S = [( R0 = 475); ( R1 = 897); (R2 = 988); (R3 = 776); (R4 = 884); (R5 = 30 9 ) ; ( R6 = 639); (R7 = 761); (R8 = 751); ...]
STACK = [0; 328; 869; 922; 207; 623; 995; 490; 986; 373; 933; 669; 626; 914; 252; 654; 541; 505; 530; 437; 648; 527; 542; ...]
MEMORY = [679; 577; 776; 105; 16; 11; 804; 787; 34; 353; 790; 92; 509; 270; 609; 309; 483; 653; 528; 882; 342; 942; 37; ...]
COMMAND = CALL p a r s e I n # Pr o c e d ure t h a t reads the file a nd s t o r e s its cont e n t into T
REGIS T E R S = [( R0 = 475); ( R1 = 897); (R2 = 988); (R3 = 776); (R4 = 884); (R5 = 30 9 ) ; ( R6 = 639); (R7 = 761); (R8 = 751); ...]
STACK = [0; 328; 869; 922; 207; 623; 995; 490; 986; 373; 933; 669; 626; 914; 252; 654; 541; 505; 530; 437; 648; 527; 542; ...]
MEMORY = [679; 577; 776; 105; 16; 11; 804; 787; 34; 353; 790; 92; 509; 270; 609; 309; 483; 653; 528; 882; 342; 942; 37; ...]
Figure 2 – Exemple d’environnement de debug
2.3 Gestion des registres
Nous avons défini les registres en trois grandes catégories :
– Les registres "réservés" : ces registres ne doivent absolument pas être altérés autrement
que pour la fonction qui leur a été attribuée au début du programme. On distingue :
– R31 : compteur ordinal, pointe sur la prochaine instruction à exécuter. Défini au niveau
de l’interprète Python.
– R30 : pointeur de pile, pointe sur la première case libre de la pile (sauf cas particuliers
définis dans la sous-section suivante).
– R29 : zéro. Permet de faciliter l’initialisation des constantes et les tests d’égalité entre
registres.
– Les registres "globaux" : ces registres ne doivent pas être modifiés au cours du programme.
Ils contiennent des constantes (par exemple, les codes ASCII de l’espace, du tiret...) et
évitent leur redéfinition au sein par exemple d’une fonction récursive.
5