Assembler mit MinGW
-
Hallo,
ich habe den MinGW. Im bin-Verzeichnis befindet sich as.exe. Das ist doch der Assembler oder? Wenn ja, kann mir jemand erklären, wie ich das Ding zum laufen bekomme? Ich hatte mir mal aus der Bücherei ein Buch über Assembler geliehen. In dem Buch wurde der TASM/MASM verwendet. Ein Beispielprogramm habe ich mal mit dem TASM assembliert. Das hat auch funktioniert. Mit dem as.exe komme ich allerdings gar nicht klar. Das Assembler-Programm, welches ich mit dem TASM assembliert hatte, konnte er gar nicht lesen. Vielleicht habe ich es auch einfach falsch gemacht
Kann mir jemand kurz erklären, wie ich dem as.exe sagen kann, welche *.asm-Datei er assemblieren soll? Danach folgen dann eventuell weitere Fragen, je nachdem, wie die Antwort(en) ausfallen...
Mit ratlosen Grüßen
DerRatlose
-
Kann mir jemand kurz erklären, wie ich dem as.exe sagen kann, welche *.asm-Datei er assemblieren soll?
Das ist relativ einfach. Der simpleste Aufruf von as.exe ist wahrscheinlich folgender:
as deine_asm_datei.s -o deine_asm_datei.o
as.exe nimmt deine Assembler-Datei deine_asm_datei.s, assembliert sie und macht eine Objekt-Datei daraus, im obigen Beispiel deine_asm_datei.o. Man kann der Objekt-Datei beliebigen Namen geben, z.B. so:
as deine_asm_datei.s -o tmp.o
Die so erstellte Objekt-Datei kann man in eine ausführbare Datei verlinken. Dazu brauchst du ld.exe, den GNU Linker, er müsste sich im selben Verzeichnis befinden wie as.exe.
Der simpleste Aufruf vom Linker wäre:ld deine_asm_datei.o -o deine_asm_datei.exe
Der Linker nimmt deine Objektdatei, deine_asm_datei.o, und erstellt daraus eine ausführbare Datei deine_asm_datei.exe.
Hoffe, es hilft weiter.
-
Danke für die Hilfe. Ungefähr so hatte ich es auch probiert. Mein jetziges Problem ist nur, dass der as den kompletten Quelltext nicht lesen kann...
.MODEL Small .STACK 100h .DATA Meldung DB "Hallo Welt$" .CODE Start: mov ax,@data mov ds,ax mov dx,OFFSET Meldung mov ah,09h int 21h mov ah,4Ch int 21h END Start
Das ist der Code, den ich mal aus dem Buch übernommen hatte um ihn zu testen.
Der as kann damit aber gar nichts anfangen. Der gibt für jede Zeile eine Fehlermeldung aus.
-
Wie es in deinem Buch steht, die Beispiele sind für TASM/MASM Assembler. Und es ist so, dass der GNU Assembler und TASM/MASM zu verschieden sind, was die Schlüsselwörter im Quellcode angeht und andere zig Kleinigkeiten dazu. Ich glaube, man kann dem GNU Assembler zwar sagen, er soll Intel-Syntax verwenden und 16 Bit Code generieren (.code 16?). Aber die anderen Eigenheiten von TASM/MASM kann er nicht. Nimm am besten die Assembler, die im Buch empfohlen werden. Hast dann weniger Probleme, Beispiele durchzuarbeiten.
Warum versuchst du nicht einfach mit C, warum gleich Assembler und dazu noch in Assembler uralte MS-DOS Programme schreiben? Das ist doch langweilig, MS-DOS... neulich war im Radio das Lied "verdammt lang her, verdammt lang her"...
-
Naja, zum Lernen von Assembler ist WinAPI-Gebastel mit Fenstern, etc. IMHO potentiell einfach kontraproduktiv.
Ich denke da zB. an diesen Fall, wo sich dann gewundert wird, dass Assembler und C ja fast gleich aussehen.
-
Naja, zum Lernen von Assembler ist WinAPI-Gebastel mit Fenstern, etc. IMHO potentiell einfach kontraproduktiv.
Ok, sicherlich ist WinAPI zum Lernen von Assembler nicht geeignet. Ich denke aber auch, dass es keinen Sinn macht, ganze Programme in Assembler zu schreiben, geschweige denn WinAPI Assembler-Programme. Sinnvoller wäre, denke ich, bestimmte Funktionen in Assembler zu schreiben, also bzw. Assembler lernen, indem man bestimmte Funktionen in Assembler schreibt und versucht, sie in ein grösseres Programm, das in einer höheren Sprache geschrieben, einzubinden. Das ist zwar auch nicht ohne, aber, ich behaupte, nicht schwerer als ein ganzes Programm in Assembler zu realisieren und man lernt mindestens genau so viel wie im anderen Fall, denke, deutlich mehr als die zig Unterfunktionen von Int 21 oder wie die alle heissen.
-
Ich habe da so meine Zweifel, ob der (Um)weg ueber einen Hochsprachenrahmen wirklich ein sinnvoller Einstieg ist...
Ich meine Assembler - speziell x86 - lernt man doch eigentlich nicht mehr, um es in Hochsprachen zB. als inline Assembler einbinden zu koennen, sondern um allgemein mal eine Assemblersprache und etwas ueber die Plattform zu lernen.So ein Compiler kapselt dabei ja oft zunaechst trotzdem noch einiges ab, wie zB. tatsaechliche Lage von Variablen im Speicher.
Mag zwar stimmen, dass DOS nicht mehr ganz so aktuell ist, aber solche DOS-Programme haben nun mal einfach den Vorteil, dass sie erstmal einen sehr geringen Overhead haben, man sich somit gut auf Assembler an sich konzentrieren kann und das Ganze laeuft auch noch sofort in Windows.
Von daher haelt sich das, was man von DOS lernen muss fuer solche Buecher/Tutorials doch idR. in Grenzen und der Ballast ist auch nicht unbedingt groesser als ein Hochsprachencode als Rahmen.Aber ok, fuer Vorschlaege von entsprechenden Tutorials, etc. bin ich natuerlich immer offen.
-
@abc.w: Ich habe mich schon mit C/C++ beschäftigt. Ich wollte nur halt auch mal ein paar Assembler-Grundlagen erlernen.
Gut, dann liegt es daran, dass der as das nicht kann. Kennt denn wer ein Tut für den as?
-
Hallo,
die man-pages für gas (unter Linux) finde ich persönlich nicht schlecht. Es gibt da auch eine Beschreibung der Besonderheiten der AT&T Syntax und was bei manchen x86 Befehlen zu beachten ist.
Viele Tutorials oder Links, die das eine oder andere vom gas abdecken gibt's im Netz zu finden unter dem Stichwort "linux assembly". Das erste, was google ausgibt, http://asm.sourceforge.net/, dort gibt's auch einige weiterführende Links und andere interessante Infos.
-
ich würd überlegen win zu benutzen, weil man tasm und masm im inet noch kostenlos findet und halt meistens für win
-
Was ich so alles vor zwei Jahren geschrieben habe...
@mik666: Ja, das kann sein, aber GNU/Linux ist und bleibt das gläserne Betriebssystem, unter dem man alles lernel kann. Ob Bootloader-, Kernel-, Treiber-Programmierung, Userspace-, Konsolen- oder GUI-Programmierung - alles möglich, alles da, alles frei und kostenlos.
-
DerRatlose schrieb:
Danke für die Hilfe. Ungefähr so hatte ich es auch probiert. Mein jetziges Problem ist nur, dass der as den kompletten Quelltext nicht lesen kann...
.MODEL Small .STACK 100h .DATA Meldung DB "Hallo Welt$" .CODE Start: mov ax,@data mov ds,ax mov dx,OFFSET Meldung mov ah,09h int 21h mov ah,4Ch int 21h END Start
Das ist der Code, den ich mal aus dem Buch übernommen hatte um ihn zu testen.
Der as kann damit aber gar nichts anfangen. Der gibt für jede Zeile eine Fehlermeldung aus.`Such mal bei http://www.lowlevel.eu/wiki/Inline-Assembler_mit_GCC
-
Bevor weiter diskutiert wird, moechte ich nochmal daran erinnern, dass dieser Thread ueber 2 Jahre alt ist.
Keine Ahnung, warum "mik666" sich bemuessigt sah, diese Mumie mit einem Beitrag von zweifelhaftem Sinn und Nutzen wieder auszugraben, aber selbst fuer den unwahrscheinlichen Fall, dass der OP hier noch einmal liest, duerfte es ihn kaum noch jucken.