Forum: PC-Programmierung Kompatibilitätsproblem Assembler


von Woory H. (wrihaiwo)


Lesenswert?

Hallo!

Ich möchte einfache Programmiergrundlagen zuerst in Assembler später in 
C und C++ lernen. In der Uni haben wir das noch nicht gehabt und ich 
stehe mit meinem Problem gerade allein da. Im WWW habe ich leider auch 
noch keine Lösung gefunden.

Also ich möchte eine einfache Assemblerdatei .ASM kompilieren und 
ausführen.
Im Tutorial wurde gesagt ich brauche NASM. Die .ASM Datei (üblicher 
Hello World Code) habe ich mit .\NASM A.ASM -o A.COM kompiliert in eine 
ausführbare .COM Datei!
Leider tritt nach dem Ausführen der Datei folgender Fehler auf:
1
Die Version dieser Datei ist nicht mit der ausgeführten Windows-Version kompatibel. Öffnen Sie die Systeminformatonen des Computers, um zu überprüfen, ob eine x86-(32-Bit)- oder eine x64-(64-Bit)-Version des Programms erfolderlich ist, und wenden Sie sich anschließend an den Herausgeber der Software.

Ich habe auch ein 64-Bit System mit Windows 7, nur was ist die 
empfohlene Vorgehensweise für Programmierer mit einem 64-Bit 
Betriebssystem?

Ich habe über einen XP-MODE gelesen. Aber es muss doch z.B. Microsoft 
Visual Studio schon eine integrierte Lösung bieten. Ich habe mir die 
Studentenversion von Visual Studio 2008 heruntergeladen. Doch leider ist 
immer noch nichts kompatibel.

"MASM" habe ich auch noch installiert, aber es klappt ebenso wenig. 
Zudem lese ich im WWW das NASM 64-Bit unterstützen soll.

Das mag ja stimmen, doch wie bekomm ich meine Assembler Environment 
ordentlich gebacken damit ich endlich ein bißchen Programmieren lernen 
kann ?!

Brauche ich eigentlich als Anfänger so ein umfangreiches Programm wie 
Visual Studio 2008. Später möchte ich wie oben erwähnt mit C und C++ 
auch ein bißchen rumexperimentieren.

Viele Grüße !

Wrihaiwo

von Vlad T. (vlad_tepesch)


Lesenswert?

Woory Haiwo schrieb:
> Ich habe auch ein 64-Bit System mit Windows 7, nur was ist die
> empfohlene Vorgehensweise für Programmierer mit einem 64-Bit
> Betriebssystem?

einen 64bit assembler zu benutzen

von Woory H. (wrihaiwo)


Lesenswert?

Vlad Tepesch schrieb:
> Woory Haiwo schrieb:
>> Ich habe auch ein 64-Bit System mit Windows 7, nur was ist die
>> empfohlene Vorgehensweise für Programmierer mit einem 64-Bit
>> Betriebssystem?
>
> einen 64bit assembler zu benutzen

Wenn ich das mache, muss ich dann "anders" programmieren als in 32 Bit?

Denn ich lese im WWW Aussagen wie folgende:

"[..] x64 is a bit more complicated than 32-bit x86."
Quelle: 
http://www.masm32.com/board/index.php?topic=10880.msg79773#msg79773

von Woory H. (wrihaiwo)


Lesenswert?

Also ich hab grad mal XP Mode mit Virtuellem Laufwerk installiert.
Es klappt soweit alles.

Gibt es aber wirklich keine andere Möglichkeit?

Das was Vlad Tepesch schreibt hilft ja nicht weiter, da man das Problem 
nicht löst, sondern nur ausweicht.

von Vlad T. (vlad_tepesch)


Lesenswert?

du solltest auf jeden Fall einen vernünftigen Assembler nehmen, der ein 
Windows-Executable erstellt.

keine ahnung, ob der Nasm, sich dazu bringen lässt.

Ich nehme an, bei einer Exe-Datei wird Windows sich nicht so sehr 
sträuben.

Wenn ich mich nicht irre, enthält eine Com-Datei ja nicht mehr, als 
reinen Maschinencode. eine exe hingegen einen PE-Heaer mit jede Menge 
Infos für das OS.


Mein Rat wäre den MASM32 oder MASM64 zu benutzen.

Die gibts kostenlos von Microsoft. (entweder allein, oder im Bundle mit 
dem Visual Studio Express)

Hat natürlich teilweise ne andere Syntax.

von Woory H. (wrihaiwo)


Lesenswert?

Hallo nochmal Vlad Tepesch,

  den MASM32 habe ich schon ausprobiert, reagiert aber mit selber 
Fehlermeldung wie NASM.

  Ich habe auch schon in eine EXE-Datei kompiliert - ohne Erfolg.

  Mit dem XP-Mode von Windows 7 klappts besser als gedacht. Anscheinend 
muss man ein 32-Bit OS haben - da gibts wohl keine Tricks & Tips.

  Oder man nimmt MASM64 und lernt (soweit ich das verstanden habe) 
teilweise unterschiedliche Syntax als in der 32-Bit Programmierung.

  Der XP Mode scheint wohl meine Lösung zu sein. Später versuch ich dann 
für den Mikrocontroller Assembler zu nutzen.


Stimmt dass, das für Mikrocontroller nur die Atmel AVR-Studio Software 
in Frage kommt, weil nur diese korrekten .HEX Code für die 
Mikrocontroller kompilieren?

von Sven P. (Gast)


Lesenswert?

Ne, für die AVR gibts geschätzte zwanzig verschiedene Assembler, die 
alle funktionieren.

Allerdings wirst du wieder bei Null anfangen, da AVR-Assembler quasi 
nichts mit Intel-Assembler gemeinsam hat :->

von Woory H. (wrihaiwo)


Lesenswert?

Sven P. schrieb:
> da AVR-Assembler quasi
> nichts mit Intel-Assembler gemeinsam hat :->

Das ist gut zu wissen. ^^

D.h. die meisten Mikrochip-Typen haben eine unterschiedliche
Assembler Programmierung?


Vielleicht ist die Frage nicht an richtiger Stelle, aber eventuell ist 
ein Physiker unter euch oder jemand weiß es in etwa. Also mich würde 
interessieren welches Assembler Wissen für ein Physikstudium brauchbar 
wäre.

AVR werde ich unabhängig davon lernen, weil mich das interessiert. Aber 
hilft AVR oder womöglich andere Assemblerkentnisse für höhere Semester 
Physik?

von Vlad T. (vlad_tepesch)


Lesenswert?

Woory Haiwo schrieb:
> Vielleicht ist die Frage nicht an richtiger Stelle, aber eventuell ist
> ein Physiker unter euch oder jemand weiß es in etwa. Also mich würde
> interessieren welches Assembler Wissen für ein Physikstudium brauchbar
> wäre.

Wie kommst du darauf, dass assembler überhaupt für ein Physikstudium 
nützlich ist?

beschäftige dich lieber mit c/c++ und Matlab, und Labview.

Das bringt dir mit Sicherheit viel mehr.

C gibt es für nahezu jede Architektur und es ist immer gleich (abgesehen 
von system-spezifischen Bibliotheken).

Bei Assembler fängst du bei jedem Prozesor quasi von Null an und du 
musst jedes Bit mit Vornamen kennen (was aber natürlich auch Vorteile 
hat - aber bei weitem mehr Nachteile).

Also, leg dir zuerst fundierte C-Kenntnisse zu.
Wenn du dann auf extrem laufzeitkritische Probleme triffst, arbeite dich 
in Assembler ein und fertige eine auf die CPU maßgeschneiderte Routine 
an.

von Sven P. (Gast)


Lesenswert?

Woory Haiwo schrieb:
> Sven P. schrieb:
>> da AVR-Assembler quasi
>> nichts mit Intel-Assembler gemeinsam hat :->
>
> Das ist gut zu wissen. ^^
>
> D.h. die meisten Mikrochip-Typen haben eine unterschiedliche
> Assembler Programmierung?
Genaugenommen haben alle Mikroprozessor-Familien unterschiedliche 
Assemblersätze.

von Karl H. (kbuchegg)


Lesenswert?

Woory Haiwo schrieb:

> Vielleicht ist die Frage nicht an richtiger Stelle, aber eventuell ist
> ein Physiker unter euch oder jemand weiß es in etwa. Also mich würde
> interessieren welches Assembler Wissen für ein Physikstudium brauchbar
> wäre.

Das ist leicht:
Gar keines.

> AVR werde ich unabhängig davon lernen, weil mich das interessiert. Aber
> hilft AVR oder womöglich andere Assemblerkentnisse für höhere Semester
> Physik?

Kann sein:
Du lernst auf jeden Fall folgerichtiges Denken (lernst du durch 
Programmieren allgemein) und du lernst das penibel genau Beachten von 
Details die einem Normalsterblichen verborgen bleiben (das ist zwar auch 
bei Programmieren im Allgmeinen so, aber im Speziellen bei 
Assemblerprogrammierung extrem wichtig)

von Jens G. (jensig)


Lesenswert?

Offensichtlich ist dein NASM ein 16bit Assembler (oder nutzt nur 16bit 
in diesem konkreten Fal). Wie sonst ist zu erklären, daß Du COM Dateien 
baust bzw. bauen kannst. Dann hast Du zwei Probleme:
erstens unterstützt Win64 kein 16bit mehr, und zweitens kennt es keine 
COM Datein, sondern nur EXE.
Nehme also 32 oder 64bit Assembler. Und baue EXE Dateinen, und keine 
COM's. Mindestens 32bit.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Exe-Dateien sollten auch Win32-Exe-Dateien sein, keine 
DOS-Programme!

Das bedeutet, daß die Dateien PE-Header und keine MZ-Header haben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.