PrettyOS um Rechner erweitern



  • oh, danke!
    ich habe auch gerade geschafft, einen zeilenumbruch zu machen *freu*
    zb so:

    msg_commands db 'TessOS Befehle:', 13, 10
                 db 'hi                -   Das Betriebssystem begruesst Sie ganz herzlich', 13, 10     ; einfach die 0 weglassen
                 db 'commands          -   Zeigt diese Befehlsliste', 13, 10
                 db '? / help          -   Zeigt die Hilfethemen', 13, 10
                 db 'exit              -   Das System wird neugestartet', 13, 10, 0                    ; und am ende wieder dranfügen
    msg_exit     db 'System wird neugestartet ...', 13, 10, 0
    msg_help     db 'Hilfethemen:', 13, 10
                 db '    1. Befehle', 13, 10
                 db '       Fuer eine vollstaendige Liste geben Sie bitte "commands" ein.', 13, 10, 0
    

    Ach ja und wikipedia hat mir grad schön erklärt, wo der unterschied zwischen rm und pm ist
    richtig?
    pm = protected mode = programme kriegen nicht den vollen speicher = notwendig für multitasking
    rm = real mode = programme können auf den vollen speicher zugreifen = ungünstig für multitasking


  • Mod

    pm = protected mode = programme kriegen nicht den vollen speicher = notwendig für multitasking
    rm = real mode = programme können auf den vollen speicher zugreifen = ungünstig für multitasking

    Ja, das ist zwar etwas vereinfacht ausgedrückt, aber PM ist eine gute Voraussetzung für Multitasking. Lies Dich mal hier ein: http://www.fh-zwickau.de/doc/prmo/pmtutor/text/p_all1.htm
    Das ist eine der besten Literaturstellen für das Thema PM.

    aber ich habe es eigentlich nach dem tutorial gemacht.

    Ist im Tutorial ein Fehler oder lag es bei Dir? Wir können auch gerne im Teil 1 noch einzelne Punkte klarer heraus stellen. Mache einfach einen Änderungsvorschlag.



  • lmb schrieb:

    nun kommt beim kompilieren folgende meldung:
    kernel.asm:177: error: TIMES value -22 is negative

    Das passiert wenn in der "kernel.asm" mehr als 512 Bytes reingedrückt wurden (durch z.B. viel msg_Text). 🙂
    Entweder die Zeile streichen (in der kernel.asm ist sie unnötig, da dort nichts "gefüllt" werden muß) oder die Zahl von 512 auf 1024 o.ä. erhöhen.



  • hey, sehr gut danke!
    Das würde ich dann auch mit ins tutorial reinschreiben 😉


  • Mod

    Danke, werde ich machen. 🙂
    EDIT: wurde eingefügt, bitte prüfen, ob meinerseits richtig verstanden.



  • gut 😉
    soll ich jetzt den calculator in asm oder c schreiben?
    ich denke nämlich, dass c für mich einfacher ist, vorallendingen, weil ich aus dem php bereich komme, die syntax ähnelt sich ziemlich.
    aber c kann man nicht einfach einbinden?


  • Mod

    soll ich jetzt den calculator in asm oder c schreiben?

    An der Stelle in asm. Das ist sicher eine interessante Übung. 🙂



  • okay
    stimmt das so? grundlegend?

    addieren:
    mov zahl1, 15
    mov zahl2, 2
    add zahl1, zahl2
    mov ergebnis, zahl1

    variable ergebnis müsste 15 sein, oder?


  • Mod

    2+15=17

    Hier ist ein vielleicht interessanter Assembler-Einstiegs-Crash-Kurs: http://ivs.cs.uni-magdeburg.de/bs/lehre/sose99/bs1/seminare/assembler.shtml#add



  • klar, natürlich 17, hab mich verschrieben
    danke für den linktipp!



  • aha noch einfacher.
    guuuuut!


  • Mod

    aha noch einfacher. guuuuut!

    Genau! 😉



  • nochmal:
    addition:

    mov ergebnis,50
    add ergebnis,20
    ;ergebnis = 70
    

    subtraktion:

    mov ergebnis,30
    sub ergebnis,10
    ;ergebnis = 20
    

    multiplikation:

    mov zahl1,3
    mov zahl2,5
    imul ergebnis, zahl1, zahl2
    ;ergebnis = 15
    

    division:

    mov zahl1,30
    mov zahl2,10
    idiv ergebnis, zahl1, zahl2
    ;ergebnis = 3
    

    alles soweit richtig?
    quelle: http://de.wikibooks.org/wiki/Assembler_(80x86_Prozessor)-Programmierung:_Rechnen_mit_dem_Assembler
    korrigiert



  • lmb, mach besser einen neuen Thread hier im Assembler-Forum auf, in diesem hier geht's um etwas anderes 😉



  • Will ich meinen. Ich versuche mal, die betroffenen Beitraege abzutrennen, hoffe die "Kollateralschaeden" sind gering. 😃



  • Gut, Danke 😉
    Stimmt das denn alles?
    Ich bin mir vorallendingen bei der Division nicht sicher...

    Echt klasse Forum!



  • tiny und co. werden aufgrund regelmaessigen Missbrauchs zensiert. Wenn du was verlinken willst, tue es direkt.

    Zu deinem Code:
    imul akzeptiert keine 3 Speicherzugriffe als Operanden (die wenigsten Instruktionen koennen uebrigens nur mit Speicherzugriffen als Operanden arbeiten).
    Selbes gilt also fuer idiv. Das akzeptiert sogar nur einen Operanden, den Divisor.
    In Befehlsreferenzen kannst du nachschauen, wie Befehle funktionieren. zB. hier.

    Allgemein solltest du dir auch mal Gedanken darueber machen, wann es sinnvoll ist Variablen zu verwenden und wann Register reichen. In laufenden Rechnungen arbeitet man sinnvollerweise zB. eher auf Registern: Arbeit mit Variablen braucht einmal Platz im RAM (klar) und verhaeltnismaessig viel Zeit zum Lesen/Schreiben im RAM.



  • das mit den registern habe ich leider noch nie richtig geschnallt.
    deswegen verstehe ich wohl auch deinen link nicht richtig, aber trotzdem danke!



  • In den FAQ gibt es Einsteigertutorials zu Asm. Der Umgang mit Registern und ein grobes Verstaendnis der Programmierumgebung der Ziel-CPU gehoert zu den grundlegensten Dingen beim Programmieren in Assembler.
    So, fuerchte ich, ist diese Art von Frickelei leider recht fruchtlos.



  • ich versuche es so lange, bis ich es geschafft habe.

    mein jetztiger code:

    mov eax,50
        add eax,20
        mov ergebnis, eax
        mov si, ergebnis
        call print_string
        jmp loop_start  
    
    .
    .
    .
    .
    
    ergebnis db 0
    

    Allerdings scheint in dieser zeile:
    mov ergebnis, eax
    etwas falsch zu sein.
    denn diese fehlermeldung kommt: invalid combination of opcode and operands
    aber das müsste eigentlich richtig sein!
    ich kopiere den inhalt von eax nach ergebnis
    falsch?
    oder kann ich auch direkt:
    mov si, eax

    PS: ich bin lernbereit für ALLES!


Anmelden zum Antworten