Il est de vous montrer qu’il est possible d’écrire des programmes en
assembleur sous Linux, pour MSDos. De plus vous constaterez que les appels
systèmes ou les interruptions logicielles sont différentes
selon le système d’exploitation que l’on utilise.
Remarque Il est possible qu'il ne fonctionne pas correctement sous Windows XP.
1h30
Nous verrons dans ce TP :
Afin de pouvoir tester correctement ce TP, on vous conseille de travailler
sous Windows via SSH. La compilation sera faite sous Unix, son
exécution se fera sous Windows.
Pour exécuter votre programme sous Windows, vous aurez besoin d'une
fenêtre console : Vous l'obtiendrez avec la commande CMD
.
Dans un premier temps, nous allons réécrire le programme
hello world
du TP 1 (hello2.s) en version DOS, puis le programme
first du TP 5.
On pourra remarquer la différence de codage entre le retour à
la ligne de Linux et de DOS.
Attention : Ce programme est écrit selon la norme Intel.
Saisir le programme suivant :
Remarque : as86
et ld86
sont deux utilitaires
qui permettent de générer du code x86 et non x386. Quand un PC
démarre, c'est en mode réel.
Quand on écrit une application purement DOS, elle doit être
exécutée en mode réel (et non en mode
protégé).
Pour ceux que ça intéresse, si vous allez fouiller dans les sources
du noyau Linux, vous verrez qu'au début, il démarre en mode
réel et que les sources sont compilés à l'aide de ces deux
utilitaires.
Assembler ce source en tapant la commande suivante :
$ as86 -0 -a -w -o hello2_dos.o hello2_dos.s
On récupère donc un fichier objet hello2_dos.o
.
Regarder la signification des options dans le man.
Faire l’édition des liens avec la commande :
$ ld86 -0 -s -o hello2_dos.img hello2_dos.o
On récupère un fichier image hello2_dos.img
, qui n'est pas
un fichier exécutable sous le SE Linux.
Vérifier avec la commande Linux file
.
Un fichier exécutable Linux, n’ayant pas le même format qu'un
fichier exécutable MSDos, il va falloir le convertir.
Pour cela, lancer la commande suivante :
$ dd if=hello2_dos.img of= hello2_dos.com bs=288 skip=1
Attention : L'extension .com
du fichier est importante !
Regarder dans le man les options utilisées.
Que fait cette commande ?
Comparer la taille du fichier hello2 du TP 1 à
celle de hello2_dos.com.
Vous pouvez naviguer dans la console MSDos comme sous Unix, avec la commande
cd
. Pour obtenir la liste des fichiers contenus dans un dossier,
utilisez la commande dir
.
Exécuter ce programme sous MSDos :
> hello2_dos
Constater qu’il fait la même chose que hello2 sous
Linux.
À la ligne 12 de hello2_dos.s retirer l'une des
valeurs 13 et 10 et recommencer les opérations ci-dessus.
Déterminer le rôle de ces deux codes.
Insérer après la ligne 8 le code suivant, et recommencer les opérations ci-dessus.
Maintenant, nous allons voir que le programme first.s
peut lui aussi
être écrit en mode MSDOS.