Kernel qui n'est pas chargé par le bootloader

Signaler
Messages postés
3
Date d'inscription
lundi 27 septembre 2004
Statut
Membre
Dernière intervention
31 juillet 2005
-
Messages postés
1
Date d'inscription
samedi 20 juin 2009
Statut
Membre
Dernière intervention
20 juin 2009
-
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
A voir également:

6 réponses

Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
3
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...
Messages postés
3
Date d'inscription
lundi 27 septembre 2004
Statut
Membre
Dernière intervention
31 juillet 2005

Je fais ça pour tester sous bochs =)
Messages postés
3
Date d'inscription
lundi 27 septembre 2004
Statut
Membre
Dernière intervention
31 juillet 2005

En fait, c'est pas du liage, c'est de la concaténation. xmais le principe est là.
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

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

@++
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
re,

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

@++
Messages postés
1
Date d'inscription
samedi 20 juin 2009
Statut
Membre
Dernière intervention
20 juin 2009

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