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
ralphEDIT: 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
ralphAuf 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
ralphDas 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
ralphHi 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