Seite 1 von 2
Assembler mit C++
Verfasst: Do Jun 07, 2012 10:15 pm
von Kmitska
Hallo Leute,
ich würde gerne mit Assembler zusammen arbeiten bzw. ein bisschen Assembler lernen.
Weiß aber nicht, wie Assembler mit C++ zusammen arbeitet...
Habe im Internet mal bisschen gesucht kam auf solche Sachen, die man in C++-Code schreiben kann:
Doch keines davon funktioniert für mich.
Gibt es da auch einen "Compiler" für Assembler? Das es ein Compiler ist glaube ich kaum

aber wo schreibt man das dann?
Informationen über mein IDE:
OS: MS Windows 7
IDE: Code::Blocks
Compiler: mingw (g++)
Sprache: C++
Danke im Voraus und über allgemeine Informationen würde ich mich auch freuen.
Grüße,
Kmitska
Re: Assembler mit C++
Verfasst: Do Jun 07, 2012 11:08 pm
von Xin
Kmitska hat geschrieben:Weiß aber nicht, wie Assembler mit C++ zusammen arbeitet...
Man kompiliert einen C/C++-Quelltext mit dem Compiler und erhält ein Object-File.
Man assembliert einen Assembler Quelltext mit einem Assembler (z.B. NASM) und erhält ebenfalls ein Object-File.
Möchte man eine Funktion aus einem anderen Object-File rufen, muss man dies "exportieren". Dafür benutzt man in C/C++ den Befehl Export.
In NASM setzt man eine Sprungmarke "global". Mit der Behauptung in C, dass diese Sprungmarke eine Funktion ist, kann man dorthin springen und landet dann in der Assemblerfunktion.
Um die beiden Objektfiles zusammen zu führen, benutzt man den Linker (oder ruft diesen mit dem gcc-Komando).
Kannst Du mehrere Objectfiles, aus C zusammenführen?
Re: Assembler mit C++
Verfasst: Fr Jun 08, 2012 3:45 pm
von canlot
Du kannst aber auch inline assembling benutzen gcc unterstützt das.
Du musst nur aufpassen das du die AMD Syntax nimmst da Intel von gcc nicht unterstützt wird.
Re: Assembler mit C++
Verfasst: Sa Jun 09, 2012 1:12 pm
von Kmitska
Kannst Du mehrere Objectfiles, aus C zusammenführen?
Kenne mich mit somit nicht wirklich aus, deswegen verstehe ich glaube ich auch das Linken nicht...
Du kannst aber auch inline assembling benutzen gcc unterstützt das.
Du musst nur aufpassen das du die AMD Syntax nimmst da Intel von gcc nicht unterstützt wird.
Das habe ich bereits erwähnt, bekomme leider nur Fehler.
Re: Assembler mit C++
Verfasst: Sa Jun 09, 2012 1:48 pm
von fat-lobyte
Kmitska hat geschrieben:Kenne mich mit somit nicht wirklich aus, deswegen verstehe ich glaube ich auch das Linken nicht...
Dann solltest du dich mal damit auseinadersetzen. Auf den Compiler und deine Build-Tools vertrauen kannst du nur ganz am Anfang, bei größeren Projekten solltest du wissen was passiert.
kmitska hat geschrieben:Das habe ich bereits erwähnt, bekomme leider nur Fehler.
Du nervst langsam echt. Keine Infos, keine Hilfe. Wie willst du intelligente Antworten kriegen wenn du weder den Code zeigst der die Fehler verursacht, noch die Fehlermeldungen selbst?
Xin hat geschrieben:Kannst Du mehrere Objectfiles, aus C zusammenführen?
Das ist nur eine Möglichkeit, normalerweise sollte inline-Assembler vom Compiler auch unterstützt werden.
canlot hat geschrieben:Du kannst aber auch inline assembling benutzen gcc unterstützt das.
Du musst nur aufpassen das du die AMD Syntax nimmst da Intel von gcc nicht unterstützt wird.
Was zum Teufel ist denn "AMD"-Syntax?? Ich kenn nur AT&T-Syntax, und ich denke das ist auch diejenige, die von GCC unterstützt wird.
Re: Assembler mit C++
Verfasst: Sa Jun 09, 2012 2:43 pm
von canlot
fat-lobyte hat geschrieben:
canlot hat geschrieben:Du kannst aber auch inline assembling benutzen gcc unterstützt das.
Du musst nur aufpassen das du die AMD Syntax nimmst da Intel von gcc nicht unterstützt wird.
Was zum Teufel ist denn "AMD"-Syntax?? Ich kenn nur AT&T-Syntax, und ich denke das ist auch diejenige, die von GCC unterstützt wird.
Haha das meinte ich auch

kein Grund sich so aufzuregen

Re: Assembler mit C++
Verfasst: Sa Jun 09, 2012 8:33 pm
von Xin
Kmitska hat geschrieben:Kannst Du mehrere Objectfiles, aus C zusammenführen?
Kenne mich mit somit nicht wirklich aus, deswegen verstehe ich glaube ich auch das Linken nicht...
Dann sollten wir daran zuerst arbeiten.
fat-lobyte hat geschrieben:Xin hat geschrieben:Kannst Du mehrere Objectfiles, aus C zusammenführen?
Das ist nur eine Möglichkeit, normalerweise sollte inline-Assembler vom Compiler auch unterstützt werden.
Wer Assembler programmieren will, sollte - imho - halbwegs verstehen, wie ein Programm funktioniert.
Re: Assembler mit C++
Verfasst: So Jun 10, 2012 9:38 am
von fat-lobyte
canlot hat geschrieben:Haha das meinte ich auch

kein Grund sich so aufzuregen

Sorry, war nur verwirrt

Re: Assembler mit C++
Verfasst: So Jun 10, 2012 11:26 am
von Kmitska
Das habe ich bereits erwähnt, bekomme leider nur Fehler.
Du nervst langsam echt. Keine Infos, keine Hilfe. Wie willst du intelligente Antworten kriegen wenn du weder den Code zeigst der die Fehler verursacht, noch die Fehlermeldungen selbst?
Irgendwann werde ich es auch lernen. :)
Also zurück zum Inline-Assembler, habe dies hier getippt:
Code: Alles auswählen
#include <iostream>
int main()
{
asm(
printf("hello");
)
}
Fehlermeldung (ganz Vorbildlich oder? :) )
||=== Assembler, Release ===|
D:\C++\C++ Projekte\Assembler\main.cpp||In function 'int main()':|
D:\C++\C++ Projekte\Assembler\main.cpp|6|error: expected string-literal before 'printf'|
D:\C++\C++ Projekte\Assembler\main.cpp|7|error: expected primary-expression before ')' token|
D:\C++\C++ Projekte\Assembler\main.cpp|7|error: expected ';' before ')' token|
||=== Build finished: 3 errors, 0 warnings ===|
Kannst Du mehrere Objectfiles, aus C zusammenführen?
Kenne mich mit somit nicht wirklich aus, deswegen verstehe ich glaube ich auch das Linken nicht...
Dann sollten wir daran zuerst arbeiten.
Also ich weiß nur, wo diese *.o Dateien sich befinden, doch weiß nicht wie man sie verwendet.
Vielleicht verstehe ich ja danach auch das Linken von Bibliotheken etc. :)
Re: Assembler mit C++
Verfasst: So Jun 10, 2012 11:47 am
von Xin
Kmitska hat geschrieben:Das habe ich bereits erwähnt, bekomme leider nur Fehler.
Du nervst langsam echt. Keine Infos, keine Hilfe. Wie willst du intelligente Antworten kriegen wenn du weder den Code zeigst der die Fehler verursacht, noch die Fehlermeldungen selbst?
Irgendwann werde ich es auch lernen.
Also zurück zum Inline-Assembler, habe dies hier getippt:
Code: Alles auswählen
#include <iostream>
int main()
{
asm(
printf("hello");
)
}
Fehlermeldung (ganz Vorbildlich oder?

)
Ja... Daumen hoch... in dem Fall spielen die aber auch keine Rolle.
Irgendwann wird dieser Thread in Deine proggen.org-Geschichte eingehen, aber mach Dir nichts draus, das haben wir alle hinter uns... nur ich nicht... (ich bin zu alt, damals gab's noch keine Threads)
Wenn Du Assembler lernen möchtest, rate ich dazu, Assembler zu lernen und nicht C. :->
Ich habe da mal was
gegooglelt und geklaut (und nicht nachgeprüft).
Assembler sieht etwa so aus:
Code: Alles auswählen
int main(int argc, char* argv[])
{
char test[] = "hello world\n";
argc = argc;
argv = argv;
__asm__ (
"movl $4, %%eax\n\t"
"movl $1, %%ebx\n\t"
"leal %0, %%ecx\n\t"
"movl $12, %%edx\n\t"
"int $0x80"
:: "m"(*test));
return 0;
}
Kompiliern:
Tipp: Schau dir die Assembler-Ausgabe des Compilers an! (Xin: halte ich auch nicht für verkehrt...)
Aus C Assembler-Code erzeugen:
Kmitska hat geschrieben:Also ich weiß nur, wo diese *.o Dateien sich befinden, doch weiß nicht wie man sie verwendet.
Vielleicht verstehe ich ja danach auch das Linken von Bibliotheken etc.

Das hängt sehr eng zusammen. Kümmere Dich bitte erst darum zu verstehen, wie ein Programm entsteht.