Kernel qui n'est pas chargé par le bootloader

JB_59 Messages postés 3 Date d'inscription lundi 27 septembre 2004 Statut Membre Dernière intervention 31 juillet 2005 - 30 juil. 2005 à 16:35
asma20vs Messages postés 1 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 20 juin 2009 - 20 juin 2009 à 23:30
Salut tout le monde !

Voilà j'ai un problème de chargement de Kernel; j'ai codé un boot loader en asm qui m'affiche la phrase "Chargement du kernel..." et appelle celui-ci; puis le Kernel affiche la phrase "Le Kernel parle !". Seulement après la compilation avec nasm et le liage par DOS(type kernel >> bootsector), je l'affiche avec bochs et la j'ai en boucle la phrase "Chergement du Kernel...". Voilà mes sources :

Bootsector :
%define BASE 0x100
%define KSIZE 2 ; Nombre de secteurs de 512 octets a charger


[BITS 16]
[ORG 0x0]


; Initialisation des segments
mov ax, 0x07C0
mov ds, ax ; Data segment en 7C00h
mov es, ax ; Extra segment en 7C00h
mov ax, 0x8000 ; Réglage de stack
mov ss, ax
mov sp, 0xF000


mov [bootdrv],dl ; recuparation de l'unite de boot


; Affichage du message
mov si, welcome ; On met la variable qui contient le message dans le registre SI
call write ; On appelle la fonction qui va écrire le message


; Charger le noyau
xor ax, ax
int 0x13


push es
mov ax, BASE ; L'int 13h charge le(s) secteur(s) en es:bx
mov es, ax
mov bx, 0


mov ah, 2 ; Fonction de lecture
mov al, KSIZE
mov ch, 0 ; Numéro de piste
mov cl, 2 ; Numéro du secteur de départ pour la lecture
mov dh, 0 ; Numéro de face
mov dl, [bootdrv] ; Numéro du lecteur
int 13h
pop es


; Saut vers le kernel
jmp dword BASE:0


; Fonctions
write:
.debut:
lodsb ; Met le premier octet du contenu de l'adresse SI dans AL et incrémente SI
cmp al, 0
jz .fin
mov ah, 0x0E ; Avec l'interruption 0x10 et le caractere en AL, ça écrit à l'écran
int 0x10
jmp .debut
.fin:
ret; Retour au code


; Donnees
welcome db "Chargement du kernel...", 13, 10, 0


bootdrv: db 0



times 510-($-$$) db 0
dw 0xAA55; Signature pour le boot

Kernel :

[BITS 16]
[ORG 0x100]


; initialisation des segments en 0x100
mov ax,0x100
mov ds,ax
mov es,ax
mov ax,0x8000 ; stack en 0xFFFF
mov ss,ax
mov sp, 0xf000



; Affichage du message
mov si, speak; On met la variable qui contient le message dans le registre SI
call write; On appelle la fonction qui va écrire le message


; Boucle infinie pour ne pas que le bootsector ne fasse n'importe quoi à la fin
jmp $-2


; Fonctions
write:
.debut:
lodsb ; Met le premier octet du contenu de l'adresse SI dans AL et incrémente SI
cmp al, 0
jz .fin
mov ah, 0x0E ; Avec l'interruption 0x10 et le caractere en AL, ça écrit à l'écran
int 0x10
jmp .debut
.fin:
ret; Retour au code


;DONNEES
speak db "Le Kernel parle !", 13, 10, 0

6 réponses

vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
31 juil. 2005 à 12:42
Salut,

je ne comprends pas tres bien ceci :

"Seulement après la compilation avec nasm et le liage par DOS(type kernel >> bootsector)"

yas pas besoin de linkage ici...=> tu compile le bootsect avec nasm et tu ecrit le binaire sur le secteur 0 de ta disquette
=>tu compile le "kernel" avec nasm et tu ecrit le binaire sur le secteur 2 de ta disquette

utilise ramwrite pour ecrire sur les secteur disquette...

@+ , vinc1008881

le goto, c'est comme un parachute, tu l'utilise jamais mais quand t'en as besoin...
0
JB_59 Messages postés 3 Date d'inscription lundi 27 septembre 2004 Statut Membre Dernière intervention 31 juillet 2005
31 juil. 2005 à 14:31
Je fais ça pour tester sous bochs =)
0
JB_59 Messages postés 3 Date d'inscription lundi 27 septembre 2004 Statut Membre Dernière intervention 31 juillet 2005
31 juil. 2005 à 15:37
En fait, c'est pas du liage, c'est de la concaténation. xmais le principe est là.
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 1
3 août 2005 à 12:46
salut,

ce source n'as pas été compilé avec nasm. ( int 13h -> impossible )

@++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 1
3 août 2005 à 12:47
re,

jmp dword BASE:0 -> jmp word BASE:0

@++
0
asma20vs Messages postés 1 Date d'inscription samedi 20 juin 2009 Statut Membre Dernière intervention 20 juin 2009
20 juin 2009 à 23:30
salut tt le monde




je désire votre aide dans un probleme ke j'arrive pas a résoudre meme je comprends pas comment je dois faire le pas..




je veux créer une disquette bootable sous emu8086 qui affiche un message lors de démarrage du systeme
pouvez-vous m'aider svp..
merci pour votre attention
0