home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / noyau / gestfile.asm < prev    next >
Assembly Source File  |  1994-05-25  |  4KB  |  198 lines

  1. ; GESTFILE.ASM
  2. ;
  3. ;.............. fonctions de gestion de files d'attentes ...........
  4. ;
  5. ;                   EQUALIZER
  6. ;
  7. ;             Noyau multitache. Chapitre I.
  8. ;
  9. ;...................................................................
  10.  
  11. PAGE 60,132
  12. TITLE GESTION DE FILES D'ATTENTE
  13.  
  14. .MODEL SMALL,OS_DOS
  15. .286
  16.  
  17. INCLUDE descript.inc    ; définition du type DESCRIPTEUR
  18. INCLUDE Etats.inc
  19.  
  20. .CODE
  21.  
  22.  
  23. ;
  24. ; Fonction d'insertion dans une liste chainée
  25. ;
  26. ; (DS:BX)   : Descripteur à inserer
  27. ; (DS:SI)   : Cellule de garde de la liste
  28. ;
  29.  
  30. insere PROC NEAR
  31.     assume ds:@data
  32.     push    si
  33.     call    recherche        ; recherche du rang où inserer
  34.     call    InsereItem        ; insère à ce rang
  35.     pop     si
  36.     ret
  37. insere ENDP
  38.  
  39.  
  40. ;
  41. ; Fonction de recherche dans une liste chainée
  42. ;
  43. ; entrée :
  44. ; (DS:BX)   : Descripteur à inserer
  45. ; (DS:SI)   : Cellule de garde de la liste
  46. ;
  47. ; sortie :
  48. ; (DS:SI)   : Position d'insertion
  49. ;
  50. recherche PROC NEAR
  51.     assume ds:@data
  52.     push    ax
  53.     mov     al,(DESCRIPTEUR PTR [bx]).priorite
  54. BoucleRecherche:
  55.     mov     si,(DESCRIPTEUR PTR [si]).suivant    ; On prend le suivant dans la liste
  56.     cmp     al,(DESCRIPTEUR PTR [si]).priorite    ; priorité >= ?
  57.     jae       BoucleRecherche            ; oui ! on boucle.
  58.     pop     ax
  59.     ret
  60. recherche ENDP
  61.  
  62.  
  63.  
  64. ;
  65. ; Fonction de d'insertion dans une liste chainée
  66. ;
  67. ; entrée :
  68. ; (DS:BX)   : Descripteur à inserer
  69. ; (DS:SI)   : Position d'insertion
  70. ;
  71. InsereItem PROC NEAR
  72.     assume ds:@data
  73.     push    si
  74.     mov     si,(DESCRIPTEUR PTR [si]).precedent ; si = précédent
  75.     mov     (DESCRIPTEUR PTR [si]).suivant,bx    ; il pointe sur le nouvel élément
  76.     mov     (DESCRIPTEUR PTR [bx]).precedent,si ; et est pointé par celui-ci
  77.     pop     si
  78.     mov     (DESCRIPTEUR PTR [bx]).suivant,si    ; le nouvel élément pointe sur 'si'
  79.     mov     (DESCRIPTEUR PTR [si]).precedent,bx ; qui à pour précédent 'bx'
  80.     ret
  81. InsereItem ENDP
  82.  
  83.  
  84. ;
  85. ;   fonction déterminant si la file est vide
  86. ;
  87. ;   entrée : (DS:SI) = cellule de garde de la liste
  88. ;
  89. ;   résultat :    ZF = 0     si la liste n'est pas vide
  90. ;        ZF = 1     si la liste est vide
  91. ;
  92. FileVide PROC NEAR
  93.     assume ds:@data
  94.     cmp     si,(DESCRIPTEUR PTR [si]).precedent ; si pointe sur lui-même ?
  95.     ret
  96. FileVide ENDP
  97.  
  98. ;
  99. ;   fonction d'initiation de la file
  100. ;
  101. ;   entrée : (DS:SI) = cellule de garde de la liste
  102. ;
  103. InitVide PROC NEAR
  104.     assume ds:@data
  105.     mov     (DESCRIPTEUR PTR [si]).suivant,si    ; on fait pointer la cellule
  106.     mov     (DESCRIPTEUR PTR [si]).precedent,si ; de garde sur elle même
  107.     mov     (DESCRIPTEUR PTR [si]).Etat,OCCUPE
  108.     mov     (DESCRIPTEUR PTR [si]).priorite,INFINI
  109.  
  110.     ret
  111. InitVide ENDP
  112.  
  113.  
  114. ;
  115. ;   fonction d'extraction
  116. ;
  117. ; Entrée : (DS:BX) cellule à extraire
  118. ;
  119. extrait PROC NEAR
  120.     assume ds:@data
  121.     push    bx
  122.     push    si
  123.     mov     si,(DESCRIPTEUR PTR [bx]).precedent ; on fait pointer la cellule
  124.     mov     bx,(DESCRIPTEUR PTR [bx]).suivant    ; précédente sur la cellule
  125.     mov     (DESCRIPTEUR PTR [si]).suivant,bx    ; suivante et vice versa.
  126.     mov     (DESCRIPTEUR PTR [bx]).precedent,si
  127.     pop     si
  128.     pop     bx
  129.     ret
  130. extrait ENDP
  131.  
  132. ;
  133. ;   fonction qui extrait la première cellule de la liste
  134. ;
  135. ; entrée :
  136. ; (DS:SI) Cellule de garde
  137. ;
  138. ; sortie :
  139. ; (DS:BX) cellule extraite
  140. ;
  141. PremierDeListe PROC NEAR
  142.     assume ds:@data
  143.     mov     bx,(DESCRIPTEUR PTR [si]).suivant
  144.     call    extrait
  145.     ret
  146. PremierDeListe ENDP
  147.  
  148. ;
  149. ;   fonction qui extrait la dernière cellule de la liste
  150. ;
  151. ; entrée :
  152. ; (DS:SI) Cellule de garde
  153. ;
  154. ; sortie :
  155. ; (DS:BX) cellule extraite
  156. ;
  157. DernierDeListe PROC NEAR
  158.     assume ds:@data
  159.     mov     bx,(DESCRIPTEUR PTR [si]).precedent
  160.     call    extrait
  161.     ret
  162. DernierDeListe ENDP
  163.  
  164.  
  165. ;
  166. ;   Procedure EMPILER
  167. ;
  168. ;   Entrée : (DS:SI) Cellule de garde
  169. ;         (DS:BX) Cellule à empiler
  170. ;
  171.  
  172. empiler PROC NEAR
  173.     assume ds:@data
  174.     push    si
  175.     mov     si,(DESCRIPTEUR PTR [si]).suivant    ; On insère en première
  176.     call    InsereItem                ; position
  177.     pop     si
  178.     ret
  179. empiler ENDP
  180.  
  181.  
  182.  
  183. ;
  184. ;   Procedure DEPILER ( Last In First Out )
  185. ;
  186. ;   Entrée : (DS:SI) Cellule de garde
  187. ;
  188. ;   Sortie : (DS:BX) Cellule dépilée
  189. ;
  190. depiler PROC NEAR
  191.     assume ds:@data
  192.     mov     bx,(DESCRIPTEUR PTR [si]).suivant    ; On dépile la première
  193.     call    extrait                ; cellule de la file.
  194.     ret
  195. depiler ENDP
  196.  
  197. END
  198.