begin process at 2008 07 05 10:27:39
1 205 099 membres
82 nouveaux aujourd'hui
14 118 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : nasm [ Processeurs / X86 ] (henri12)

nasm le 03/04/2007 23:02:54

henri12

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 : 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 !

FindeCalcule:


Re : nasm le 12/04/2007 23:50:37

PCPT
(Admin CS)
salut,
c'est une question çà?
http://www.asmfr.com/reglement.aspx
clos


Classé sous : programme, mov, ax, boot, jmp

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Redaction texte pour s...
Budget : 180€
Travail graphique- ill...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS