www.mikrocontroller.net

Forum: PC-Programmierung Kompatibilitätsproblem Assembler


Autor: Woory Haiwo (wrihaiwo)
Datum:

Bewertung
0 lesenswert
nicht 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:
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

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Woory Haiwo (wrihaiwo)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Woory Haiwo (wrihaiwo)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Woory Haiwo (wrihaiwo)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 :->

Autor: Woory Haiwo (wrihaiwo)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.