FAQ AssembleurConsultez toutes les FAQ
Nombre d'auteurs : 9, nombre de questions : 56, dernière mise à jour : 8 décembre 2017 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur le forum Assembleur de Developpez.com et de l'expérience personnelle des auteurs. Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être exhaustive ; vous pouvez la compléter avec vos propres questions/réponses ou proposer des corrections ou des compléments à des questions/réponses existantes.
Nous espérons que cette FAQ saura répondre à un maximum de vos questions. Nous vous en souhaitons une bonne lecture.
L'équipe Assembleur de Developpez.com.
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 à 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 à chaud. Enfin, si on est en mode protégé, on peut redémarrer en causant une « triple fault K, ce qui se fait très facilement en altérant le registre IDTR et en exécutant une interruption logicielle.
Un boot-loader est un programme de 512 octets 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) :
Code asm : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 |
Code asm : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 |
Pour mettre le mot magique en fin de secteur, vous pouvez utiliser ce code pour TASM (et MASM) :
Code asm : | Sélectionner tout |
1 2 3 4 | fin_prog: times 510 - fin_prog db 0 dw 0AA55h |
Code asm : | Sélectionner tout |
1 2 3 | times 510-($-$$) db 0 dw 0AA55h |
L'instruction :
Code asm : | Sélectionner tout |
1 2 | out 378h, ax |
Code asm : | Sélectionner tout |
1 2 3 | mov dx, 378h out dx, ax |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes 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 © 2024 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.