Interruption 25h: Lecture absolue
Cette interruption permet d'effectuer une lecture de façon absolue sur une unité de disque logique géré par le système d'exploitation.
Entrée
Registre | Description | ||||
---|---|---|---|---|---|
AL | Ce registre permet d'indiquer l'unité de disque logique : | ||||
Valeur | Description | ||||
0 | A: | ||||
1 | B: | ||||
2 | C: | ||||
3 | D: | ||||
4 | E: | ||||
5 | F: | ||||
6 | G: | ||||
7 | H: | ||||
8 | I: | ||||
9 | J: | ||||
10 | K: | ||||
11 | L: | ||||
12 | M: | ||||
13 | N: | ||||
14 | O: | ||||
15 | P: | ||||
16 | Q: | ||||
17 | R: | ||||
18 | S: | ||||
19 | T: | ||||
20 | U: | ||||
21 | V: | ||||
22 | W: | ||||
23 | X: | ||||
24 | Y: | ||||
25 | Z: | ||||
CX | Ce registre permet d'indiquer la fonction étendue ou le nombre de secteur à lire : | ||||
Valeur | Description | ||||
1 à FFFEh | Ces valeurs permettent d'indiquer le nombre de secteur à lire. | ||||
FFFFh | Cette valeur permet d'indiquer le mode de position et du tampon destinataire pour les unités de disque logique de taille supérieur à 32 Mo, dans ce cas : | ||||
Registre | Description | ||||
DS:BX | Cette paire de registres permet d'indiquer l'adresse de la structure d'information : | ||||
Déplacement | Longueur | Description | |||
00h | 4 octets | Ce champ permet d'indiquer le numéro du secteur | |||
04h | 2 octets | Ce champ permet d'indiquer le nombre de secteur à lire | |||
06h | 4 octets | Ce champ permet d'indiquer l'adresse du tampon recevant les données | |||
DX | Ce registre permet d'indiquer le premier secteur à lire. | ||||
DS:BX | Cette paire de registres permet d'indiquer le tampon recevant les données si CX n'est pas égale à FFFFh. |
Sortie
Drapeau | Valeur | Description | |||
---|---|---|---|---|---|
CF | 0 | Tous va bien | |||
1 | Erreur, dans ce cas : | ||||
Registre | Description | ||||
AX | Code d'erreur : | ||||
Valeur | Description | ||||
01h | Cette valeur permet d'indiquer que l'instruction est invalide | ||||
02h | Cette valeur indique la marque d'adresse n'est pas valide | ||||
04h | Cette valeur indique que le secteur est introuvable | ||||
08h | Cette valeur indique une erreur DMA | ||||
10h | Cette valeur indique une erreur CRC | ||||
20h | Cette valeur indique une erreur au niveau du contrôleur de disque | ||||
80h | Cette valeur indique que le périphérique ne réagit pas ou ne répond pas. |
Remarques
- Tous les registres, à l'exception des registres de segments, peuvent être détruits.
- Lorsque cette fonction revient, les drapeaux du microprocesseur initialement poussés sur la pile par l'instruction INT 25h sont toujours sur la pile. La pile doit être effacée par une instruction POPF ou ADD SP, 2 pour empêcher la croissance incontrôlée de la pile et pour rendre accessible toutes les autres valeurs ayant été poussées sur la pile avant l'appel à l'interruption 25h.
- Les numéros de secteurs logiques sont obtenus en numérotant chaque secteur de disque de manière séquentielle à partir du cylindre 0, de la tête 0, du secteur 1 et en continuant jusqu'à ce que le dernier secteur du disque soit compté. Le numéro de tête est incrémenté avant le numéro de piste. Les secteurs logiquement adjacents peuvent ne pas être physiquement adjacents, en raison de l'entrelacement se produisant au niveau de l'adaptateur de périphérique pour certains types de disques.
Exemple
L'exemple suivant permet de retourner 1 si l'unité de disque spécifié par la variable «Drive» est une unité de disque virtuel (RAM Disk) ou 0 s'il est ne l'est pas :
- MOV Temp,0
- PUSH DS
- MOV BX,SS
- MOV DS,BX
- SUB SP,0200h
- MOV BX,SP
- CLD
- MOV AX,DS
- MOV ES,AX
- MOV DI,BX
- MOV CX,0100h
- XOR AX,AX
- REP STOSW ; Initialise le tampon à 0 en cas d'erreur
- MOV AX,Drive ; le tampon ne sera pas forcément interpréter
- MOV CX,1
- XOR DX,DX
- INT 25h ; Lecture du secteur de démarrage
- ADD SP,2
- JC @@1
- MOV BX,SP
- CMP Byte Ptr SS:[BX+10h],1 ; Vérification d'une simple FAT
- JNE @@1
- MOV Temp,1
- @@1:
- ADD SP,0200h
- POP DS
- MOV AL,Temp
Références
Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 300 à 301.
Dernière mise à jour : Jeudi, le 3 mars 2016