Tp 11 : Paramètres des disques durs



L'objectif

Il est de vous montrer l’intérêt du BIOS (Basic Input Output system) dans un ordinateur. Le programme que nous allons analyser va récupérer par l’intermédiaire du BIOS certains paramètres physiques des disques durs de votre ordinateur. Pour cela on va voir ce qu’est une interruption du BIOS.

Remarque : Il est possible qu'il ne fonctionne pas correctement sous Windows XP.

Le temps imparti

1h

A faire

Tout d'abord, il faut récupérer le programme source dparam.s sur le serveur de l'IUT (ou ici). Nous allons l'analyser un peu... (voir le source ci dessous).

Dés la première ligne, vous pouvez constater que le source n’a pas été inventé pour cet exercice. En effet, ce programme est utilisé pour installer Linux sur un ordinateur de type PC. Au démarrage de l’installation, le SE à besoin de connaître les paramètres des disques durs de la machine.

Compiler ce programme pour éxecution en mode réél :

$ as86 -0 -a -w -o dparam.s
$ ld86 -0 -s -o hello2_dos.img hello2_dos.o
$ dd if= hello2_dos.img of= hello2_dos.com bs=288 skip=1

Aller sour MSDOS et lancer le programme en tapant les commandes :

C:\dparam 0x80
C:\dparam 0x81

Il doit vous afficher trois nombres, qui représentent le nombre de secteurs, de têtes et de cylindres des disques durs.
Les valeurs 0x80 et 0x81 représentent respectivement les deux disques durs possibles d’un ordinateur de type PC. En effet le BIOS ne peut gérer que deux disques durs. (Des extensions existent depuis 1995, mais pas de standard officiel)

Documentation non exhaustive de l'interruption 13h du BIOS

Remarque : Je vous déconseille de tester cette interruption chez vous, non pas qu'elle porte malheur (quoique), mais vous pouvez casser votre disque dur

L'interruption 13h du BIOS permet de gérer et de connaître certains paramètres des disques durs.
Si AH contient la valeur :

00h
Réinitialisation du contrôleur disque
01h
Lecture du code d'erreur de la dernière opération
02h
Lecture du disque
03h
Ecriture sur le disque
04h
Vérification du contenu du disque
05h
Formatage d'une piste/cylindre
08h
Lecture des paramètres d'un lecteur
09h
Initialisation du contrôleur d'un disque dur
etc...
Pour plus d'information voir par exemple Wikipedia

Comme vous avez dû vous en appercevoir, ce petit programme utilise l'interruption 13H (1910) : Services disques de bas niveau. Cette fonction (comme beaucoup d'autres) requiert d'autres paramètres:

AH
Numéro du service demandé
DL
Numéro du disque :
00h
Disquette A:
01h
Disquette B:
80h
Disque dur C:
81h
Disque dur D:

Au retour, on récupère :

BL
Type de disquette (disquettes seulement) : 1=360K, 2=1.2M, 3=720K, 4=1.44M, 6=2.88M
CL
Bits 0-5 : Nombre de secteurs Bits 0-7 : 2 bits supérieurs du nombre de pistes (bits 8-9)
CH
Nombre de pistes (bits 0-7)
DL
Nombre de disques
DH
Nombre de têtes

Analyse du programme

Dans un programme Dos, les arguments de la ligne de commande se trouvent à l’adresse mémoire 0x80. C’est pourquoi le programme commence par faire des comparaisons, et teste si le paramètre existe et s'il vaut 0x80 ou 0x81. Ensuite, notre programme fait appel à l’interruption 13h du BIOS avec le numéro de disque spécifié sur la ligne de commande. Enfin, il affiche le résultat après conversion.


Retour à la liste des TP