Anfängerfrage Hello World



  • Hallo,
    ich lerne Assembler und dabei benutze ich das Buch Assembler von Rainer Backer(2. Auflage 2007).
    Jetzt versuche ich das erste Programm, das in dem Buch vorkommt auf meinem Rechner(Windows 8.1 Pro 64-Bit, Intel Dual-Core i5-3337U, 8 GB RAM) zum Laufen zu bekommen. Benutzen tue ich MASM32.

    Daten Segment
    
    Meldung db "Hallo Welt!!"
            db "$"
    Daten Ends
    
    Code Segment 
    
    Assume CS:Code, DS:Daten
    
    Anfang: mov ax,Daten
    mov ds,ax
    mov dx,offset Meldung
    
    mov ah,9
    
    int 21h
    mov ah,4ch
    int 21h
    
    Code Ends
    
    End Anfang
    

    Wen ich auf Assemble & Link gehe, bekomme ich folgende Fehlermeldung:

    Microsoft (R) Macro Assembler Version 6.14.8444
    Copyright (C) Microsoft Corp 1981-1997. All rights reserved.

    Assembling: C:\Users\a\test.asm
    C:\Users\a\test.asm(12) : error A2004: symbol type conflict
    C:\Users\a\test.asm(25) : warning A4023: with /coff switch, leading underscore r
    equired for start address : Anfang
    _
    Assembly Error
    Drücken Sie eine beliebige Taste . . .

    Irgendwie macht der Einstiegspunkt Anfang Probleme. In dem Buch Assembler von M. Roming(1. Auflage 2003) steht ein ähnlicher Code drin. Da heisst der Einstiegspunkt Start.



  • Du lernst Assembler für 16-Bit-MSDOS (kurz:DOS). MASM32 stellt per default aber 32-Bit-Windows-Programme her. Man kann damit aber auch DOS-Programme herstellen:

    Du klickst in QEditor auf 'File-Cmd Prompt' und gibst dort ein:

    C:\masm32\bin\ml.exe /Bl"C:\masm32\bin\link16.exe" hallowelt.asm

    (statt hallowelt.asm nimm den Namen Deiner .asm-Datei)

    viele grüße
    ralph

    EDIT: Ich bin mir sicher, ob 16-Bit-DOS-Programme so ohne weiteres auf Windows 8.1 laufen (ich habe nur XP). Wenn's nicht klappt: bitte Rückmeldung, damit ich mir was ganz Trickreiches überlegen kann.



  • Hi,
    Danke für de Tip. Hat geklappt, aber so wie Du befüchtet hast, funzt es nicht unter Windows 8.1.
    Sobald ich die exe-Datei in cmd starte, kommt die Fehlermeldung "Nicht unterstützte 16 Bit Anwednung. Das Programm .. kann aufgrund einer Inkompatibiltät mit 64 Bit Anwendung nicht gestartet werden. "
    😞

    Scheint nicht einfach zu sein mit Windows 8.1 64 Bit. Vielleicht installiere ich mal Windows XP auf einer virtuellen Maschine...



  • asd1 schrieb:

    Scheint nicht einfach zu sein mit Windows 8.1 64 Bit. Vielleicht installiere ich mal Windows XP auf einer virtuellen Maschine...

    Das wird das Beste sein. Ich hatte befürchtet, dass schon Link16.exe abschmiert, aber geguckt und analysiert... und es handelt sich um ein 32-Bit-Programm. Ansonsten würde mich interessieren, ob DosBox (http://www.dosbox.com) auf einem 64-Bit-Windows läuft.

    viele grüße
    ralph



  • Moin.

    rkhb schrieb:

    Ansonsten würde mich interessieren, ob DosBox (http://www.dosbox.com) auf einem 64-Bit-Windows läuft.

    viele grüße
    ralph

    Auf Windows 7 64 Bit läuft DosBox wie beabsichtigt.

    Aber DosBox wurde nur für ältere DOS-Spiele optimiert und bringt nur seine eigene Modeliste für damalige Videomodi mit Seitenverhältniss von 4:3 und 5:4 (aspect ratio) mit. Die Modeliste einer physikalisch vorhandenen Grafikkarte(mit VBE2/VBE3) wird von DosBox ignoriert, so das man damit keine Videomodi für widescreen Monitore innerhalb von DosBox einschalten kann. VBE3-Funktionen wie hardware triple buffering, steroskopische Shutterglasses und refreshrate controlled Modi werden von DosBox auch nicht unterstützt. Ein MS-DOS "ctty" command kennt DosBox auch nicht.

    Unterstütz werden aber Videomodi für den linearen framebuffer und es kann in den protected Mode(und auch in den Bigrealmode) geschaltet werden.

    Dirk



  • freecrac schrieb:

    Auf Windows 7 64 Bit läuft DosBox wie beabsichtigt.

    Aber...

    Danke. Für mich geht es nur darum, Anfängern mit dem "falschen" Buch einen schnellen Workaround zu empfehlen, da ich keine Erfahrung mit VM's habe. Ich selbst würde im Falle eines Falles schnell ein altes DOS auf einer alten Festplatte installieren und diese anstöpseln 🙂

    viele grüße
    ralph



  • rkhb schrieb:

    freecrac schrieb:

    Auf Windows 7 64 Bit läuft DosBox wie beabsichtigt.

    Aber...

    Danke. Für mich geht es nur darum, Anfängern mit dem "falschen" Buch einen schnellen Workaround zu empfehlen, da ich keine Erfahrung mit VM's habe. Ich selbst würde im Falle eines Falles schnell ein altes DOS auf einer alten Festplatte installieren und diese anstöpseln 🙂

    viele grüße
    ralph

    Das PC-Gehäuse zu öffnen ist mir zu viel Bastelei und externe Anschlüsse habe ich nicht zum Anstöpseln.

    Ich verwende stattdessen einen bootfähigen 2 GB-USB-Stick(bootfahig gemacht mit dem HP USB Disk Storage Format Tool), oder eine Boot-CD mit Fesplatten-Emulation, oder Disketten-Emulation zum Booten von MSDOS 6.22, oder MSDOS 7(von Windows 98SE).

    Für USB-Tastatur und USB-Mouse habe ich "USB legacy" auf enable gesetzt im Mainboard-Bios. Beide Geräte können damit vergleichsweise wie eine PS2-Tastatur und eine PS2-Mouse verwendet werden.

    Dirk



  • rkhb schrieb:

    freecrac schrieb:

    Auf Windows 7 64 Bit läuft DosBox wie beabsichtigt.

    Aber...

    Danke. Für mich geht es nur darum, Anfängern mit dem "falschen" Buch einen schnellen Workaround zu empfehlen, da ich keine Erfahrung mit VM's habe. Ich selbst würde im Falle eines Falles schnell ein altes DOS auf einer alten Festplatte installieren und diese anstöpseln 🙂

    viele grüße
    ralph

    Hi ralph,
    Danke für den Tip.
    Hast Du Empfehlungen für ein "richtiges" Buch?



  • asd1 schrieb:

    Hast Du Empfehlungen für ein "richtiges" Buch?

    Deswegen hatte ich "falsch" in Anführungszeichen gesetzt. Mir ist noch nichts - aber auch wirklich gar nichts - Empfehlenswertes über Win32-Assembler-Programmierung "from scratch" über den Weg gelaufen. Win64 sieht noch düsterer aus. Wenn Du Dich durch Dein 16-Bit-Assembler-Buch durchgequält hast, kannst Du Dir mal das hier anschauen: http://www.deinmeister.de/wasmtut.htm

    viele grüße
    ralph



  • Die Bücher sind schon Ok, weil die vorgestellten Grundlagen und Programmiertechniken sich kaum ändern. Beide Bücher gehen auf grundlegende Windowsprogrammierung ein. Was man aber zusätzlich braucht, ist ein Hello World oder ähnliches Beispiel für einen aktuellen Assemler, wie z.B. in der Masm32 Dokumentation oder in den Foren und einen Disassembler und dann kann man versuchen zu übersetzen.

    Tip: Wenn man alte Masm-Grammatik üben möchte: Bei den neulich veröffentlichten Dos-Sourcecodes ist ein Original Masm dabei (wie auch der "mächtige" Debugger "Debug").

    Wenn man Englischsprachige Texte lesen kann, dann ist (zusammen mit den genannten Büchern) http://download.savannah.gnu.org/releases/pgubook/ (Linux) recht hilfreich.

    (Und ob man sich durch 16Bit "quälen" muß? Beim Nachdenken ist mir oft 8Bit oder 4Bit lieber, so gesehen stimmts eigentlich...;))



  • 92 schrieb:

    (Und ob man sich durch 16Bit "quälen" muß? Beim Nachdenken ist mir oft 8Bit oder 4Bit lieber, so gesehen stimmts eigentlich...;))

    Bis es *Klick* macht, ist Assembler schon eine ziemliche Quälerei. Heutzutage ist es ein bisschen besser, weil man nicht mehr einen Finger in Alarmbereitschaft über dem Reset-Knopf halten muss 🙂 . Dafür merkt man wenig bis nichts vom Geschwindigkeitsvorteil und oft produziert ein Compiler schnelleren Code. Ich selbst hätte ein dummes Gefühl dabei, tonnenweise DOS-, BIOS- und Video-Interrupts zu lernen, an die mich ein 32-Bit-System gar nicht mehr heranlässt. Und eine VM oder ein Emulator ist doch nicht das Wahre. 32-Bit-Linux hat noch das Interrupt-System, aber wehe, wenn man in einem Linux-Forum mit Int 80h ankommt.

    viele grüße
    ralph



  • rkhb schrieb:

    ... tonnenweise DOS-, BIOS- und Video-Interrupts

    Es sind nur eine Handvoll, im Gegensatz zu den über 1000 Windowsfunktionen, die sich anbieten. Wieviele Funktionen hat die Java-Api?



  • 92 schrieb:

    Wieviele Funktionen hat die Java-Api?

    Keine. Java kennt nur Methoden 😉


Anmelden zum Antworten