cs_henri12
Messages postés114Date d'inscriptionmercredi 25 février 2004StatutMembreDernière intervention 9 avril 2007
-
3 avril 2007 à 23:02
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
12 avril 2007 à 23:50
salut
je viens de compiler ce mbr boot avec nasm
nasm -fbin aboot.asm -o binexe.exe
le programme c est bien compiler mais en lançant d une cle usb l image se fige
es un probleme d INT13
merci
; Auteur HwW_Mb Copyright 2005 .
; nom de fichier aboot.asm
; vous pouvez tout faire avec ce fichier :)
; Auto Boot v1.0 est un programme de secteur de démarrage qui charge un Boot !
; l'astuce est de Booter sur un autre drive depuis ce programme .
; le programme dois d'abors se charger dans notre adresse classique de démarrage 0000:7C00
; puis se déplacer lui même dans un autre segment 0100:0000 sinon impossible d'ecraser
; la mémoire et démarrer le Boot à charger :)
; les nouvelles versions de ce programme serons plus Cool que cela ! charger une partition
; par exemple :)
; faut démarrer avec le programme pour essayer :p .
; pour les neuneus editer vos pramaitres de démarrage :) par exemple Boot.ini ajoutez la ligne
; suivante : C:\aboot.bin="Auto Boot v1.0" où C:\ est votre partition de démmarge qui contient
; sur sa racine le fichier executable aboot.bin .
; pour plus de précision contactez moi : [mailto:Clubeutelsat@yahoo.fr Clubeutelsat@yahoo.fr]
; ou nous joindres dans IRC serveur : irc1.heliosnet.org/6667 Channel : #AutoBoot .
; Bonne utilisation !
[BITS 16] ;et oui un programme 16 Bit ^^
StartCalcule: ;début de l'offset
[ORG 0x00] ;pas d'offset à appliquer .
startcmp: cmp word ax,0xFFFF ;on teste c le segment est déja plein par le programme :)
jne start ;on saute si déja charger en 0x100 (donc le nouveau segment)
Org100: mov ax,0x100 ;on regle les registres de segments la nouvelle adresse est 0x100
mov ds,ax
mov es,ax
mov ax,0x8000 ;pile en 0x8000
mov ss,ax
mov sp, 0xf000 ;pointeur de pile en 0xf000
jmp Progset ;on saut vers le début du programme
Print: push ax ;on empile les registres :)
push bx
push si
cld ;lecture => positive
.next: lodsb ;Charge l'adresse String de SI dans al
or al,al ;fin de la chaines !
jz .end ;alors on quitte :)
mov ah, 0x0e ;on affiche le char :)
mov bl,0007h ;couleur blanche
int 10h ;on écrit un char dans l'ecran
jmp .next ;pas encore terminée ? alors faut continuer
.end: pop si ;et OP pop :)
pop bx
pop ax
ret ;return :p
Boot: mov si,msgSucc ;sinon un message de succe .
Call Print
push es ;fonction de Boot qui va charger le secteur du matielle à démarrer .
xor ax,ax ;on charge en 0000:xxxx
mov es,ax
mov ax,0x0201 ;on lit un lecteur
mov cx,0x0001 ;secteur One .
mov bx,0x7C00 ;et Offset 0x7C00 ! adresse de Boot 0000:7C00
int 0x13 ;on le fait 2 fois
int 0x13
pop es ;restaure ES sinon panic .
jc .Error ;si erreur on sautera vers le bad message
jmp 0000:0x7C00 ;et on démarre le programme de la MBR à charger .
.Error: mov si,msgError ;on affiche le message d'erreur et on return
Call Print
jmp startke
start: mov ax,0x07C0 ;ici c le vrai adresse du programme au démarrage .
mov ds,ax
mov es,ax
mov ax,0x8000
mov ss,ax
mov sp, 0xf000
mov cx,FindeCalcule - StartCalcule ;on calcule la taille du programme ..
push es
mov di,-2 ;décalage de Byte donc 2 - 4 = -2 (Adressage)
mov ax,0x100 ;copiage du programme de 0x000:0X7C00 à 0x100:0x0000
mov es,ax
mov si,Org100
rep movsb ;copiage !
pop es
mov ax, 0xFFFF ;indique que le programme est déja copié c'est comme un pointeur .
jmp 0x100:0000 ;on saut vers le nouveau segment .
Progset:
startke: mov si,msgboot ;on affiche un message à l'ecran
call Print
prevar: xor ax,ax ;on lit l'option ..
int 0x16
cmp al,'1'
je BootF1
cmp al,'2'
je BootF2
cmp al,'3'
je BootH1
cmp al,'4'
je BootH2
jmp prevar
BootF1: mov dx,0x0000 ;un select case tout con :p
jmp Boot
BootF2: mov dx,0x0001
jmp Boot
BootH1: mov dx,0x0080
jmp Boot
BootH2: mov dx,0x0081
jmp Boot
msgSucc db 13,10,'Booting ...',13,10,0
msgError db 13,10,'Error Booting with Drive ..',13,10,0
msgboot db 13,10,'Auto Boot v1.0 Copyright 2005 Coded By HwW_Mb',13,10,'Chose Your Boot (1:Floppy Disk1, 2:Floppy Disk2, 3:Hard Disk1, 4:Hard Disk2)',13,10,0
times 510-($-$$) db 0x90 ;Nop !! jusqu'à 510 !
SignatureMBR dw 0xAA55 ;notre Signature d'un secteur de Boot !