-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTACHE1.asm
145 lines (132 loc) · 4.59 KB
/
TACHE1.asm
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
data SEGMENT
msg1 db "deroutement fait....",10,"$"
msg2 db 10,"**** Debut du quantum de temps logiciel **** ","$"
msg3 db "1 sec ",130,"coul",130,"e...... ","$"
msg4 db "1 sec ",130,"coul",130,"e......","$"; on affiche c emessage quand on est situ?s juste apres le msg 2;
; il est different du message 3 car il ne contient pas d'espace a la fin ;
; on a enlev? l'espace pour qu il ne cause pas de probleme car on va appeller la proc saut juste apres (dans 1CH);
msg_saut db 10 , 13 ,"$"
compt db 19
data ENDS
code SEGMENT
assume CS:code, DS: data
; ---------------------------------------------- ;
; cette proc fait le deroutement de 1Ch ;
; ---------------------------------------------- ;
derout_1CH PROC NEAR
derout: mov ax , seg new
mov ds , ax
mov dx , offset new
mov ax , 251CH
int 21H
mov cx , 1
ret
derout_1CH ENDP
; ---------------------------------------------- ;
; cette proc fait l'affichage du 1er msg ;
; ---------------------------------------------- ;
affiche1 PROC NEAR
mov ax, data
mov ds , ax
mov dx , offset msg1
mov ah , 09h
int 21h
ret
affiche1 endp
; ---------------------------------------------- ;
; cette proc fait l'affichage du 2eme msg ;
; ---------------------------------------------- ;
affiche2 PROC NEAR
mov ax, data
mov ds , ax
mov dx , offset msg2
mov ah , 09h
int 21h
ret
affiche2 endp
; ---------------------------------------------- ;
; cette proc fait l'affichage de l espace ;
; ---------------------------------------------- ;
affiche4 PROC NEAR
mov ax, data
mov ds , ax
mov dx , offset msg4
mov ah , 09h
int 21h
ret
affiche4 endp
; ---------------------------------------------- ;
; cette proc fait l'affichage du 3eme msg ;
; ---------------------------------------------- ;
affiche3 PROC NEAR
mov ax, data
mov ds , ax
mov dx , offset msg3
mov ah , 09h
int 21h
ret
affiche3 endp
; ---------------------------------------------- ;
; cette proc fait le saut a la ligne ;
; ---------------------------------------------- ;
saut PROC NEAR
mov ax, data
mov ds , ax
mov dx , offset msg_saut
mov ah , 09h
int 21h
ret
saut endp
; ---------------------------------------------- ;
; nouveau code de la routine 1CH : ;
; le compteur est set a 18 dans le data seg ;
; le compteur est dec a chaque fois que le timer appelle l'int 1CH ;
; si le compteur est different de 0 on sort de l'int ;
; sinon on continue :;
; on compare cx avec 1 pour savoir si on est situ?s juste pres le message 2 ( debut de qtm) ;
; dans le cas ou on est apres le debut de qtm il va falloir afficher 1 sec ecoul?e (du message 4) et faire un saut de ligne si ;
; sinon dans le cas ou on n'est pas apres le message 2: ;
; on affiche le messag 1 sec ecoulee( du message 3) ;
; puis on verifie si le cx est egal a zero ;
; dans le cas ou il l'est cela voudrait dire qu on est arriv?s a la fin de la ligne ( la ligne peut comporter au max 4 msgs (1 sec ecoulee......);
; on va donc faire un aut de ligne et r?initialiser cx a 4 ;
; sinon ( cas cx <> 0 on cela voudrait dire qu'il y a encore de l espace dans la ligne on va donc dec cx et on ne fera donc pas de saut de ligne ; ;
; ---------------------------------------------- ;
new: mov ax, seg compt
mov ds , ax
dec compt
jnz fin
cmp cx ,1
jnz Ms_3
call NEAR PTR affiche4
jmp suite1
Ms_3: call NEAR PTR affiche3
suite1: loop suite2
call NEAR PTR saut
mov cx , 4
suite2: mov compt , 18
fin: iret
; ---------------------------------------------- ;
; Programme principal ;
; on sauvgarde l'int 1CH ;
; on affiche le 1er msg ( deroutement fait ) hors boucle ;
; contenu de la boucle : ;
; affichage du msg de debut de qtm ;
; appel qu deroutement de 1cH ;
; decrementation de SI 454 fois ce qui est proche 20*18 ( le nombre de retour a notre boucle avant l'affichage du debut de qtm);
; quand SI sera egal a zero on aura afficher 20 fois me message (1 sec ecoulee......) ;
; on fera alors un jmp au debut de la boucle pour refaire ces etapes ;
; ---------------------------------------------- ;
start:
call NEAR PTR affiche1
externe: call NEAR PTR affiche2
call NEAR PTR derout_1CH
mov si,454
mov bp, 0
interne:dec bp
jnz interne
dec si
jnz interne
jmp externe
code ENDS
END start