1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
.data
PROG1 DS "helloworld"
PROG2 DS "hello"
PROG3 DS "sommeentiers"
PROG4 DS "rechcara"
PROG5 DS "recherche"
MSG1 DS "Exécution du programme numéro "
MSG2 DS " appelé "
MSG3 DS "...\n"
MSGTERM DS "Le programme s'est terminé!\n"
MSGFIN DS "Tout est terminé, bye!\n"
PROGS DD PROG1, PROG2, PROG3, PROG4, PROG5, 0
.text
.start
MOV R1, R0 ; R1 sera notre compteur de programme
BOUCLE: MOV R2, PROGS[R1] ; On lit l'adresse du nom du prochain programme
JE R2, R0, FIN ; Si c'est l'adresse nulle, on sort
MOV, [0xffffff04], MSG1 ; On affiche le premier morceau de la chaîne
MOV, [0xffffff06], R1 ; On affiche le numéro du programme
MOV, [0xffffff04], MSG2 ; On affiche le deuxième morceau de la chaîne
MOV, [0xffffff04], R2 ; On affiche le nom du programe
MOV, [0xffffff04], MSG3 ; On affiche la dernière chaîne
PUSH R1 ; On sauvegarde R1 avant
MOV, [0xffffff0a], R2 ; On appelle le miniOS pour lui demander
; de charger un autre programme.
POP R1 ; On récupère R1, ...
ADD R1, 1 ; .. et on l'incrémente.
MOV, [0xffffff04], MSGTERM ; On affiche la chaîne pour dire que l'on vient de sortir
JMP BOUCLE ; et on boucle
FIN: MOV, [0xffffff04], MSGFIN ; On affiche en dernier le message de fin.
HALT
|