cs_Stormy
Messages postés255Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention16 janvier 2007
-
26 août 2004 à 00:04
cs_meganet
Messages postés1Date d'inscriptionjeudi 9 novembre 2000StatutMembreDernière intervention11 juin 2005
-
11 juin 2005 à 23:48
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.
A voir également:
Tentative de chargement d'un programme de format incorrect
ToutEnMasm
Messages postés587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 27 août 2004 à 14:21
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
SystemOfAXav
Messages postés44Date d'inscriptiondimanche 2 mai 2004StatutMembreDernière intervention15 avril 2005 7 oct. 2004 à 11:48
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 !
Vous n’avez pas trouvé la réponse que vous recherchez ?
; 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!