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 les interruptions :( [ par yafuka ] Salut tt le monde..J'ai un petit probleme avec les interruptions. J'explique en quelques mots ce que j'essai de faire :J'aimerai tt simplement decreme problème d'horloge [ par gctom ] bonjour a tousje vous expose mon problème :je dois réaliser uen horloge qui permet d'afficher l'heure la date et autre chose.ceci étant fait je passe lecture / ouverture d'un fichier txt en assembleur [ par rana ] est ce quelaqu un pourrait m aider a corriger ma macro de lecture d'un fichier txt et l'ouverture d'un fichier txt, voila les macro (pb au niveau du rs232 [ par TRAX44 ] salut,tout premièrement je sais qu'il ya des exemples sur le site!mais mon problème est autre je tiens à comprendre pourquoi mon code ne fonctionne pa Multiplication de deux nombres compris entre 0 et 99 en assembleur [ par petitspirou ] salut, j'ai un programme a faire mais je suis nul en assembleur, voici ce que j'ai fais mais ca ne fonctionne pas.Quelqun peut'il me le corriger et me help, si vous savez merci d'avence [ par rebellus ] .model small.stack 100h.486LOCALS.data.codemain proc pusha mov ax,@data mov ds,ax mov ax,0 mov ah,09 mov al,12 mov bl,4 mov bh,1 ;ceci c'est la page pb int 21h ah=0ah [ par mat74 ] salut a ts ,voila j'ai fais un programme qui est censé lire une chaine entré par l'utilisateur et ensuite la reafficher . Il me demande bien d'entré u Problème d'adresse effective [ par Ihlianov ] Hi,J'ai un problème avec NASM, qui me rend cinglé.Je code un .Com (16 bits) et il me revoit une erreur sur l'instruction suivante : mov ax, [d


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

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



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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,140 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é.