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 : Kernel qui n'est pas chargé par le bootloader [ Archives / Autres asm ] (JB_59)

samedi 30 juillet 2005 à 16:35:23 | Kernel qui n'est pas chargé par le bootloader

JB_59


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


dimanche 31 juillet 2005 à 12:42:15 | Re : Kernel qui n'est pas chargé par le bootloader

vinc1008881

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...


dimanche 31 juillet 2005 à 14:31:49 | Re : Kernel qui n'est pas chargé par le bootloader

JB_59



Je fais ça pour tester sous bochs =)

dimanche 31 juillet 2005 à 15:37:31 | Re : Kernel qui n'est pas chargé par le bootloader

JB_59


En fait, c'est pas du liage, c'est de la concaténation. xmais le principe est  là.

mercredi 3 août 2005 à 12:46:52 | Re : Kernel qui n'est pas chargé par le bootloader

patatalo

Membre Club Administrateur CodeS-SourceS

salut,

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

@++

mercredi 3 août 2005 à 12:47:59 | Re : Kernel qui n'est pas chargé par le bootloader

patatalo

Membre Club Administrateur CodeS-SourceS

re,

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

@++




Cette discussion est classé dans : mov, ax, al, kernel, 0x100


Répondre à ce message

Sujets en rapport avec ce message

probleme de conversation de hexa en ascii [ par wapiti ] voici le programme qui converti du binaire en ascii.model small.stack;-------------------------------------------------------------------------------- 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 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 avec un bootloader [ par anonyme_man_in_this_world ] salut !! je voudrais coder un bootloader , tous ce compile bien ,je copie / colle le fichier .BIN dans une disquette ,mais lors le redemmarrage d Deplacement [ par FireMan57 ] Bonjour, je débute en asm x86 et j'aimerais savoir comment faire pour effectuer correctement le déplacement d'un personnage en mode graphique. J'ai dé tp assembleur i3 pour la FST [ par babbiverus ] main proc mov ax,@Datamov ds, axmov si,offset tabmov cx, 16mov bx,0saisie:  mov dx,offset commande;afficher "saisir un nombre"mov ah,9int 21hmov ah, 1 interruptions [ par junior300 ] bonjour, en récupérant un bout de code d'une source découverte sur ce siteg creer cette fonction!!celle ci ne fonctionne pas lorsque j'essaye de passe Modifer le vecteur d'interruptions [ par vecchio56 ] Bonjour J'essaie de refaire la source http://www.cppfrance.com/code.aspx?ID=33558 en assembleur (ca consiste à modifier la routine de l'interruption 0 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


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,390 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é.