Inline Assembler
-
Hallo,
gibt es einen Vorteil(Geschwindigkeit?) wen man Inline-Assembler in
C++ Programm verwendet?0x0ERROR
-
Kann man pauschal nicht sagen.
Abhaengig vom Compiler, und wie gut dieser optimiert, kannst du durchaus bei manchen Programmen noch etwas rausholen. Die heutigen Compiler duerften aber schon so gut optimieren, dass man da kaum noch einen nenneswerten Vorteil daraus zieht, der den Mehraufwand rechtfertigen koennte.
Theoretisch kannst du sogar das Programm durch Inline-Assembler verlangsamen, weil der Compiler effektiver optimiert, als du deinen Inline-Assembler-Code schreibst.Deswegen: Wenn du vorhast ein Programm zu optimieren, guck was dein Compiler machen kann und achte darauf, dass du effektiven Code schreibst. Das duerfte am meisten bringen, v.a. aber ist es weniger aufwendig.
-
Ist der InlineAssembler-Code dann plattformunabhängig oder
wie normaler Assembler Prozessorabhängig?0x0ERROR
-
Platformabhaengig. Inline-Assembler ist ja kein Teil des C++-Standards.
Wie wolltest du auch, sagen wir Itanium2-Assembler, auf ner normalen x86 zur Ausfuehrung bringen oder x86-Assembler eingebettet in ein Programm fuer einen ATMEL-AVR-Controller?
Die Architekturen sind zu unterschiedlich. Und deswegen ist Inline-Asm halt auch nicht portabel.
-
Gibt es irgenwo deutsche Tutroials? (Intel Pentium,Windows 7 oder Linux)
0x0ERROR
-
Welchen Compiler verwendest du? Inline-ASM ist nicht nur Architektur-, sondern auch Compiler-Spezifisch.
-
Windows: Visual C++, Dev C++
Linux: GCC, G++0x0ERROR
-
Schonmal keine gute Kombination.
Visual Studio nutzt die Intel-Syntax, GCC die AT&T-Syntax. Bei Dev-CPP bin ich mir nicht sicher.Jedenfalls musst du wahrscheinlich zwei verschiedene Assembler-Syntaxen lernen. Die Befehle bleiben zwar die selben, aber die Operanden-Reihenfolge, die Operanden selber und noch einiges mehr ist verschieden.
Bei den Tutorials kannst du ja mal googlen. Wobei ich da allgemein nach einem Assembler-Tutorial gucken wuerde, da Inline-Asm eigentlich fast das selbe ist. Kannst auch mal die Doku deines Compilers zu Rate ziehen.
Aber die Frage muss erlaubt sein: Machst du das nur zum Lernen oder willst du optimieren? Bei letzterem hast du definitv bessere Moeglichkeiten.
EDIT: Fuer Tutorias guck mal hier
-
Jonas OSDever schrieb:
Visual Studio nutzt die Intel-Syntax, GCC die AT&T-Syntax. Bei Dev-CPP bin ich mir nicht sicher.
Dev-CPP ist nur eine IDE, die den GCC (bzw. die MingW Variante davon) nutzt. Von daher ist das kein Problem.
Von GCC zum Visual Studio Compiler gibt es da aber Probleme. Das liegt in dem Fall aber nicht an der Assembler Syntax. Der GCC lässt sich auf Intel-Syntax umstellen. Trotzdem unterscheidet sich die Art wie der Assemblercode in den C++ Quellcode integriert wird um z.B. auf Variablen zuzugreifen.
-
Jonas OSDever schrieb:
Aber die Frage muss erlaubt sein: Machst du das nur zum Lernen oder willst du optimieren? Bei letzterem hast du definitv bessere Moeglichkeiten.
Zum Lernen. Später vlt. auch optimieren, aber erstmal nur zum lernen.
Edit: Gibt es auch deutsche Tutorials? Und kann man dieses oder
dieses Buch zum lernen empfehlen?
0x0ERROR
-
Bei einigen Architekturen kann man mit inline ASM schön Befehle nutzen die ein Compiler (mit welcher Optimierungsstufe auch immer) eben nicht nutzt. Intrinsics sind auch nicht gerade unüblich, was ja nichts anderes als inline ASM ist.