home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 19
/
CD_ASCQ_19_010295.iso
/
dos
/
prg
/
noyau
/
gestfile.asm
< prev
next >
Wrap
Assembly Source File
|
1994-05-25
|
4KB
|
198 lines
; GESTFILE.ASM
;
;.............. fonctions de gestion de files d'attentes ...........
;
; EQUALIZER
;
; Noyau multitache. Chapitre I.
;
;...................................................................
PAGE 60,132
TITLE GESTION DE FILES D'ATTENTE
.MODEL SMALL,OS_DOS
.286
INCLUDE descript.inc ; définition du type DESCRIPTEUR
INCLUDE Etats.inc
.CODE
;
; Fonction d'insertion dans une liste chainée
;
; (DS:BX) : Descripteur à inserer
; (DS:SI) : Cellule de garde de la liste
;
insere PROC NEAR
assume ds:@data
push si
call recherche ; recherche du rang où inserer
call InsereItem ; insère à ce rang
pop si
ret
insere ENDP
;
; Fonction de recherche dans une liste chainée
;
; entrée :
; (DS:BX) : Descripteur à inserer
; (DS:SI) : Cellule de garde de la liste
;
; sortie :
; (DS:SI) : Position d'insertion
;
recherche PROC NEAR
assume ds:@data
push ax
mov al,(DESCRIPTEUR PTR [bx]).priorite
BoucleRecherche:
mov si,(DESCRIPTEUR PTR [si]).suivant ; On prend le suivant dans la liste
cmp al,(DESCRIPTEUR PTR [si]).priorite ; priorité >= ?
jae BoucleRecherche ; oui ! on boucle.
pop ax
ret
recherche ENDP
;
; Fonction de d'insertion dans une liste chainée
;
; entrée :
; (DS:BX) : Descripteur à inserer
; (DS:SI) : Position d'insertion
;
InsereItem PROC NEAR
assume ds:@data
push si
mov si,(DESCRIPTEUR PTR [si]).precedent ; si = précédent
mov (DESCRIPTEUR PTR [si]).suivant,bx ; il pointe sur le nouvel élément
mov (DESCRIPTEUR PTR [bx]).precedent,si ; et est pointé par celui-ci
pop si
mov (DESCRIPTEUR PTR [bx]).suivant,si ; le nouvel élément pointe sur 'si'
mov (DESCRIPTEUR PTR [si]).precedent,bx ; qui à pour précédent 'bx'
ret
InsereItem ENDP
;
; fonction déterminant si la file est vide
;
; entrée : (DS:SI) = cellule de garde de la liste
;
; résultat : ZF = 0 si la liste n'est pas vide
; ZF = 1 si la liste est vide
;
FileVide PROC NEAR
assume ds:@data
cmp si,(DESCRIPTEUR PTR [si]).precedent ; si pointe sur lui-même ?
ret
FileVide ENDP
;
; fonction d'initiation de la file
;
; entrée : (DS:SI) = cellule de garde de la liste
;
InitVide PROC NEAR
assume ds:@data
mov (DESCRIPTEUR PTR [si]).suivant,si ; on fait pointer la cellule
mov (DESCRIPTEUR PTR [si]).precedent,si ; de garde sur elle même
mov (DESCRIPTEUR PTR [si]).Etat,OCCUPE
mov (DESCRIPTEUR PTR [si]).priorite,INFINI
ret
InitVide ENDP
;
; fonction d'extraction
;
; Entrée : (DS:BX) cellule à extraire
;
extrait PROC NEAR
assume ds:@data
push bx
push si
mov si,(DESCRIPTEUR PTR [bx]).precedent ; on fait pointer la cellule
mov bx,(DESCRIPTEUR PTR [bx]).suivant ; précédente sur la cellule
mov (DESCRIPTEUR PTR [si]).suivant,bx ; suivante et vice versa.
mov (DESCRIPTEUR PTR [bx]).precedent,si
pop si
pop bx
ret
extrait ENDP
;
; fonction qui extrait la première cellule de la liste
;
; entrée :
; (DS:SI) Cellule de garde
;
; sortie :
; (DS:BX) cellule extraite
;
PremierDeListe PROC NEAR
assume ds:@data
mov bx,(DESCRIPTEUR PTR [si]).suivant
call extrait
ret
PremierDeListe ENDP
;
; fonction qui extrait la dernière cellule de la liste
;
; entrée :
; (DS:SI) Cellule de garde
;
; sortie :
; (DS:BX) cellule extraite
;
DernierDeListe PROC NEAR
assume ds:@data
mov bx,(DESCRIPTEUR PTR [si]).precedent
call extrait
ret
DernierDeListe ENDP
;
; Procedure EMPILER
;
; Entrée : (DS:SI) Cellule de garde
; (DS:BX) Cellule à empiler
;
empiler PROC NEAR
assume ds:@data
push si
mov si,(DESCRIPTEUR PTR [si]).suivant ; On insère en première
call InsereItem ; position
pop si
ret
empiler ENDP
;
; Procedure DEPILER ( Last In First Out )
;
; Entrée : (DS:SI) Cellule de garde
;
; Sortie : (DS:BX) Cellule dépilée
;
depiler PROC NEAR
assume ds:@data
mov bx,(DESCRIPTEUR PTR [si]).suivant ; On dépile la première
call extrait ; cellule de la file.
ret
depiler ENDP
END