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.
1h
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)
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 :
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:
Au retour, on récupère :
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.