Autor Thema: Problem beim assemblen vom bootloader  (Gelesen 7233 mal)

hackgod

  • Beiträge: 70
    • Profil anzeigen
Gespeichert
« am: 04. May 2005, 16:19 »
Hi zusammen.
Ich hab ein Problem: ich hab mir schon ein paar bootloader
zurechtgeproggt und wollte nun mal fat12 ausprobieren.

Da hab ich mir gedacht: schreibste denn quelltext von teejay ab
(von wegen lerneffekt 8) ), wollte dann assemblen mit
nasm -f bin -o boot_fat.bin boot_fat.asm
Dabei meldet er mir dann folgendes:
boot_fat.asm:285: error: TIMES value -1 is negative

voran kann das liegen?  :(

Danke im voraus

P.S.: echt geiles Forum. hilft echt gut.

mfg

hackgod

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #1 am: 04. May 2005, 16:28 »
ganz einfach bei der times angabe wäre der bootloader schon grösser als du dort angibst, mit anderen worten wenn du den auf 512 byte auffüllen willst er aber schon mehr als 512 byte hat gibts nen fehlern, du musst irgendwo ein paar bytes einsparen, bei TJ's originalem bootloader geht das ziemlich einfach, da meistens sehr platzverschwenden geproggt wurde^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 04. May 2005, 16:28 »
Daran, dass der Code ein Byte zuviel hat :D Er darf nur 512 Byte haben.

hackgod

  • Beiträge: 70
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 04. May 2005, 16:37 »
hm, daran hab ich auch schon gedacht.
nur weiss ich leider nich wie ich da noch ein paar
bytes einsparen könnte :-s  :-k

die kommentare brauch ich nich rauslöschen oder?
das macht nasm doch automatisch mein ich.
wenn ich ne datei include, muss ich dann die befehlszeile
ändern?

mfg

hackgod

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 04. May 2005, 17:30 »
Die Kommentare werden vor dem asseblieren automatisch entfernt. bei nem Include musst du nix an der Befehlszeile ändern.

@Platz sparen: Da gibts viele Tricks. Am einfachsten ist es Strings zu verkürzen. Was auch hilft ist wenn du statt mov ax,0 das hier schreibst: xor ax,ax.
Lass einfach das times weg. Dann sollte er es assemblieren und poste mal wie groß die Datei ist (damit man mal sieht obs hoffnunglos zu groß ist ;) ).

hackgod

  • Beiträge: 70
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 04. May 2005, 17:37 »
das gibt's nicht!!!!
werden whitespaces ignoriert? ich hoffe ja.
denn die datei is nachm assemblieren GENAU 513 Byte groß!!!
 :?  :?  :?

soll ich den source eben posten?

// EDIT:
hat sich erledigt. hab noch ne mov ax,0 gefunden :wink:
funzt super mit fat12

mfg

hackgod

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 04. May 2005, 17:45 »
Leerzeichen werden ignoriert (außer in Strings). Wenn du meinst es gibt ne Stelle im Code die man optimieren kann wärs gut wenn du die postest.

hackgod

  • Beiträge: 70
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 04. May 2005, 17:52 »
ich hab bei teejay's funktion ExecuteKernel
das mov ax, 0 gefunden, also:

ExecuteKernel:
mov ax, 0x1000
push         ax
mov ax, 0
push         ax
retf


den hab ich dann durch diesen ersetzt:

ExecuteKernel:
mov ax, 0x1000
push ax
xor ax, ax
push ax
retf

funzt bis jetzt ganz gut

mfg hackgod

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 04. May 2005, 17:59 »
Um den Hintergrund zu erklären:
Aus mov ax, 0 wird in Maschinensprache das hier:
B8 00 00
Das B8 ist der eigentliche Befehl, also "mov ax,". Die beiden 00 stellen den Wert da der in das Register geschrieben wird. Also insgesamt 3 Byte.

Aus xor ax, ax wird das:
31 C0
Also 1 Byte gespart.

Es gibt noch eine Reihe anderer Tricks in dieser Art. Aber erst mal sollte man das so bei allen mov ?x, 0 machen, also auch bx,cx und dx.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #9 am: 04. May 2005, 18:22 »
Was viel bringt ist auch die funktionsanfangsequenz
mov ebp,esp push esp oder so ähnlich durch enter 0,0 zu ersetzen
am ende das selbe durch leave dadurch wird einges gespart.
ich habe durch einige andere optimierungen die sich auch auf die algorithmen beziehn die grösse um ein viertel reduziert^^
Um das so alles zu finden muss man asm allerdings ziemlich perfekt können
es gibt viel mehr noch um code zu sparen aber das lass ich hier mal weg^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

hackgod

  • Beiträge: 70
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 04. May 2005, 20:51 »
oh mann, da hat man grad ein erfolgserlebnis mit fat12 und dann...

Ich hab versucht die Konsole unter Ressource-Center zu implentieren.
da passiert gar nix unter bochs, die bootlog.txt wird tierisch gross(ca. 40 mb) wo dann hauptsächlich drin steht:

BOUND: fails bounds test

woran kann das liegen?

mfg

hackgod

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 04. May 2005, 21:11 »
Ich vermute das das daran liegt das du an den Anfang der Binärdatei springst, da stehen aber bei der Console noch Daten.

Ansonsten noch nen Tipp: Schreib mehr selbst ;) Bootloader ist okay, aber den Kernel und die Console würd ich komplett selbst schreiben. Und dann solltest du in den PMode wechseln.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #12 am: 05. May 2005, 13:02 »
das heisst das irgendwo im code ein boundtest (grenzen) durchgeführt wird der fehlschlägt kann viele gründe haben
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

 

Einloggen