begin process at 2010 03 10 23:45:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Forum general 80xxx

 > 

Charger un noyau


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

Charger un noyau

jeudi 26 août 2004 à 00:04:16 | Charger un noyau

Stormy

Je voudrais charger le deuxième segment d'une disquette pour lancer un noyau OS rudimentaire. Sur le premier segment, j'inscris donc le code de chargement. Or, mes entrées sont-elles justes? Merci ++

xor Dx, Dx ; XORisation de Dx (Lecteur Disk principal).
mov Ah, 02h ; Lecture pour mise en mémoire.
mov Al, 01h ; Lecture d'un seul secteur.
mov Bx, 7E00h ; Offset [Bx] de la zone mémoire.
mov Cx, Dx ; Lecture de la piste première.
mov Cl, 02h ; Lecture du secteur deuxième.
mov Es, Dx ; Offset [Es] de la zone mémoire.
Int 13h ; Notre interruption sur support de donnée.
(...)
jmp 7E00h ; Jump pour exécution du code précédement lu.
vendredi 27 août 2004 à 14:21:08 | Re : Charger un noyau

ToutEnMasm

Salut,
Pour faire une telle opération résolu et controler régulièrement depuis belle lurette , inutile d'inventer la roue de nouveau.Se munir d'un désassembleur , éventuellement des symboles téléchargeables chez microsoft,et ........... c'est presque terminé.
ToutEnMasm
vendredi 27 août 2004 à 21:08:17 | Re : Charger un noyau

Stormy


Je comprend pas ce que tu me dis. Tu es sûr de pas t'être trompé de post.
mardi 7 septembre 2004 à 14:56:44 | Re : Charger un noyau

patatalo

Membre Club Administrateur CodeS-SourceS

salut,

si mes souvenirs sont bons,

dl = 80h pour peripheriques IDE
dl = 00h pour peripherique FLOPPY

(es = 0 a l'entrée du MBR)

xor cx,cx
mov ax,0201h ; lecture 1 secteur
mov es,cx ; maintenant c'est sur.
mov dx,cx ; si floppy
mov dl,80h ; si HDA (81h pour HDB)
mov bx, 7E00h
mov cl, ah ; charge le deuxieme secteur
Int 13h

si tu veux pas t'embeter, tape "int 13h" dans google
( valable pour n'importe quelle interruption )

@++
jeudi 7 octobre 2004 à 11:48:30 | Re : Charger un noyau

SystemOfAXav

Si mes souvenirs sont exacts, le numero du lecteur (HD ou disquette)
est dans le registre dl au démarage.

Le mieux c'est de le stocker dans un variable au tout début de ton code (avant de modifier dx)

Et tu le récupère quand tu veux charger ton noyau.

Sinon pour le reste, verifie que CS est bien à zero pour ton bootLoader:
c a d que ton code commence bien a 0x0000 : 0x7C00 et pas 0x07C0 : 0x0000
c ad que tu as mis org 0x7C00 et pas 0x07C0 (le bootloader va s'executer dans les deux cas.)

Mais pour le deuxième cas, je te conseille de mettre jmp 0x0 : 0x7E00.

Voili,voilou.....
@+


Voir Redmond (en flammes) et mourir !
samedi 11 juin 2005 à 23:48:50 | Re : Charger un noyau

meganet

Salut,
voilà le code que j'utilise pour booter sur le 2eme secteur d'un disk quel qu'il soit!

%define BASE 0x100 ; 0x0100:0x0 = 0x1000
%define KSIZE 1

[BITS 16]
[ORG 0x0]

jmp start
%include "UTIL.INC"
start:
 mov [bootdrv],dl ; recuparation de l'unite de boot

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

; affiche un msg
 mov si,msgBoot
 call afficher

; charger le noyau
 xor ax,ax
 int 0x13

 push es
 mov ax,BASE
 mov es,ax
 mov bx,0
 mov ah,2
 mov al,KSIZE
 mov ch,0
 mov cl,2
 mov dh,0
 mov dl,[bootdrv]
 int 0x13
 pop es

; initialisation du pointeur sur la GDT
 mov ax,gdtend ; calcule la limite de GDT
 mov bx,gdt
 sub ax,bx
 mov word [gdtptr],ax

 xor eax,eax  ; calcule l'adresse lineaire de GDT
 xor ebx,ebx
 mov ax,ds
 mov ecx,eax
 shl ecx,4
 mov bx,gdt
 add ecx,ebx
 mov dword [gdtptr+2],ecx

; passage en modep
 cli
 lgdt [gdtptr] ; charge la gdt
 mov eax,cr0
 or ax,1
 mov cr0,eax  ; PE mis a 1 (CR0)

 jmp next
next:
 mov ax,0x10  ; segment de donne
 mov ds,ax
 mov fs,ax
 mov gs,ax
 mov es,ax
 mov ss,ax
 mov esp,0x9F000 

 jmp dword 0x8:0x1000    ; reinitialise le segment de code


;--------------------------------------------------------------------
bootdrv: db 0
msgBoot db "Chargement du noyau et passage en 32 Byte. Veuillez patianter...",13,10,0

;--------------------------------------------------------------------
gdt:
 db 0,0,0,0,0,0,0,0
gdt_cs:
 db 0xFF,0xFF,0x0,0x0,0x0,10011011b,11011111b,0x0
gdt_ds:
 db 0xFF,0xFF,0x0,0x0,0x0,10010011b,11011111b,0x0
gdtend:

;--------------------------------------------------------------------
gdtptr:
 dw 0 ; limite
 dd 0 ; base


;--------------------------------------------------------------------
;; NOP jusqu'a 510
times 510-($-$$) db 144
dw 0xAA55

Voilà!
Et esque quelqu'un pourrai m'aider à faire  un os open source?
Si quelqu'un est ok et si ça interresse quelqu'un tous sur:
http://forum.site-meganet.com/forum.php?fid=19.
Voilà!
Salut!

Il faut le compiler avec NASM.
Pour le télécharger pour windows avec le fichier util.inc aller sur:
http://serveur.site-meganet.com/os/compilateur.zip.
Voilà!



Cette discussion est classée dans : lecture, mov, charger, dx, noyau


Répondre à ce message

Sujets en rapport avec ce message

Simple addition [ par nostra ] Big totoJe n'arrive pas à afficher les valeurs A (=3) et B(=2) ainsi que le résultat de l'addition. Merci de trouver le ou les erreurs commises.;----- Addition pourtant simple [ par nostra ] Big totoJe n'arrive pas à afficher le résultat de l'addition malgré les remarques de Nemesis. Merci de trouver le ou les erreurs commises. ;---------- 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 Ennoncés à corriger svp :-) [ par did2604 ] Bonjour à tous,Mon professeur m'a demandé de convertir les énoncés (en langage C) suivants en assembleur, quelqu'un aurait-il la gentilesse de me les lecture / ouverture d'un fichier txt en assembleur [ par rana ] est ce quelaqu un pourrait m aider a corriger ma macro de lecture d'un fichier txt et l'ouverture d'un fichier txt, voila les macro (pb au niveau du lecture d'un fichier txt [ par rana ] est ce que quelqu un pourrrait me corriger ma macro pour lire un fichier txt qui ne marche pas c tres important merci ;lecture dans le fichier1macro L 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 pb int 21h ah=0ah [ par mat74 ] salut a ts ,voila j'ai fais un programme qui est censé lire une chaine entré par l'utilisateur et ensuite la reafficher . Il me demande bien d'entré u [NASM] TSR [ par sirozz ] Slt à tous,voila, j'essaye de capturer les événements clavier grâce à l'interruption 09h et un programme TSR, j'ai essayé sur 2000, sur XP et j'ai tél


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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,905 sec (3)

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