PROGRAMMER UN MBR !!!!

PROGRAMMER UN MBR !!!! - Programmation

Marsh Posté le 09-02-2001 à 13:56:49    

Comment fait on pour programmer un mbr en asm....jvoudrai la théorie et un petit exemple ki affiche hello par exemple... merci d'avance. hetadesu@yahoo.com

Reply

Marsh Posté le 09-02-2001 à 13:56:49   

Reply

Marsh Posté le 09-02-2001 à 16:20:56    

Va voir la : http://www.mega-tokyo.com/os/os-faq.html il ya plein d'infos sur le hard des pc et le développement d'os

Reply

Marsh Posté le 12-02-2001 à 19:29:34    

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.

Reply

Marsh Posté le 12-02-2001 à 19:31:43    

je conseille pour la proge en assembleur ; liste des interruptions ; E/S
www.ctyme.com

Reply

Marsh Posté le 12-02-2001 à 19:42:13    

avant int 16h il faut ajouter xor ax,ax pour mettre ax à 0

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed