Sektoren lesen klappt nicht



  • Hallo! Ich bins mal wieder - wer auch sonst!Ich habe versucht mit
    mov ah, 02h
    mov al, 1
    mov ch, 0
    mov cl, 2
    mov dh, 0
    mov dl, 0
    mov ax, 0x9000
    mov es, ax
    xor bx, bx
    int 0x13

    Den 2. Sektor auszulesen, in dem mein Kernel steht! Nur setzt er mir immer das Carry Flag => Fehler is aufgetreten! Aber wieso denn? *heul*

    Kevin



  • Logisch. Du weist AH den Wert 2 für Sektor lesen zu, überschreibst ihn aber dann indem du AX benutzt um ES auf deinen gewünschten Wert zu setzen. Es wird also eine falsche Interruptfunktion aufgerufen.



  • HI! jo sorry hast recht...bin blöd 😞
    Aber es klappt immernoch nicht! Ich habs mal hochgeladen in der Hoffnung jemand schaut sich den Code mal an!
    Mein Bootsektor: http://www.geocities.com/surkevinnew/boot2.asm

    Mein Kernel: http://www.geocities.com/surkevinnew/h.asm

    Dann habe ich beide zu bin files kompiliert und sie per copy boot2.bin + h.bin boot.img zusammengefügt und auf Diskette geschrieben!
    Wenn ich nun den Rechner boote ist es extrem komisch...er scheint zu start_kernel zu kommen aber danach ist er plötzlich wieder am Anfang des Bootsektors und ich bekomm die Meldung Reseten ging die ich auch am Anfang des Bootsektors bekomm :///

    HILFE

    Danke

    Kevin



  • Nun klappt zwar das Kernel laden aber der Bootsektor wird immer 2mal ausgeführt und ich bekomm so komische wirre Strings ausgegeben!!!
    Code:
    http://www.geocities.com/surkevinnew/bootup.asm

    Bitte helft mir 😞

    Kevin



  • Wieso jumpst du nicht einfach zum Kernel, und verwendest eine umständliche Methode mit push + ret? Jump doch einfach mit jmp 0x9000:0x0000
    Wegen den Messages: Wenn ich mich nicht täusche vergisst du total ds und es auf gültige Werte zu setzen, das kann dann natürlich nicht funktionieren, die haben ja nicht automatisch den Wert 0x07C0, das musst du schon selber machen.
    Und was soll in der Prozedur Message das "or al, al"? Damit veränderst du al überhaupt nicht, du meintest bestimmt "xor al, al".
    So, das sind die Fehler die mir auf den ersten Blick auffallen, nicht auszuschließen dass da noch mehr sind. Meinst du nicht ein OS ist im Moment nicht einfach etwas zu hoch gegriffen für dich? Probier's doch erstmal mit kleineren Programmen. Ist nicht persönlich gemeint, aber du scheinst noch nicht sher viel Erfahrung mit Assembler zu haben.

    EDIT: Noch was fatales: Deine Strings sind gar nicht mit 0 abgeschlossen, woher soll die Message-Prozedur wissen wo der String vorbei ist?

    [ Dieser Beitrag wurde am 13.02.2003 um 22:09 Uhr von jantoware editiert. ]



  • Hallo!
    Ich lerne ASM nur um OS zu proggn....C++ kann ich nämlich ziemlich gut...ein jmp 9000:0000 hat bei mir nicht funktioniert! Naja ich prog mit wem zusammen...der hat geschrieben or al,al...ich werds mal mit xor probieren! wir hatten es und ds auf 07C0h habs aber zum testen rausgenommen 🙂 das mit dem 0 stimmt....habs aber aus nem anderen OS genommen da war das auch so 😕
    Ich werds nun mal testen...danke aber auf jeden Fall...aber sowas wie ich bin net geeignet kann ich net hören 😞

    Kevin



  • OS proggen (selbst wenn es noch so klein ist) ist aber eine extrem anspruchsvolle Aufgabe... Wenn man vorher mit Assembler nicht viel Erfahrung gesammelt hat, ist es so als wenn du in einem Auto zwar die theoretische Bedienung kennst aber praktisch noch nie gefahren bist, und dann gleich beim ersten mal versuchst auf der Autobahn zu fahren...


Anmelden zum Antworten