Developpez.com

Plus de 14 000 cours et tutoriels en informatique professionnelle à consulter, à télécharger ou à visionner en vidéo.

FAQ AssembleurConsultez toutes les FAQ

Nombre d'auteurs : 8, nombre de questions : 50, dernière mise à jour : 26 avril 2014  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur le forum Assembleur de 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.

Commentez


SommaireF.A.Q. Assembleur x86Matériel (3)
précédent sommaire suivant
 

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.

Mis à jour le 8 novembre 2004 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) :

Code assembly-x86 : 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
On peut également procéder de cette façon :

Code assembly-x86 : 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
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) :

Code assembly-x86 : Sélectionner tout
1
2
3
4
 
fin_prog: 
    times 510 - fin_prog db 0 
dw 0AA55h
... et pour NASM :

Code assembly-x86 : Sélectionner tout
1
2
3
 
    times 510-($-$$) db 0 
    dw 0AA55h

Mis à jour le 8 novembre 2004 le mage tophinus Smortex VBurel

L'instruction :

Code assembly-x86 : Sélectionner tout
1
2
 
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].

Code assembly-x86 : Sélectionner tout
1
2
3
 
mov dx, 378h 
out dx, ax

Mis à jour le 8 novembre 2004 Smortex

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2016 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.

 
Responsable bénévole de la rubrique Assembleur : Alcatîz -