begin process at 2010 03 19 09:18:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Autres asm

 > 

secteur boot : afficher un message


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

secteur boot : afficher un message

mercredi 23 mars 2005 à 17:53:59 | secteur boot : afficher un message

sajaris

bonjour
je 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 message au demarrage mais je passe par une methode qui marche certes mais ne me plait pas beaucoup.
Vous avez une autre methode?
je vous envoie le code que j'utilise

[bits 16]
[org 100h]

;*** cette partie me permet de sauver sur le secteur 1 de la disquette ***
mov ax,0x00
mov dl,0x00
int 0x13
mov ax,0x301
mov bx,start
mov dx,0x0000
mov cx,0x0001
int 0x13
ret
;*********************************************************

;********** partie qui est sauvée sur le secteur 1 *********
start:

mov ah,0h   ; je rentre en mode graphique 320x200x256
mov al,13h
int 10h

mov ah,0x0e ; je me prepare a ecrire un caractere
mov bh,0x00
mov bl,0x07

message:
mov al,'O'    ; debut de mon message
int 0x10       ; mais cela se fait caractere par caractere
mov al ,'S'
int 10h
mov al,' '
int 0x10
mov al ,'V'
int 10h
mov al,'E'
int 0x10
mov al ,'R'
int 10h
mov al,'S'
int 0x10
mov al ,'I'
int 10h
mov al,'O'
int 0x10
mov al ,'N'
int 10h
mov al,' '
int 0x10
mov al ,'1'
int 10h
mov al,'.'
int 0x10
mov al ,'0'
int 10h       ; a partir d'ici je ne sais pas comment revenir a la ligne apres

times 510-($-start) db 0
db 0aah
db 55h
;*********************     fin       *******************

voila le code. je precise que j'ai essayé ce code d'avord à partir du label message ci dessus:

message:
      msg db "OS version 1.0",10,13,0
      mov si,msg

      mov ah,0x0e
      mov bh,0x00
      mov bl,0x07
      continue:
      lodsb
      cmp al,0
      je fin
      int 10h
      jmp continue
fin:

times 510-($-start) db 0
db 0aah
db 55h

et avec ce code ca ne marche pas du tout. Il n'affiche rien du tout.

Merci beaucoup de m'aider, vraiment

mercredi 23 mars 2005 à 18:52:37 | Re : secteur boot : afficher un message

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

tu ne creera jamais un secteur de boot avec une origine de 0x100. Le Bios charge ton mbr a l'offset 0x7C00. Donc il faut mettre [ORG 0x7C00]

ensuite, tu integre le binaire de ton mbr dans ton programme com.

de plus, il faut savoir que le code doit commencer a 0x7C00. Si tu met une chaine de caractere, tu cree un code aléatoire qui bien sur plantera a l'execution.

la bonne methode c'est:
jmp moncode
msg db "blablablabla",13,10,0
moncode:
mov si,msg
[ici c'est les mov et tout et tout]

ou alors:

moncode:
mov si,msg
[ici c'est les mov et tout et tout]

msg db "blablablabla",13,10,0

@++
jeudi 24 mars 2005 à 13:38:33 | Re : secteur boot : afficher un message

sajaris

merci de ta reponse patatalo. je vais refaire mon code avec tes indications.
Juste une précision. dois je initialiser mes segments (DS et ES):
1ere maniere:
code:

[bits 16]
[org 0x7C00h]  

moncode:
      mov ax,cs
      mov ds,ax
      mov es,ax

      mov si,msg
      mov ah,0x0e
      mov bh,0x00
      mov bl,0x07
      continue:
      lodsb
      cmp al,0
      je fin
      int 10h
      jmp continue
fin:
msg db "blablablabla",13,10,0

times 510-($-start) db 0
dw 0x0aa55h

ou 2eme maniere:
code:

[bits 16]
[org 0x7C00h]  

moncode:
      mov ax,0x7C00     
      mov ds,ax
      mov es,ax

      mov si,msg
      mov ah,0x0e
      mov bh,0x00
      mov bl,0x07
      continue:
      lodsb
      cmp al,0
      je fin
      int 10h
      jmp continue
fin:
msg db "blablablabla",13,10,0

times 510-($-start) db 0
dw 0x0aa55h

ton aide m'es vraiment necessaire. Je te met au courant des resultats de ton aide.

jeudi 24 mars 2005 à 18:16:44 | Re : secteur boot : afficher un message

patatalo

Membre Club Administrateur CodeS-SourceS
re,

pour acceder a ta memoire en mode réel, tu utilise un segment et un offset.
l'adresse physique = segment * 16 + offset.
concretement, quand tu ecris "mov ax,[bx]" tu ecris implicitement "mov ax,[ds:bx]"
ds est utilisé par defaut pour tout les acces memoire sauf pour le registre bp qui lui utilise le segment ss par default.

donc:
soit tu mets cs = ds = es = 0 et ton offset sera de 0x7C00
soit tu mets cs = ds = es = 0x7C0 et ton offset sera 0
soit tu mets cs = ds = es = 0x7B0 et ton offset sera de 0x100
...

fait une recherche sur "Art of Assembly" ou un truc comme ça sur google.

@++








jeudi 24 mars 2005 à 18:46:15 | Re : secteur boot : afficher un message

sajaris

slt,
j'irai jeter un coup d'oeil sur ce site, je le connaissait deja, mais je vais le relire.
Pour revenir a mon probleme, j'ai fait ce que tu dis. Ca ne plante plus, OK. Mais aucun message. ca charge mon secteur, ca passe en mode gtaphique 320x200x256( refere premier code plus haut) et plus rien. Le trou noir. j'ai juste fait:

[BITS 16]
[ORG 0x7C00]
;*** cette partie me permet de sauver sur le secteur 1 de la disquette ***
mov ax,0x00
mov dl,0x00
int 0x13
mov ax,0x301
mov bx,start
mov dx,0x0000
mov cx,0x0001
int 0x13
ret

moncode:

mov ah,0h   ; je rentre en mode graphique 320x200x256
mov al,13h
int 10h

mov si,msg
[les movs.....]

msg db "blablablabla",13,10,0
times 510-($-start) db 0
dw 0x0aa55h

je soupsonne le code qui charge sur le premier secteur mbr, mais quant j'affiche caractere pas caracter c'est OK, mais enervant si le message est long. Je ne voudrai surtout pas t'embeter, mais  tu n'aurais pas un code simple qui fonctionne, un code pour NASM?
SVP ne vous faché pas pour des trucs aussi simple, c'est important pour moi.

vendredi 25 mars 2005 à 12:30:30 | Re : secteur boot : afficher un message

patatalo

Membre Club Administrateur CodeS-SourceS

re,

voilà un code mbr de disquette commun qui charge un kernel stocké a partir du secteur 2:
une fois compilé, nous l'appelerons mbrD7.bin

[ORG 0]
[BITS 16]
%define pb  byte
%define pw  word
%define pd  dword

%define pushb push byte
%define pushw push word
%define pushd push dword

start:
 jmp  .mbrcode
 nop
.name
 db  "TOMFAT  "
.SecSize
 dw  512
.ClustSize
 db  1
.RsvdCnt
 db  1
.FatCnt
 db  2
.RootCnt
 dw  224
.TotSec16
 dw  2880
.Media
 db  0xF0
.FatSize16
 dw  9
.TrkSize
 dw  18
.HeadCnt
 dw  2
.HiddCnt
 dd  0
.TotSec32
 dd  0
.DrvNum
 db  0
.Reserved1
 db  0
.BootSig
 db  0
.mbrcode
 mov  ax,0x7F0
 mov  dx,0x7C0
 cli
 mov  ss,ax
 xor  sp,sp
 mov  es,ax
 mov  ds,dx
 sti
 cld

 pushw 5
 pushw [kernsize]
 pushw 0x100
 pushw 0
 pushw 2
 mov  bp,sp

 lea  si,[azlk]
 call outs

.0
 dec  pw[bp+8]
 je  .4
.1
 lea  si,[azpt]
 call outs
 mov  ax,0x201
 mov  bx,[bp+4]
 mov  dx,[bp+2]
 mov  cx,[bp]
 int  0x13
 jc  .1
 cmp  pb[bp],18
 jne  .2
 inc  pb[bp+1]
 and  pb[bp],0
.2
 cmp  pb[bp+1],80
 jne  .3
 and  pw[bp],0
 inc  pb[bp+3]
.3
 inc  pb[bp]
 add  pw[bp+4],0x200
 dec  pw[bp+6]
 jne  .1

 add  sp,10

 lea  si,[azok]
 call outs

 push ss
 push ss
 pop  ds
 pushw 0x100
 xor  ax,ax
 xor  bx,bx
 xor  dx,dx
 xor  cx,cx
 xor  si,si
 xor  di,di
 xor  bp,bp
 retf

.4
 lea  si,[aznok]
 call outs
 xor  ax,ax
 int  0x16
 int  0x19

outs:
 cmp  pb[si],0
 mov  al,[si]
 je  .1
 mov  ah,0xE
 int  0x10
 inc  si
 jmp  outs
.1
 ret
azpt:
 db  ".",0
azlk:
 db  "Load kernel",0
aznok:
 db  "n"
azok:
 db  "ok",13,0

 times (508-($-start)) nop
kernsize:
 dw  0
 db  0x55,0xAA

voilà le code qui permettra de creer la d7 boot et que nous appelerons une fois compilé mkboot.com:

%define pb  byte
%define pw  word
%define pd  dword

%define pushb push byte
%define pushw push word
%define pushd push dword

[BITS 16]
[ORG 0x100]
mkboot:
 mov  pw[bootdata+0x1FC],((kernpad-kerndata)/512)+1
 lea  bx,[bootdata]
 mov  dx,0
 mov  ax,0x301
 mov  cx,1
 int  0x13
 jc  mkboot

 pushw ((kernpad-kerndata)/512)+1
 pushw kerndata
 pushw 0
 pushw 2
 mov  bp,sp

.1
 mov  ax,0x301
 mov  bx,[bp+4]
 mov  dx,[bp+2]
 mov  cx,[bp]
 int  0x13
 jc  .1
 cmp  pb[bp],18
 jne  .2
 inc  pb[bp+1]
 and  pb[bp],0
.2
 cmp  pb[bp+1],61
 jne  .3
 and  pw[bp],0
 inc  pb[bp+3]
.3
 inc  pb[bp]
 add  pw[bp+4],0x200
 dec  pw[bp+6]
 jne  .1
 
 add  sp,8
 ret

bootdata:
 incbin "mbrD7.bin"
kerndata:
 incbin "kernel.com"
kernpad:
 times 512 nop
kernend:

le fichier batch pour compiler tout ça:
\bin\nasm.exe -f bin -o mbrD7.bin mbrD7.asm
\bin\nasm.exe -f bin -o kernel.com kernel.asm
\bin\nasm.exe -f bin -o mkboot.com mkboot.asm

cela te permettra de créer et charger un kernel d'une taille max de 60Ko environ.

@++

vendredi 25 mars 2005 à 14:19:12 | Re : secteur boot : afficher un message

sajaris

re,

merci, je vais etudier ce code de tres pres. Avec un chargement de kernel c'est un peu plus compliqué pour moi mais pas impossible, je voulais d'abord comprendre le chargement d'une chaine de caractere simple. Je suis content d'avoir en plus un chargement de kernel. Comme on le dis chez nous (chez d'autres aussi) tu m'a donné le beurre et l'argent du beurre. Mais bien sur attends toi a d'autres questions mais cette fois ci elles refleteront une evolution que tu m'a apporté. Merci PATATALO. see you
vendredi 25 mars 2005 à 18:03:50 | Re : secteur boot : afficher un message

sajaris

je crois que vous aurez du commenter un peu votre code, il y a trop de  dans ma tete....
le l'ai imprimé pour mieu l'exploiter. mais j'ai compris le principe, enfin je crois :

-declaration des variables à labels
.name
db "TOMFAT"
....................
.Bootsig
db 0

-puis initialiser les registres segments en desactivant les interruption (CLI)
la pile va de 0h à 7F0h (mais je pensais que ss contenait la faible valeur (0h) et sp la grande valeur ( 7C0h), et vous avez fait l'inverse. A moins que ca n'ai pas d'importance.
es et ds pointe vers 07C0h, où est chargé mon secteur lors du boot, si j'ai bien compris vos explication.

-mais pourkoi :
cld
 pushw 5
 pushw [kernsize]
 pushw 0x100
 pushw 0
 pushw 2
 mov  bp,sp

la fonction outs sert à imprimer tout ce qui est texte sur l'ecran.
- on affiche apres "Load kernel"
-pw[bp+8] signifie word[bp+8] si je ne me trompe pas. mais j'ai pas bien compris les bp+4 ou bp+8 etc.

voila c'est tout pour le mbrD7.bin
pour le mkboot.com, alors là c'est la cata.
pourkoi heuuu !!!, pourkoi toutes instructions? et pourtant c'est la partie que je veux surtout comprendre pour charger mon mbr, car bochs ne marche pas bien chez moi.

Merci de prendre de temps en temps votre temps pour m'expliquer et aussi me donner des codes, je serai peut etre utile plus tard. Ne vous decouragé pas je vais finir par comprendre et reussir..
a bientot PATATALO
jeudi 31 mars 2005 à 20:02:59 | Re : secteur boot : afficher un message

sajaris

merci beaucoup de ton aide. J'ai passé mon temps à etudier ton code et d'autres encore. En fait le probleme est que j'inclus le code qui charge sur le premier secteur dans le meme fichier que le code du boot. Je les ai separé en deux fichier comme tu l'a fait: boot.bin et mkboot.com. Je t'envoie les sources.  Franchement merci.  le resultat est cool.  et comme c'est mon premier boot diskette, je suis content . peut etre que mon code sera util a d'autres.

Je vous envoie les sources que vous verrez. j'espere que cela va aidez ceux qui sont deja dans le meme probleme que moi, a s'en sortir.
au fait comment on envoie les sources zippées  ou dois je ecrire le code directement ici?


Cette discussion est classée dans : message, int, mov, al, 10hmov


Répondre à ce message

Sujets en rapport avec ce message

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 !!!! 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 message d'erreur [ par kaka83185 ] slt a tous, je suis débutant en langage assembleur,j'essaye de faire mon premier programme en MASM, et c'est en fait l'addition d'un nombre avec un au un code en assembleur [ par tatouna ] salut à tous, je suis débutante en asm donc j'ai un problème et je souhaite que vous m'aidiez j'ai une chaine de caractère (une date) et je veut la p Affichage de texte [ par ghuysmans99 ] Bonjour à tous,Je suis en train de créer un OS (pour l'instant, 16 bits) et mes routines d'affichage ne fonctionnent pas ...Voilà le code en question probleme d'affichage d'une soustraction [ par calimerros ] [u]Bonjour à tous et à toutes.[/u] Voici un programme que je réalise et je bloque au niveau de l'affichage d'une soustraction (SUB). Pour moi mon pr Affichage décroissant et alphabétique de 2 listes(Nom_Prénom et Note) [ par m_didi9 ] [code=autre]Data SEGMENT Mess1 DB 10,13, 'Entrez la liste des Noms :' DB 10, 13, '$' Mess2 DB 'Entrez la liste des Notes :' DB 10, 13, '$' Mess3 Lecture de DTA [ par mouadestla ] Bonsoir , je débute en assembleur , j'esseye de coder en 16 bits un petit programme qui fait appele à l'interuptions 21h : 4Eh du DOS qui cherche un f Mon fichier Mp3 [ par li2k ] Salut!J'aimerai créer en assembleur un programme qui lance la lecture d'un fichier mp3 (Juste pour faire mon réveil personnalisé  sur ordi)Mais bon le AT&T erreur de compilation etc... [ par maminovadu75 ] Bonjour, j'aimerais me mettre a l'assembleur mais j'ai quelque problème.voici mon code morceau de code pour trier un tableau de int : ( mélange de C/C


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales