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)

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


Cette discussion est classé 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 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             & A l'aide... svp [ par monitor100 ] Bonjour a tous,Je suis completement null en assembler, et il faut que je fasse afficher le résultat de la factoriel de 4 soit 24.est ce que quelqu'un


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.