tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
14
ZUGRIFFE
951
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    TheComputaNerd TheComputaNerd ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    33
    Hallo, ich möchte Programme in meinem OS erstellen, die aber unabhängig vom Kernel sind. Ich versuche z.B.:ein kleines Hallo Welt Programm zu öffnen. Es ist auch in NASM geschrieben und auch in einer .bin Datei. Mein einziges Problem ist: Ich versuche diese Datei genauso zu öffnen, wie der Bootloader den Kernel. Aber leider funktioniert nach irgendwelchen Gründen nicht. Was genau habe ich falsch gemacht?
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    mov ax, 0x1000
    mov es, ax
    mov ds, ax
     
    mov ax, 0x2200
    mov es, ax
    mov ds, ax
    push ax
    mov ax, 0
    push ax
    retf
     
    mov [bootdrive], dl
    call load
     
    bootdrive db 0
     
    load:
    mov ah, 0
    mov dl, [bootdrive]
    int 13h
     
    load1:
    mov ax, 0x2200
    mov es, ax
    xor bx, bx
     
    mov ah, 2
    mov al, 5
    mov cx, 2
    mov dh, 0
    int 13h
     
    times 512 - ($ - $$) hlt

    Hier noch meine Makefile.sh:
    Code :
    1
    2
    3
    4
    5
    
    nasm -f bin -o a.bin a.asm
    nasm -f bin -o b.bin b.asm
    nasm -f bin -o e.bin e.asm
    cat a.bin b.bin e.bin  >d.img
    qemu -fda d.img
     

  2. #2
    TheComputaNerd TheComputaNerd ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    33
    egal, hab schon gelöst. aber ich habe noch eine andere frage:
    warum springt der kernel gleich zur ladeadresse, obwohl ich ihm begehlt habe, dass er erst zum hauptkernel springen soll?
    hier:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    mov ax, 0x1000
    mov es, ax
    mov ds, ax
     
    jmp loop
     
    load:
        xor ax, ax ; 1
        int 0x13 ;3
        ; 1 - 3 : we must initialize the first floppy drive
            mov bx, 0x2200 ; ax is get the wort 0x1000(kernel address
        mov ah, 2 ;the function to search for the kernel, begins
        mov al, 5 ;we search 5 sectors
        mov cx, 2 ; we search in 2 cylinder
        mov dh, 0 ; page number : 9
        mov dl, [bootdrive]
        int 13h ; interrupt nummer
        
     
     
    loop:
    mov ah, 0Eh
    mov al, 'A'
    int 10h
    xor ah, ah
    int 16h
    jmp load
     
        
    times 512 - ($ - $$) hlt
     

  3. #3
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    Hi

    ohne jetzt lästig sein zu wollen, aber meinst du nicht, das du vor einer Prozessverwaltung dich zuerst einmal um das Dateisystem kümmern solltest? (sowie unzählige andere Sachen und, wenn man es ernst meint, auch die übliche C-Funktionensammlung?)

    Gruß
     

  4. #4
    TheComputaNerd TheComputaNerd ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    33
    1.ich werde das os 100% auf nasm schreiben, also brauche ich dieses extra c-funktionensammlung nicht
    2.kanst du mir mal das FAT12 erklären, auf lolwelvel kapiere ichs irgendwie nicht
     

  5. #5
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    1: Ich rede ja auch nicht vom OS. Aber hattest du nicht vor, das dieses Programme ausführen kann?.
    Ich würde mich sehr ärgern, wenn ich auf Windows alles in Assembler programmieren müsste ( ) .

    Nein, im Ernst: Warum willst du 100% Asm verwenden? Sowas wie puts, gets etc in Asm zu schreiben ist nicht schwer; und es hilft dir ja dann auch.
    Wenn du Funktionen wie printf hast (statt immer einen kompletten Absatz zum Ausgeben einer Hex-Zahl) kannst du erstens schneller programmieren und zweitens wird er Code leicher lesbar.
    Vollkommen egal, ob du in C oder Asm weiterschreibst.

    2: Hast du dir die englische Wikipedia einmal angeschaut?
    Der Aufbau ist dort erstaunlich detailliert beschrieben...
    Wenns dann noch Unklarheiten gibt, findet man unten auch einen Link zur Spezifikation.
    http://en.wikipedia.org/wiki/File_Allocation_Table

    Gruß
     

  6. #6
    TheComputaNerd TheComputaNerd ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    33
    das problem ist, ich habe mal versucht ein c kernel zu machen, aber es ging nicht, weil der booltoader es irgendwie nicht laden konnte(es kamm eine error message, dass _main nicht gefunden werden konnte). wenn du mir beschreibst, was ich falsch gemacht habe und wie ichs machen soll, dann würde ich gerne auf c ein kernel machen.
     

  7. #7
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    100% C geht auch nicht.

    Das Grundgerüst zum Starten muss in Asm sein.
    Wenn das gestartet ist, kann C weitermachen.

    Das _main nicht gefunden wurde, hört sich aber irgendwie nach einer Linkermeldung an.
    Die Fehlermeldung ist beim Kompilieren gekommen, oder?
    Dann hast du den Compiler falsch aufgerufen.
    Es darf nicht (wie bei jedem normalen Windows/Linux-Programm) gelinkt werden.
    Wie du das machst, hängt vom verwendeten Compiler ab.

    Gruß
     

  8. #8
    TheComputaNerd TheComputaNerd ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    33
    egal, vergesen wirs(c kernel). aber wie benutze ich jetzt das fat12 dateisystem? also wie solls im code stehen?(und bitte keine Tabellen mehr, ich weiß nichtmal, was offset bedeutet)
     

  9. #9
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    Dann kann ich nur noch empfehlen, dir dringendst Grundlagen von Assembler anzueignen.

    Wie hast du denn bis jetzt programmiert? Bzw. wo hast du Asm gelernt, ohne dabei das Wort offset kennenzulernen?

    ...Vielleicht solltest darüber nachdenken, in die Stellenangebote zu schreiben.
    Wenn dein "wie solls im Code stehen" in ein paar Minuten geschrieben wäre, würde ich es ja machen, aber da werden auch ein paar Stunden lange nicht reichen.

    Noch ein Vorschlag: Konzentrier dich fürs Erste auf einen Bereich.
    Keine Prozessverwaltung schreiben wollen, während man es nicht schafft, C-Code auszuführen, und nebenbei auch noch Grafikkarte und Festplatte ins kleinste Detail behandeln wollen.
    Das geht nicht. Man kann nicht eben mal Windows allein in ein paar Tagen schreiben.
    Wenn du es nicht langsam angehst, wirst du nie vom Fleck kommen.
     

  10. #10
    TheComputaNerd TheComputaNerd ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    33
    man
    1.ich weiß, dass man windows in einpaar tagen nicht schreiben kann
    2.ich bin kein träumer
    3.hab im internet auf wikibooks gelernt
     

  11. #11
    TheComputaNerd TheComputaNerd ist offline Mitglied Bronze
    Registriert seit
    Feb 2011
    Beiträge
    33
    und erklär mir jetzt, was offset bedeutet
     

  12. #12
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    http://board.raidrush.ws/showthread.php?t=751179

    War gar nicht schwer, das zu finden...
     

  13. #13
    BassBox Tutorials.de Gastzugang
    Nun, ich musste mich auch einige Tage mit Fat-12 auseinandersetzten um einen passablen Treiber zu proggen. ich bin gerade mit der Implementierung von exe beschäftigt, weil ich bereits einen ganzen Haufen Funktionen für C definiert habe, und mich mit Jloc und sowas nich auseinandersetzen will lass ich den Code einfach in exe Übersetzten und dan von meinem Os ausführen (arbeite im Pmode mit Multitasking). Natürlich u™H\È¿ˆZXÚZXÚ\ˆ\È[ÈÛÛˆ›Ùܘ[[H›ÛˆYZ[™[HÔËQ[][]܈HÝ\[‹X™\ˆXÚÙ[›™HÙZ[™[ˆÈÛÛ\[\ˆ\ˆHÓÓHÛÛ\[Y\ ˆ˜[È™[X[™Z[™[ˆÙ[›™[ˆÛÛH¹™HXÚ\È™]Ù[›ˆZ\ˆZˆ™[X[™ØÚXÚÝ ˆÛÛ\][™\™XÚÙ\™H\ˆ˜][ˆZ[™\ˆš]˜]˜XÚšXÚ[Ü™Ù[ˆ˜XÚZ]YÈ\›9]\›‹‚‚“˜\ÜЛÞ
     

  14. #14
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    Hi

    irgendwas ist an deinem Beitrag danebengegangen. Ich sehe 3 Zeilen normal und dann nurnoch Sonderzeichen.

    Oder liegts an mir? Wäre nett, wenn noch jemand sagt, wie es bei ihm ausschaut.

    Gruß
     

  15. #15
    BassBox Tutorials.de Gastzugang
    Oh, wie blöd. Ich habe die Antwort von meinem I-Phone mit tuts-mobile geschrieben. Bin wohl mit dem Zug beim senden in ein Funkloch gefahren. Aber das wichtigste was da stand war ob jemand von euch einen c compiler kennt der zu com compiliert.
     

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 13.10.06, 10:42
  2. [SHELL] Programm öffnet datei -> Bearbeitungsprogramm öffnet sich
    Von Terminator 2005 im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 03.12.05, 10:54
  3. Antworten: 13
    Letzter Beitrag: 01.09.05, 21:45
  4. Antworten: 1
    Letzter Beitrag: 15.03.05, 23:35
  5. Kernel generiert und dann der Start...
    Von SirSalomon im Forum Linux & Unix
    Antworten: 0
    Letzter Beitrag: 15.04.02, 16:24