Kleine Anfängerfrage



  • Oje, M$ vermurxte Fehlermeldungen *sigh*
    Was der Kram mit dem "multiple .data ...bla" zu bedeuten hat, ist mir auch nicht so ganz klar, aber ansonsten sehe ich schonmal, dass kein Codeentrypoint gesetzt ist (wahrscheinlich das unresolved external _mainCR). Deshalb liesse sich der Code auch mit TASM nicht ohne mindestens eine weitere .obj-Datei, die den Eintrittspunkt enthaelt linken.
    Wenn also in dem Tutorial nicht genau beschrieben steht, wie Du die erstellte .obj-Datei linken sollst, ist das Tutorial schrott und Du solltest besser mit einem anderen lernen (schau dich z.B. mal in der FAQ um)



  • Kannst du mir kurz erklären wie das mit den eintrittspunkt funzt. Und jetzt werd ich mir mal die Tuts anschauen. anscheinend ist dieses tut echt scheiße



  • *g* sorry, sollst Du natuerlich aufgeklaehrt werden:

    model small
    .stack
    .code
    Start: ;hier soll das Programm starten. <= Code-eintrittspunkt
    mov ah,1h; moves the value 1h to register ah
    mov cx,07h;moves the value 07h to register cx
    int 10h;10h interruption
    mov ah,4ch;moves the value 4 ch to register ah
    int 21h;21h interruption
    END Start ;hier muss das Label stehen, bei dem der Code gestartet werden soll
    


  • Danke, allerdings musste ich Start _Start nennen, dann ging es. Bei Problemen meld ich mich.



  • Kannst du mir noch sagen was man zum beenden eines programm für einen befehl nimmt. ansonstenm stürzt das programm ja ab. Funktionieren tut die WinAPI Funktion ExitProcess, aber es geht auch bestimmt anders. muss ich da eiinen interrupt aufrufen.Könnte das das hier sein:

    mov ah,4ch;
    int 21h;

    wenn ja was bedeutet 4ch, was ist das für ein wert



  • Hmm ... schreib ich auch mal was 🙂
    Das 4c ist in DOS die Funktion zum Beenden eines Programms. Die (Software-)Interrupts waren in DOS die primäre Schnittstelle zum Betriebssystem, über das AH - Register wird die Funktionsnummer übergeben.
    Nr. 09h lässt etwa Text ausgeben (muss mit nem $-Zeichen enden!)

    Text DB "Hallo Welt$"
    ...
    MOV AH,9
    MOV DX, offset Text
    INT 21h
    

    Jede Funktion, egal ob Text ausgeben, Dateien bearbeiten, Speicher anfordern, alles hat eine bestimmte Funktionsnummer. Ne Übersicht über die wichtigsten Funktionen des INT 21h gibts unter http://spike.scu.edu.au/~barry/interrupts.html

    mfg ETNA



  • Noch eine kleine Anmerkung: Bitte nicht versuchen, in einem Windowsprogramm DOS oder BIOS Interrupts zu benutzen (auch nicht in Win32 Konsolenanwendungen im "DOS"-Fenster), des funzt naemlich nicht.



  • Das heit ich darf keine interupts (int) benutzen oder wie. Nur in 16-Bit DOS-Programmen oder wie. Hab aber schon viele Codes gesehen die das machen, sind die nicht unter Windows ausführbar. Also muss ich am Schluss ExitProcess aus der WinAPI verwnden, oder was verwendet man dann.
    Z.B. wenn ich nur mal mit mov AX, AA etwas in den Register schreibe.
    Wie schaut dann ein komplett lauffähiges programm ab. bisjetzt stürzt das programm imer am Schluß ab.



  • Aber kann man dann wirklich mit asm so system nah sein ohne die interrupts.
    Gibt es Assembler die auch 16-Bit Code erstellen? Wenn ja welchen?



  • In 16Bit DOS-Anwendungen kannst Du DOS Interrupts etc. benutzen. In allen anderen Anwendungen in Windows nicht.

    Eigentlich unterstuetzen alle halbwegs sinnvollen Assembler 16Bit Code. z.B. NASM, der ist auch noch Freeware.(siehe FAQ)

    Mit Interrupts programmierst Du etwa genauso Systemnah wie ohne, aber ProtectedMode-Systeme, wie Windows verbieten auch den direkten Zugriff auf Hardwareports, das ist es, was letztendlich wirklich Hardwarenahe Programmierung unmoeglich macht.

    DOS Anwendungen werden ueber int 20h oder int 21h (ah=4C) beendet, Windowsanwendungen ueber die WinAPI (ExitProcess), ein Programm am Ende offen zu lassen ist nicht sinnvoll. 😃



  • Super danke dass du mich aufgeklärt hast.
    Ist dieser 16-Bit ein Code der auch Windows ausgeführt werden kann (so Programme gibt es ja), oder ist es dann wirklich so ein Code der nur im puren DOS ausgeführt werden kann (is wahrscheinlicher)

    Gibt es zum NASM auch ne passende IDE.



  • 16Bit Code kann auch in Windows ausgefuehrt werden, in einer Virtual Machine. Da wird gewissermassen ein DOS-Rechner im RealMode simuliert. Aber wie bereits gesagt, Funktionieren direkte Hardwarezugriffe nicht immer richtig.

    Zum NASM kann man auch eine IDE benutzen, z.B. habe ich die hier ueber google gefunden 😉



  • Jo super danke 😃 . Aber der Masm32, kann anscheinend keinen 16-Bit Code compilen , soweit wie ich es bemerkt habe.



  • Der MASM kann ganz sicher auch 16bit code generieren.
    Natürlich wirds dann keine exe datei in der du windows funktionen aufrufen kannst.
    Das geht vielleicht mit einem Compilerschalter, vielleicht mit einem Schlüsselwort im Code. Ich hab den MASM halt nicht.


Anmelden zum Antworten