summaryrefslogtreecommitdiff
path: root/samples/testtout.s
blob: 2287a4d9c7d2dcdbb28b992baaac0c6b58712fcb (plain)
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