Autor Thema: Zu anderen Dateien springen !?  (Gelesen 5453 mal)

syxce

  • Beiträge: 45
    • Profil anzeigen
Gespeichert
« am: 07. December 2005, 12:45 »
Hallo,
ich habe wieder einmal ein problem.
Ich habe einen bootloader den ich ja bereits mehrmals gepostet habe und ich möchte nun das dieser bootloader meine kernel1.bin lädt (macht er auch noch) und von dieser kernel1.bin möchte nun weiter zu einer weiteren kernel Datei, aber wie geht das, wahrscheinlich mit einem jmp Befehl ?
Der Bootloader müsste doch am Anfang alle Dateien irgendwo in den Speicher laden oder, jetzt würde ich gerne wissen wie ich eine weitere Datei in Speicher lade (mit der bootloader.bin glaube ich mal) und dann dort hin springen (von der kernel1.bin aus) kann ?
Für etwas code wäre ich sehr dankbar ?
danke

[MM]

  • Beiträge: 130
    • Profil anzeigen
    • www.mmcoding.eu
Gespeichert
« Antwort #1 am: 07. December 2005, 15:46 »
Ich weiß zwar nicht genau ob du das meinst, aber ich lade zB mit meinem Programm im Bootsektor den Bootloader an die Adresse 0x70000 und der läd dann alle weiteren benötigten Dateien wie zB den Kernel usw. und zum Bootloader springe ich mit:
jmp 0x7000:0x0000

MM

syxce

  • Beiträge: 45
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 07. December 2005, 17:09 »
Ja das ist mir klar, aber wie lade ich eine weitere Datei in den Speciher zum Beispiel Kernel2.bin und wie lautet ann der jmp Befehl um die Datei in Assembler zu erreichen ?

danke mfg syxce

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 07. December 2005, 17:22 »
Ich würde denken, genauso wie der Bootsloader die erste Datei (Kernel)lädt. Du lädst dann die gewünschte Datei an eine Adresse z.B. 0x8000. Um dann dorthin zu springen schreibst du "jmp 0x8000".
Aber wenn du im PM bist, geht das nicht. Dann musst du die zu laden gewünschte Datei vor dem PM-Jump nach (wie gesagt) 0x8000 laden. Nach dem PM kannst du dann immer noch "jmp 0x800" schreiben.

Dazu müsstest du allerdings wissen, auf welchen Sektoren der Diskette sich die gewünschte Datei befindet. Am einfachsten schreibst du den Inhalt der "img-Datei" der gewünschten Datei hinten an die img-Datei deiner Hauptdatei.

Gruss
Nooooooos

syxce

  • Beiträge: 45
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 09. December 2005, 12:17 »
Ich habe nur eine .img Datei falls du das mit den letzten beiden Sätzen sagen willst.
Naja meine kernel1.bin wird von der Bootloader.bin an die Addresse 0x1000 geschrieben, dass alles geschieht noch vor dem PM. Jetzte hätte ich schon probiert die kernel2.bin (c-kernel) an die Adresse 0x8000 zu schreiben und dann in der kernel1.bin mit dem Befehl jmp 0x8000 dort hin zu gelangen, das geht nicht, da ist wieder das gleiche Problem das ich schon mal hatte, der Bootloader schreibt lediglich Loading und resetet dann, als würde er an der Adresse 0x8000 nichts finden.
Hier mal mein Bootloader vll kann mir ja jemand ein Code Beispiel geben wie das funktionieren könnte, danke

org 0x7C00

start:

cli
mov ax, 0x9000
mov ss, ax
mov sp, 0
sti

mov [bootdrv], dl

call kernel

mov ax, 0x1000
mov es, ax
mov ds, ax
push ax
mov ax,0
push ax
retf

bootdrv db 0
loadmsg db "Loading...",13,10,0

putstr:
lodsb
or al, al
jz short putstrd

mov ah, 0x0E
mov bx,0x0007
int 0x10
jmp putstr
putstrd:
retn

kernel:

push ds
mov ax, 0
mov dl, [bootdrv]
int 13h
pop ds
jc kernel

load:
mov ax,0x1000
mov es, ax
mov bx,0

mov ah, 2
mov al, 5
mov cx, 2
mov dx, 0
int 13h
jc load
mov si, loadmsg
call putstr
retn

times 512-($-$$)-2 db 0
dw 0AA55h

 

Einloggen