summaryrefslogtreecommitdiff
path: root/samples/testtout.s
diff options
context:
space:
mode:
authorPixel <>2001-04-17 02:20:40 +0000
committerPixel <>2001-04-17 02:20:40 +0000
commit58dbd2ed918bb9e6f93aed076f8f3de92d41d2f9 (patch)
tree5a0333f391b042c2b25932fdc7fa2daed12140eb /samples/testtout.s
parent17d89e026ee39bd30f8604ab397708d9bceb2fbf (diff)
Grou
Diffstat (limited to 'samples/testtout.s')
-rw-r--r--samples/testtout.s33
1 files changed, 33 insertions, 0 deletions
diff --git a/samples/testtout.s b/samples/testtout.s
new file mode 100644
index 0000000..0c1350e
--- /dev/null
+++ b/samples/testtout.s
@@ -0,0 +1,33 @@
+.data
+PROG1 DS "sommeentiers"
+PROG2 DS "rechcara"
+PROG3 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, 0
+
+.text
+.start
+ MOV R1, R0 ; R1 sera notre compteur de programme
+BOUCLE: MOV R2, PROGS[R0] ; 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], R1 ; On appelle le miniOS pour lui demander
+ ; de charger un autre programme.
+ POP R1 ; Et on récupère R1
+
+ 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