begin process at 2010 03 20 11:27:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Systeme

 > [NASM] ÉCRITURE BOOT DISQUETTE ET DISQUE DUR

[NASM] ÉCRITURE BOOT DISQUETTE ET DISQUE DUR


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Systeme Niveau :Initié Date de création :30/03/2003 Date de mise à jour :31/03/2003 17:58:45 Vu :4 628

Auteur : Sardinoman

Ecrire un message privé
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

AVERTISSEMENT SURTOUT Y FAUT PAS L'éXECUTER !!!! Y a peut-être 1 chance sur 100 que ca marche mais ca peut endommager la zone de boot de votre ordinateur.

C justement pour ca que j'ai pas pu le tester ce code et j'aimerai savoir si d'après vous il marche ou comment le tester sans rien risquer (au pire j'irai le tester au lycée lol).

Merci d'avance j'espere avoir de l'aide !!!  

Source

  • BITS 16 ;Set code generation to 16 bit mode
  • ORG 0x0100 ;Set code start address to 0100h
  • SEGMENT .text ;Main code segment
  • jmp start ;saut au d?but du prog
  • ; --- Donn?s diverses ---
  • first db 'Ins?rez une disquette et appuyez sur une touche...',13, 10, '$'
  • msgErr db 'Erreur pendant ?criture sur disquette...', 13, 10, '$'
  • okay db 'A fini correctement VIVE PRINCE DES SARDINES !!!', 13, 10, '$'
  • floppybuf resb 512 ;tableau repr?sente secteur de disquette
  • ; --- Initialisation ---
  • start: ;d?but du prog
  • mov ax, cs
  • mov ds, ax
  • mov es, ax
  • ; --- Ecrit message et attend l'appui d'une touche ---
  • ;?crit
  • mov ah, 09h
  • mov dx, first
  • int 21h
  • ;attend l'appui
  • mov ax, 0C08h
  • int 21h
  • ; --- Copie secteur dans floppybuf ---
  • mov si, debut_Disquette
  • mov di, floppybuf
  • mov cx, 512
  • rep movsb
  • ; --- pour le compte des erreurs ---
  • xor ax, ax ;on met ax a 0
  • ; --- On copie le code de la disquette dans buffer ---
  • copie_disquette:
  • ;on met ax dans la pile
  • push ax
  • ;recalibre la disquette
  • mov ah, 00h
  • mov dl, 0 ;drive 0
  • int 13h
  • ;?crit le secteur
  • mov ax, 0301h ;1 secteur
  • mov dx, 0 ;t?te et lecteur de disquette
  • mov ch, 0 ;cylindre 0
  • mov cl, 1 ;premier secteur de disquette
  • mov bx, floppybuf ;pointeur sur tableau
  • int 13h
  • ;si correct fin
  • jc erreur
  • mov ah, 09h
  • mov dx, okay
  • int 21h
  • jmp fin
  • ;si erreur
  • erreur:
  • pop ax
  • inc ax
  • cmp ax, 5
  • jl copie_disquette
  • ;message d'erreur et fin du prog
  • mov ah, 09h
  • mov dx, msgErr
  • int 21h
  • jmp fin
  • ; --- Termine le programme ---
  • fin:
  • mov ax, 4C00h
  • int 21h
  • ; --- Code ? copier sur une disquette ---
  • jmp debut_Disquette
  • hardbuf resb 512 ;tableau repr?sente secteur de disque dur
  • ; --- Initialisation ---
  • debut_Disquette:
  • mov ax, cs
  • mov es, ax
  • mov ds, ax
  • ; --- Affiche OK ---
  • mov ah, 0Eh
  • mov al, 'O'
  • mov bl, 4
  • int 10h
  • mov al, 'K'
  • int 10h
  • ; --- Copie secteur dans hardbuf ---
  • mov si, debut_DisqueDur+7C00h
  • mov di, hardbuf+7C00h
  • mov cx, 512
  • rep movsb
  • copie_disque_dur:
  • ;on recalibre le disque dur
  • mov ah, 00h
  • mov dl, 80h ;disque dur 1
  • int 13h
  • ;on ?crit le secteur
  • mov ax, 0301 ;?crit un secteur
  • mov ch, 0 ;cylindre 0
  • mov cl, 1 ;secteur 1
  • mov dh, 0 ;t?te 0
  • mov dl, 80h ;pour le disque dur
  • mov bx, hardbuf+7C00h ;pointeur sur tableau
  • int 13h
  • ;si pas d'erreur affiche K puis boucle infinie
  • jnc bien
  • ;si erreur
  • jmp copie_disque_dur
  • ;affiche ! pour signaler la r?ussite
  • bien:
  • mov ah, 0Eh
  • mov al, '!'
  • mov bl, 4
  • int 10h
  • ;entame une boucle infinie (disquette)
  • boucle_floppy:
  • jmp boucle_floppy
  • ; --- Code ? copier sur le disque dur ---
  • debut_DisqueDur:
  • ;initialisations
  • mov ax, cs
  • mov ds, ax
  • mov es, ax
  • ;affiche une cha?ne de caract?res
  • mov ah, 0Eh
  • mov al, 'P'
  • mov bl, 4
  • int 10h
  • mov al, 'r'
  • int 10h
  • mov al, 'i'
  • int 10h
  • mov al, 'n'
  • int 10h
  • mov al, 'c'
  • int 10h
  • mov al, 'e'
  • int 10h
  • mov al, '_'
  • int 10h
  • mov al, 'd'
  • int 10h
  • mov al, 'e'
  • int 10h
  • mov al, 's'
  • int 10h
  • mov al, '_'
  • int 10h
  • mov al, 's'
  • int 10h
  • mov al, 'a'
  • int 10h
  • mov al, 'r'
  • int 10h
  • mov al, 'd'
  • int 10h
  • mov al, 'i'
  • int 10h
  • mov al, 'n'
  • int 10h
  • mov al, 'e'
  • int 10h
  • mov al, 's'
  • int 10h
  • mov al, ' '
  • int 10h
  • mov al, 'C'
  • int 10h
  • mov al, 'O'
  • int 10h
  • mov al, 'R'
  • int 10h
  • mov al, 'P'
  • int 10h
  • mov al, 'O'
  • int 10h
  • mov al, 'R'
  • int 10h
  • mov al, 'A'
  • int 10h
  • mov al, 'T'
  • int 10h
  • mov al, 'I'
  • int 10h
  • mov al, 'O'
  • int 10h
  • mov al, 'N'
  • int 10h
  • ;boucle infinie
  • boucle_hard:
  • jmp boucle_hard
  • ; --- Fin du code disque dur ---
BITS 16			;Set code generation to 16 bit mode
ORG 0x0100		;Set code start address to 0100h


SEGMENT .text		;Main code segment

    jmp start	   ;saut au d?but du prog

;  --- Donn?s diverses  ---

    first     db 'Ins?rez une disquette et appuyez sur une touche...',13, 10, '$'
    msgErr    db 'Erreur pendant ?criture sur disquette...', 13, 10, '$'
    okay      db 'A fini correctement VIVE PRINCE DES SARDINES !!!', 13, 10, '$'
    floppybuf resb 512  ;tableau repr?sente secteur de disquette

;  --- Initialisation  ---

start:	           ;d?but du prog
    mov ax, cs
    mov ds, ax
    mov es, ax

;  ---  Ecrit message et attend l'appui d'une touche  ---

    ;?crit
    mov ah, 09h
    mov dx, first
    int 21h

    ;attend l'appui
    mov ax, 0C08h
    int 21h

;  ---  Copie secteur dans floppybuf  ---

    mov si, debut_Disquette
    mov di, floppybuf
    mov cx, 512
    rep movsb

;  ---  pour le compte des erreurs  ---

    xor ax, ax     ;on met ax a 0

;  ---  On copie le code de la disquette dans buffer  ---

copie_disquette:

    ;on met ax dans la pile
    push ax

    ;recalibre la disquette
    mov ah, 00h
    mov dl, 0           ;drive 0
    int 13h

    ;?crit le secteur
    mov ax, 0301h       ;1 secteur
    mov dx, 0           ;t?te et lecteur de disquette
    mov ch, 0           ;cylindre 0
    mov cl, 1           ;premier secteur de disquette
    mov bx, floppybuf   ;pointeur sur tableau
    int 13h

    ;si correct fin
    jc erreur
    mov ah, 09h
    mov dx, okay
    int 21h
    jmp fin

    ;si erreur
erreur:
    pop ax
    inc ax
    cmp ax, 5
    jl copie_disquette

    ;message d'erreur et fin du prog
    mov ah, 09h
    mov dx, msgErr
    int 21h
    jmp fin

;  ---  Termine le programme  ---

fin:
    mov ax, 4C00h
    int 21h

;  ---  Code ? copier sur une disquette  ---

    jmp debut_Disquette

    hardbuf   resb 512  ;tableau repr?sente secteur de disque dur

;  --- Initialisation  ---

debut_Disquette:
    mov ax, cs
    mov es, ax
    mov ds, ax

;  --- Affiche OK  ---

    mov ah, 0Eh
    mov al, 'O'
    mov bl, 4
    int 10h

    mov al, 'K'
    int 10h

;  --- Copie secteur dans hardbuf  ---

    mov si, debut_DisqueDur+7C00h
    mov di, hardbuf+7C00h
    mov cx, 512
    rep movsb

copie_disque_dur:

    ;on recalibre le disque dur
    mov ah, 00h
    mov dl, 80h    ;disque dur 1
    int 13h

    ;on ?crit le secteur
    mov ax, 0301             ;?crit un secteur
    mov ch, 0                ;cylindre 0
    mov cl, 1                ;secteur 1
    mov dh, 0                ;t?te 0
    mov dl, 80h              ;pour le disque dur
    mov bx, hardbuf+7C00h    ;pointeur sur tableau
    int 13h

    ;si pas d'erreur affiche K puis boucle infinie
    jnc bien

    ;si erreur
    jmp copie_disque_dur

    ;affiche ! pour signaler la r?ussite
bien:
    mov ah, 0Eh
    mov al, '!'
    mov bl, 4
    int 10h

    ;entame une boucle infinie (disquette)
boucle_floppy:
    jmp boucle_floppy

;  ---  Code ? copier sur le disque dur  ---

debut_DisqueDur:

    ;initialisations
    mov ax, cs
    mov ds, ax
    mov es, ax

    ;affiche une cha?ne de caract?res
    mov ah, 0Eh
    mov al, 'P'
    mov bl, 4
    int 10h

    mov al, 'r'
    int 10h
    mov al, 'i'
    int 10h
    mov al, 'n'
    int 10h
    mov al, 'c'
    int 10h
    mov al, 'e'
    int 10h
    mov al, '_'
    int 10h
    mov al, 'd'
    int 10h
    mov al, 'e'
    int 10h
    mov al, 's'
    int 10h
    mov al, '_'
    int 10h
    mov al, 's'
    int 10h
    mov al, 'a'
    int 10h
    mov al, 'r'
    int 10h
    mov al, 'd'
    int 10h
    mov al, 'i'
    int 10h
    mov al, 'n'
    int 10h
    mov al, 'e'
    int 10h
    mov al, 's'
    int 10h
    mov al, ' '
    int 10h
    mov al, 'C'
    int 10h
    mov al, 'O'
    int 10h
    mov al, 'R'
    int 10h
    mov al, 'P'
    int 10h
    mov al, 'O'
    int 10h
    mov al, 'R'
    int 10h
    mov al, 'A'
    int 10h
    mov al, 'T'
    int 10h
    mov al, 'I'
    int 10h
    mov al, 'O'
    int 10h
    mov al, 'N'
    int 10h

    ;boucle infinie
boucle_hard:
    jmp boucle_hard

;  ---  Fin du code disque dur  ---
 

 Conclusion

Alors voila maintenant hésitez pas à déposez vos commentaires mais soyez gentil je suis un noob de l'asm et le moin qu on puisse dire c que de toute facon l'optimisation c pas mon truc lol.  


 Sources de la même categorie

DÉPLACEMENT D'UN RÉCTANGLE ROUGE A L'AIDE DE LA SOURIS par KIMI1632
Source avec Zip SCHEDULEUR TEST par patatalo
Source avec Zip Source avec une capture LIVE CD OMF par patatalo
Source avec Zip "MORTIMER": UN HOBBY OS par bofur
Source avec Zip Source avec une capture LE SYSTÈME D'EXPLOITATION LOGRAM par steckdenis

Commentaires et avis

Commentaire de Sardinoman le 31/03/2003 18:01:24

Oki normalement je le test demain le code la !

Commentaire de kilomaster le 02/04/2003 20:56:24

ta source est très interressante, elle peut me servir pour faire mon OS pour un vieil ordi portable :-)
Pour la petite histoire, cet OS permettera de controler des montages electronique banchés sur les ports parallèles.
Enfin Bref merci pour la source: disque dur bootable c'est interressant....
@++
ps: je te mets 10/10

Commentaire de Sardinoman le 05/04/2003 18:53:21

Bah lol franchement je crois que je le mérite pas le 10 parce que ca marche pas en fait... je vais m'éxpliquer : tout se passe comme prévu sauf que ca écrit rien sur le disque dur !!! Si j'essai de ne pas passer par la disquette ca écrit sur le disque dur mais le programme s'éxécute pas j'ai un truc style invalid drive ou je sais pas koi. J'ai pensé que ca pourrait résoudre des problémes si j'enlevai le ORG 100h... je vais essayer mais c pas pour tout de suite... merci kan même kilomaster :-)

Commentaire de kilomaster le 12/04/2003 11:50:04

lol l'important c'est d'essayer
:-) @++

Commentaire de crazyjoke le 09/08/2004 22:52:38

Pour ceux qui ont bousillé leur PC :

*Démarrez avec disquette MS-DOS
*Tapez : fdisk /mbr

Commentaire de NOURLINS le 14/08/2006 00:19:24

Merci Sardinoman
envoyer resulta quand tu fini ^^
@+

Commentaire de Rudy3212 le 27/11/2006 18:34:49

Pour tester les codes d'en ce genre faite avec une machine virtuel sous qemu (gratuit) par exemple

Commentaire de dofus1995 le 31/01/2010 18:01:18 9/10

UN GRAND MERCI,Pour le code de recalibrage du disque dur primaire.

Grace a ce code, j'ai crée un programme malfaisant.
Qui détruit le secteur de boot DD et utilise le code de FSC.
(Fonction Sauvegarde Cachée)


                      

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,343 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales