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 : probleme avec un bootloader [ Archives / Newbii ] (anonyme_man_in_this_world)

vendredi 5 août 2005 à 23:04:32 | probleme avec un bootloader

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 de l'ordinateur rien ne se passe (: . voici le code : org 0000h mov ax,07C0h mov ds,ax mov es,ax mov ax, 08000h mov ss,ax mov sp, 0f000h start : MOV AH , 0Eh MOV AL ,'h' int 10h MOV AL ,'e' int 10h mov al , 'l' int 10h mov al , 'l' int 10h mov al , "o" int 10h mov al , ' ' int 10h mov al , "w" int 10h mov al , "o" int 10h mov al , "r" int 10h mov al , "l" int 10h mov al , "d" int 10h xor ax , ax int 16h end start MOV AX,04ch INT 10h ret 0 ;****************************************************************************** merçi d'avance pour tout aide @+

samedi 6 août 2005 à 10:39:53 | Re : probleme avec un bootloader

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

qu'est ce que tu appelle coller le .bin a la d7 ?

@++

samedi 6 août 2005 à 10:47:33 | Re : probleme avec un bootloader

patatalo

Membre Club Administrateur CodeS-SourceS

re,

* un mbr finis par le mot 0xAA55
* remet mov ah,0eh a chaque appel int 10h
* c'est quoi ça:
MOV AX,04ch
INT 10h
* ret 0 vers ou ?
* copier le mbr sur le premier secteur de la d7.

bref, informe toi un peu sur le boot pc.

@++


samedi 6 août 2005 à 13:39:42 | Re : probleme avec un bootloader

anonyme_man_in_this_world

desolé , mais je ne comprends pas un mot clef dans ton message : quesque tu veut dire avec "mbr" ? *remet mov ah,0eh a chaque appel int 10h -> je crois pas que ah va changer automatiquement : dans le reste du code , je ne l'ai jamais touche donc ... *MOV AX,04ch INT 10h -> quitter le programme merçi d'avance

samedi 6 août 2005 à 16:55:59 | Re : probleme avec un bootloader

patatalo

Membre Club Administrateur CodeS-SourceS
re,

mbr = master boot record ( secteur de boot ou d'amorce )
ok la fonction 0eh de l'int 10h semble ne modifier aucun registre.
mov ax,4c00h; int 21h quitte un programme mais c'est une fonction DOS que tu ne pourra pas utiliser.

@++

samedi 6 août 2005 à 17:29:19 | Re : probleme avec un bootloader

sylvain16

    Pour commencer, à moins que tu es prévu d'ajouter d'autres choses à ton code et sauf erreur de ma part, tu n'a pas besoin d'initialiser ss et sp, ils ne te servent pas ici. Ensuite il ne me semble pas que mov ax, 4cH INT 10H fasse arrêter un programme.
    De plus copier/coller ton bin sur ta disquette n'est pas une bonne solution, utilise un petit programme pour copier ton bin sur le premier secteur de ta disquette, il doit s'y trouver impérativement.

Pour créer une disquette bootable, la seule chose requise est que le secteur de boot ait une taille de 512 octets et qu'a l'offset 0x1FE (octet 510), on place le word 0xAA55. Le BIOS vérifie que le premier secteur de la disquette est bien le word 0xAA55 à la fin, et s'il le trouve, il charge ce secteur en mémoire, à l'adresse 0x7C00 et JMP à cette adresse.

Tu doit placer ton secteur de boot sur le secteur 1, cylindre 0, tête 0

Lorsque le BIOS charge le secteur de boot, l'état des registres est:
DL = Lecteur sur lequel il a booté, 1h = disquette, 80h = 1er disque dur, etc
CS = 0
IP = 0x7c00

Normalement si tu écrit ton programme comme çà, çà doit fonctionner:

[BITS 16]       ; Le BIOS démarre en mode réel 16-bit
[ORG 0]        ; Data offset = 0

jmp start
message db 'Hello World", 13h, 10h, 0

start
mov ax, 0x7C0
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov si, message       ; c'est plus simple qu'écrire chaque lettre, une après l'autre
lodsb            ; charge l'octet à ds:si dans al
or al,al             ; teste si le caractère est 0
jz fin_affichage
mov ah,0eh           ; place le caractère
mov bx,0007          ; attribut
int 0x10             ; appel le BIOS
jmp message
fin_affichage:
xor ax, ax
int 16h
db 0EAh               ; Language machine pour jumper à FFFF:0000 (reboot, je sait pas comment arrêter        
                               simplement la machine)
dw 0000h
dw 0FFFFh
end start           ; pas besoin de mettre de ret: tu reboot



Pour copier le secteur sur la diquette j'ai trouvé un petit programme à compiler sous DJGPP pour DOS, mais il est pas en assembleur :-(

//***************START****************
#include <bios.h>
#include <stdio.h>
 
void main()
{
        FILE *in;
        unsigned char buffer[520];
 
        if((in = fopen("bootsect", "rb"))==NULL)
        {
                printf("Error loading file\n");
                exit(0);
        }
 
        fread(&buffer, 512, 1, in);
 
        while(biosdisk(3, 0, 0, 0, 1, 1, buffer));
 
        fclose(in);
}
//*************END****************************


Tu trouvera d'autres information sur le boot à cette adresse:

[ Lien ]

Pense à vérifier (avec un éditeur hexa) que ton Bin fasse bien 512 octets et place 0xAA55 sur les 2 derniers octets.
Tu m'en voudra pas si je ne l'ai pas essayé, je n'est pas de lecteur de disquette et j'ai pas trop le temps non plus. Dis moi si çà ne marche pas. Salut.

samedi 6 août 2005 à 17:35:48 | Re : probleme avec un bootloader

sylvain16

Une petite erreur c'est pas
message db 'Hello World", 13h, 10h, 0
mais
message db 'Hello World", 13, 10, 0
désolé


samedi 6 août 2005 à 18:49:17 | Re : probleme avec un bootloader

anonyme_man_in_this_world

re merçi pour le code mais ça marche pas : les deux compilateurs A86 et TASM generent a lot d'erreurs lors la compilation (: . je vais essayer de lire un peu le tutoriaux du site que tu m'as passé merçi @+

dimanche 7 août 2005 à 14:50:18 | Re : probleme avec un bootloader

sylvain16

J'ai testé le code sous A86, mais je ne connaissait pas la syntaxe, j'ai dut calculer les sauts et j'ai réussit à compiler un Bin mais j'ai du rectifier les jump à la main avec un éditeur hexa et w32dasm pour vérifier. Le code que je te donne ne se compile pas sous A86: jmp 0e8h ne passe pas, modifie le, tu le rectifiera à la main dans éditeur hexa.

mov ax, 07C0h
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov si, 21
lodsb
or al,al
jz 09h
mov ah,0eh
mov bx,0007
int 010h
jmp 0e8h
xor ax, ax
int 16h
db 0EAh
dw 0000h
dw 0FFFFh
db 'Hello World", 13h, 10h, 0

Ensuite sous un editeur hexa tu rajoute des 0 pour que ton Bin fasse 512 octets, et les 2 derniers tu tape 55aa, et tu devrait obtenir:


00000000 B8C0 078E D88E C0BE 2100 AC0A C074 09B4 ........!....t..
00000010 0EBB 0700 CD10 EBE8 33C0 CD16 EA00 00FF ........3.......
00000020 FF48 656C 6C6F 2057 6F72 6C64 1310 0000 .Hello World....
00000030 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000070 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000080 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000090 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000A0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000B0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000C0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000D0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000E0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000F0 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000100 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000110 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000120 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000130 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000140 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000150 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000160 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000170 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000180 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000190 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001A0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001B0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001C0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001D0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001E0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001F0 0000 0000 0000 0000 0000 0000 0000 55AA ..............U.


J'ai toujours pas pu le tester, j'espère que çà fonctionne.


mercredi 10 août 2005 à 21:00:50 | Re : probleme avec un bootloader

sylvain16

Bon alors je me suis trompé monumentalement, (comme quoi aller trop vite...). Mais cette fois ci j'ai pu tester sur une disquette. C'est pas encore parfait parce çà m'affiche un truc du genre "Hello World!!>" je sait pas pourquoi. Mais bon, çà fonctionne, à toi de paufiner.
D'abord j'ai suprimé mov fs, ax - mov gs, ax (pas compatible mode réel)

:0001.0000 B8C007                 mov ax, 07C0
:0001.0003 8ED8                   mov ds, ax
:0001.0005 8EC0                   mov es, ax
:0001.0007 BE2100                 mov si, 0021
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.0016(U)
:0001.000A AC                     lodsb
:0001.000B 0AC0                   or al , al
:0001.000D 7409                   je 0018      ; là j'avait fait un jmp vers 0000 donc çà affichait que des "H" à l'écran...
:0001.000F B40E                   mov ah, 0E
:0001.0011 BB0700                 mov bx, 0007
:0001.0014 CD10                   int 10
:0001.0016 EBF2                   jmp 000A
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.000D(C)
:0001.0018 33C0                   xor ax, ax
:0001.001A CD16                   int 16
:0001.001C EA0000FFFF             jmp FFFF:0000

et le secteur complet:

00000000 B8C0 078E D88E C0BE 2100 AC0A C074 09B4 ........!....t..
00000010 0EBB 0700 CD10 EBF2 33C0 CD16 EA00 00FF ........3.......
00000020 FF48 656C 6C6F 2057 6F72 6C64 1310 0000 .Hello World....
00000030 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000070 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000080 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000090 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000A0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000B0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000C0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000D0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000E0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000F0 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000100 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000110 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000120 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000130 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000140 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000150 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000160 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000170 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000180 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000190 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001A0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001B0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001C0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001D0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001E0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001F0 0000 0000 0000 0000 0000 0000 0000 55AA ..............U.

Voilà!


1 2

Cette discussion est classé dans : int, mov, ax, al, 10h


Répondre à ce message

Sujets en rapport avec ce message

erreur compilation [ par greg4 ] je voudrai compiler--------------------------------------.model tiny.dataHelloMessage db 13,10,'Hello World !',13,10,'$'.codeorg 100hstart: mov ax,@d loader problème de code [ par TRAX44 ] salut tout le monde !!g essayer de faire un loader (petit prog qui charge un autre prog) mais c un desartre je comprend pas très bien ce qui ne marche petit probleme de debutant [ par freekc ] j'essaie de faire un ptit prog que lorsque l'on rentre son nom prenom etc . Il y est un recapitulatif qui se mette en dessous ms lorsque que le recapi probleme de conversation de hexa en ascii [ par wapiti ] voici le programme qui converti du binaire en ascii.model small.stack;-------------------------------------------------------------------------------- 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 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 Affichage de l'heure a partir du BIOS [ par FearBlue ] Slt a tous !!!!Je debute en ASM et je desirerais afficher l'heure a partir de la lecture de l'heure du biosje vous montre mon code !!!! Affichage [ par AMENO ] Cher amis aidez moi, c'est une partie de mon examen de noel. et je suis bloquerenfin il 'sagit d'un programme que l'on doit entrer jsuqu a 32 caracter Probleme de clic !!!! [ par mgorillaz ] Bonjour je suis debutant en assembleur et je dois faire une calculatrice mais sous certaine conndition et je n'arrive pas du tout a gerer mes clics !! secteur boot : afficher un message [ par sajaris ] bonjourje suis ADABLA et je debute en OS, il y a 1 semaine. je voudrai SVP, votre avis sur mon petit code de boot.En fait je voudrai afficher un messa


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


LG KP501

Entre 9€ et 159€


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