Problem mit Buchcode



  • Hallo zusammen
    Ich möchte Assembler lernen, um den Computer besser zu verstehen und habe mir für diesen Zweck ein Buch gekauft: Assembler Programmierung von Wolfgang Link

    .MODEL small
    .CODE
     mov ah,08h
     int 21h
     mov dl,al
     mov ah,02h
     int 21h
    end
    

    Ich habe nun versucht, dass als inline assembler im Visual Studio 2005 auszuführen. -> Aua! 😃

    Ich fürchte, dass dieses Buch die Assemblerprogrammierung unter dem Real-Mode Betriebssystem MS-DOS gedacht ist. Schade, schade!!

    Naja, aber die Befehle sowie die Befehlsstrukturen sind ja ansonsten nicht grundlegend anders und ich muss halt den code ein wenig portieren. Meine erste frage ist nun, wie ich denn in Win32 Assembler ein Zeichen von der Tastatur lese bzw. schreibe!

    Ach ja, gibt es möglicherweise eine Möglichkeit, ein RealMode assemblerprogramm in Windows zu emulieren? Mit welchem Assembler muss ich denn diesen 16-Bit Assemblercode assemblieren bzw. linken? Den Masm kann ich vermutlich nicht verwenden, da dieser für 32-Bit konzipiert wurde?

    Übrigens, wie kann ich denn win32 funktionen oder funktionen aus der c/c++ standard library aufrufen? Gibts dafür ein *.inc oder sowas?

    LORD, ich fühle mich grad ganz schön klein! 🙂

    Mfg Ishildur



  • Ishildur schrieb:

    Ich habe nun versucht, dass als inline assembler im Visual Studio 2005 auszuführen. -> Aua! 😃

    Ich fürchte, dass dieses Buch die Assemblerprogrammierung unter dem Real-Mode Betriebssystem MS-DOS gedacht ist. Schade, schade!!

    Hehe, richtig. KA, ob das Buch auch noch Windows behandelt. Der Code da oben ist auf jeden Fall RM DOS, aber auch sonst mit den ganzen Direktiven nicht für Inline-Assembler gedacht. 😉

    Ishildur schrieb:

    Naja, aber die Befehle sowie die Befehlsstrukturen sind ja ansonsten nicht grundlegend anders und ich muss halt den code ein wenig portieren.

    Joa. Normalerweise magst du Recht haben, aber bei solchen Programmen, die praktisch komplett nur aus Systemaufrufen bestehen, kommt nach dem "ein wenig portieren" auch ein komplett anderer Code dabei heraus.

    Ishildur schrieb:

    Meine erste frage ist nun, wie ich denn in Win32 Assembler ein Zeichen von der Tastatur lese bzw. schreibe!

    Da du sinnvollerweise wohl direkt mit der Win32-API arbeiten wirst, macht es IMHO mehr Sinn, diese frage aufzuteilen:
    1. Wie funktionieren WinAPI-Aufrufe in deinem Assembler und
    2. Wie mache ich dies und jenes mit der WinAPI

    Zu 1 hilft die tolle ASM-FAQ weiter (unter den Tutorials gibt es auch welche fuer win32).
    Und 2 wirst du dir, denke ich mal, auch selbst beantworten koennen (msdn oder whatever).

    Ishildur schrieb:

    Ach ja, gibt es möglicherweise eine Möglichkeit, ein RealMode assemblerprogramm in Windows zu emulieren?

    Ich nehme mal an, du meinst RealMode DOS Programme. Windows bringt normalerweise schon einen DOS-Emulator mit. (KA, ob es den in Vista auch noch gibt). Der ist zwar recht schnell, dafuer aber auch ziemlich rudimentaer (praktisch kein Sound, selten Grafikauflösungen >= 800x600).
    Eine Alternative waere die DOSBox (google).

    Ishildur schrieb:

    Mit welchem Assembler muss ich denn diesen 16-Bit Assemblercode assemblieren bzw. linken? Den Masm kann ich vermutlich nicht verwenden, da dieser für 32-Bit konzipiert wurde?

    Sieht fuer mich eigentlich schon nach MASM-Code aus. Aber frag' mich da bitte nicht nach Details, ich mag und verwende den MASM nicht.
    TASM sollte den Code auch schlucken.
    Zum Linken wuerde ich zB. alink (auch google) empfehlen.



  • .MODEL small
    .CODE
    mov ah, 08h
    int 21h
    mov dl, al
    mov ah, 02h
    int 21h
    mov ah, 4ch
    int 21h
    end

    Also wenn ich dieses erste Beispiel mit masm32 assembliere, geht zwar alles gut, aber der linker meldet folgende Warnungen und Fehler:

    LINK : warning LNK4044: unrecognized option "z2"; ignored
    char.obj : warning LNK4033: converting object format from OMF to COFF
    char.obj : warning LNK4078: multiple ".data" sections found with different attributes (C0220040)
    LINK : fatal error LNK1181: cannot open input file "char.exe"



  • Ich empfehl dir ansonsten die tutorials von iczelion (joachim rohde) machte eine deutsche übersetzung. Da lernst du (m)asm und windows zugleich. Du musst googlen um die Tuts zu finden.

    smalltip



  • Sie stehen auch in den FAQ 😉
    Fuer den Sinn: Hast du es schon mit alink versucht?



  • Also der Code ist für MASM. Du benutzt den alten DOS-Interupt 21H. Also wird unter moderneren Microsoftbetriebssystemen DOS emuliert. Ich konnte die alte MASM-Version nirgendwo außer auf meiner Festplatte finden.

    Habs hier mal hoch geladen: http://rapidshare.com/files/43854432/MASM.zip.html


Anmelden zum Antworten