Soutenez-nous

FAQ AssembleurConsultez toutes les FAQ

Nombre d'auteurs : 8, nombre de questions : 50, dernière mise à jour : 8 juillet 2013 

 
OuvrirSommaireF.A.Q. Assembleur x86Matériel

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.

Créé le 8 novembre 2004  par Romain Tartière (Smortex)

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) :

 
Sélectionnez

        Org     0;
       
        Jmp     07C0h:Start
       
;---------------------;
; Programme principal ;
;---------------------;
Start:
        Mov     Ax,Cs
        Mov     Ds,Ax
Mov     Es,Ax

; Programme de boot proprement dit...
Hang:
   Jmp Hang
       
End.:

   ;--- 00 jusqu'à 510 ---
   times 510 - End. db 0
   dw 0AA55h

On peut également procéder de cette façon :

 
Sélectionnez

        Org     0;
       
        Jmp     Start
       
;---------------------;
; Programme principal ;
;---------------------;
Start:
        Cli
        Mov     Ax,07C0h
        Mov     Ds,Ax
        Mov     Es,Ax
        ; Initialisation de la pile ici
        Sti

; Programme de boot proprement dit...
Hang:
   Jmp Hang
       
End.:

   ;--- 00 jusqu'à 510 ---
   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) :

 
Sélectionnez

fin_prog:
    times 510 - fin_prog db 0
dw 0AA55h 

... et pour NASM :

 
Sélectionnez

    times 510-($-$$) db 0
    dw 0AA55h
Créé le 8 novembre 2004  par Romain Tartière (Smortex), VBurel, le mage tophinus

L'instruction :

 
Sélectionnez

out 378h, ax

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].

 
Sélectionnez

mov dx, 378h
out dx, ax
Créé le 8 novembre 2004  par Romain Tartière (Smortex)
  

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 © 2004-2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.