|
auteur : Romain Tartière (Smortex) |
Il existe plusieurs méthodes. La plus simple est d'utiliser l'interruption 19h, mais cela présente de nombreux inconvénients, du fait que la mémoire n'est pas effacée et que les vecteurs d'interruption ne sont pas réinitialisés pour la zone [00h..1Ch].
On a donc des chances de causer un plantage au lieu de redémarrer le système.
On préférera donc a cette première méthode la suivante : écrire 1234h en 0040:0072 suivi d'un saut long en FFFF:0000, ce qui a pour effet de causer un redémarrage a chaud.
Enfin, si on est en mode protégé, on peut redémarrer en causant une "triple fault", ce qui se fait très facilement en altérant le registre IDTR et en exécutant une interruption logicielle.
|
|
auteurs : Romain Tartière (Smortex), VBurel, le mage tophinus |
Un boot-loader est un programme de 512 octet qui se trouve sur le premier secteur d'un disque et est exécuté par le BIOS dans le but de charger le système d'exploitation.
Il est copié à l'adresse 07C0:0000 avant d'être exécuté.
Si le programme doit faire plus de 512 octets, le boot-loader aura le rôle de charger les secteurs suivants en mémoire.
Un secteur de boot minimaliste est tel que celui-ci (Écrit avec FASM) :
Org 0
Jmp 07C0h:Start
Start :
Mov Ax ,Cs
Mov Ds ,Ax
Mov Es ,Ax
Hang :
Jmp Hang
End. :
times 510 - End. db 0
dw 0AA55h
|
On peut également procéder de cette façon :
Org 0
Jmp Start
Start :
Cli
Mov Ax ,07C0h
Mov Ds ,Ax
Mov Es ,Ax
Sti
Hang :
Jmp Hang
End. :
times 510
dw 0AA55h
|
L'utilisation de Cli et Sti dans le second exemple est recommandée lors de l'initialisation de SS et SP.
Pour mettre le mot magique en fin de secteur, vous pouvez utiliser ce code pour TASM (et MASM) :
fin_prog :
times 510 - fin_prog db 0
dw 0AA55h
|
... et pour NASM :
times 510 - ($- $$) db 0
dw 0AA55h
|
|
|
auteur : Romain Tartière (Smortex) |
L'instruction :
ne fonctionne pas... et c'est normal !
Si vous regardez la documentation de votre micro, vous noterez que le numéro du port doit impérativement appartenir à [0..255].
La solution est guère plus loin dans la documentation : il faut passer par le registre DX.
On peut alors écrire dans un plus grand nombre de ports : [0..1023].
|
Consultez les autres F.A.Q's


Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur.
Copyright © 2007 Developpez Developpez LLC.
Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne
peut être faite de ce site ni de l'ensemble de son contenu : textes, documents
et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.