supposons que tu veuilles remplacer ton MBR par un autre. il faut d'abord sauvegarder ton ancien MBR sur le disque dur.
remarque : pour des raisons de compatibilité avec les anciennes FAT, la premiere piste du disque dur contient QUE le MBR, le reste est libre et le code du systéme d'exploitation ne commence qu'au secteur 1 cylindre 0 tete 1 de ton dique dur. c'est une astuce pour sauvegarder un secteur de boot (les virus font comme ca).
attention : tu dois t'assurer qu'il n'y a pas deja un programme qui a détourné le mbr sur un autre secteur de la piste 0
utiliser DEBUG sous DOS pour le faire:
à l'adresse X:100h compiler le code suivant:
mov ax,0201h ; 1 seul secteur à lire
mov bx,200h ; on lit le mbr à cs:200h
mov cx,1 ; secteur 1
mov dx,80h ; 80h = 1er disque dur
int 13h ;GO!
int 16h ;petite pause clavier et s'assurer lors de l'execution que le CF est à 0 - sinon il y a erreur de lecture !
mov ax,0301h ;ecriture
mov bx,200h
mov cx,2 ;sur le secteur 2 cylindre 0
mov dx,80h tete 0
int 13h ; sauvegarde
ensuite il reste plus qu'à ecrire le nouveau MBR au cylindre 0 tete 0 secteur 1
lorsque le pc démarre il charge le 1er secteur du disque dur (le MBR cylindre 0 tete 0 secteur 1) à l'adresse 0:07c0h ou 0:7c00h je sais plus - à verifier - et l'exécute tout simplement.
le MBR doit d'abord
(1) modifier la pile et placer le pointeur de pile à 0:7c0h, du style XOR AX,AX ;ax=0
MOV SS,AX ,ss=ax
MOV SP,7C0H
(2) recopier le code du MBR en haut de la mémoire réservée au DOS - normalement tout en haut de la mémoire conventionnelle
pour cela il utilise l'interruption 13h
mov ax,0201h ;lire
mov bx,segment de destination
push bx
pop es ;bx->es ou mov es,bx
mov bx,offset de destination
mov cx,1 ;lire le secteur 1 tete 0 cylindre 0
mov dx,80h ;80h = 1er disque dur
int 13h
(3) faire un saut far à l'endroit ou a ete recopié le code attention au pointeur d'instruction IP et le code continu à s'executer en haut de la mémoire
(4) charger le MBR détourné à 0:7c0h dont le secteur d'amorcage est par exemple au cylindre 0,tete 0,secteur 2 soit le code :
mov ax,0201h ;lecture de disque dur et lire 1 seul secteur
mov bx,7c0h
xor es,es ;lire à 0:7c0h
mov cx,2 ;cylindre 0 et secteur 2
mov dx,80h ;tete 0
int 13h
(5) executer l'ancien MBR à l'adresse 0:7c0h avec un jump far
pourquoi recopier le mbr en haut de la memoire ?
tout simplement parce que ton ancien mbr DOIT s'executer absolument à l'adresse 0:7c0h. si tu recopies 512 octets (taille d'1 secteur) à l'adresse 0:7c0h alors que justement le code qui fait cette opération est à un voisinage de 0:7c0h +/- 512 octets, le pc plantera à coup sûr.