begin process at 2010 03 15 15:43:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Processeurs

 > 

X86

 > 

nasm


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

nasm

Echange clos Echange clos, plus de réponse possible sur cet échange

mardi 3 avril 2007 à 23:02:54 | nasm

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:

jeudi 12 avril 2007 à 23:50:37 | Re : nasm

PCPT

Administrateur CodeS-SourceS
salut,
c'est une question çà?
http://www.asmfr.com/reglement.aspx
clos


Cette discussion est classée dans : programme, mov, ax, boot, jmp


Sujets en rapport avec ce message

erreur dans le boot + kernel [ par hudson ] Bonjour, voilà j'ai essayer de suivre le tut de inferno sur les OS et donc le boot sur la disquette est ok ! mais dès que je veux mettre un kernel il Probleme de boot [ par DbD ] Bonjour,Alors je fais mon OS et j'ai des problème de boot a partir d'un disquette, sur certain pc ou quand le noyau depasse 40 secteurs ca boot plus pb avec JMP [ par kaka83185 ] salut tous le monde,je reste comme d'habitude,débutant en assembleur,je travaille avec emu8086,et j'essaye de faire un programme qui fait les branchem Affichage décroissant et alphabétique de 2 listes(Nom_Prénom et Note) [ par m_didi9 ] [code=autre]Data SEGMENT Mess1 DB 10,13, 'Entrez la liste des Noms :' DB 10, 13, '$' Mess2 DB 'Entrez la liste des Notes :' DB 10, 13, '$' Mess3 fatal error LNK1190 [ par WildChild54 ] Bonjour à tous!Eh bien voilà, je voudrais créer un petit programme affichant l'heure (je sais il y en a déjà plusieurs qui en ont parlé ici) mais j'ai question sur le language asm [ par dyroj ] bonjour,j'ai qulque question sur l'asm :-quand je fait un : mov ax, 10 , quesqui va dans le registre (ladresse de 10 dans la ram, ou 10).-pourquoi se Problème d'affichage de programme après compilation [ par li2k ] Salut tout le Monde.Bon voilà, dans le cardre d'un projet scolaire, j'ai écris un programme assembleur avec l'émulateur "Emul8086".dans ce programme j Graphique [ par RM50Man ] Bonjour a tous!!!!Je veux tracer une ligne mais ca ne marche pas, je passe les parametre par la pile,et ensuite ds la fonction principale, je remplis Bonjour [ par red4ever ] J'aurai aimer savoir comment permettre a l'utilisateur d'entrer une chaine de caractere,la ranger dans bx et ensuite l'afficher a l'ecran??J'ai beau e problème : nombres aléatoires random [ par dmontavon ] Je cherche à générer un nombre aléatoire avec le code :Random:   mov dx,128             &


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,858 sec (3)

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