Warum erklärt man die _asm{} Direktive bei C und C++ nicht zum Standard
-
ich finde das nämlich unheimlich praktisch, das man bei den Compilern von Microsoft alle Assemblerbefehle einfach in einen
_asm{} Bereich packen kann.Beim GNU C/C++ Compiler muß man für jeden Befehl die ASM Direktive einzeln hinschreiben. In jeder Zeile, das ist mühselig und aufwendig
und Assemblerprogrammierung macht damit keinen Spaß.
-
Beim GNU C/C++ Compiler muß man für jeden Befehl die ASM Direktive einzeln hinschreiben. In jeder Zeile, das ist mühselig und aufwendig
und Assemblerprogrammierung macht damit keinen Spaß.int main() { __asm__("movl $20,%eax\n" "movl $20,%ebx"); }
nein.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
JustAnotherNoob schrieb:
Beim GNU C/C++ Compiler muß man für jeden Befehl die ASM Direktive einzeln hinschreiben. In jeder Zeile, das ist mühselig und aufwendig
und Assemblerprogrammierung macht damit keinen Spaß.int main() { __asm__("movl $20,%eax\n" "movl $20,%ebx"); }
nein.
dafür ist die syntax total grottig. und dass befehle mit 'nem \n abgeschlossen werden müssen, ist auch ziemlich übel. dagegen ist die asm-unterstützung der ms-compilern die reinste offenbarung.
-
fricky schrieb:
JustAnotherNoob schrieb:
Beim GNU C/C++ Compiler muß man für jeden Befehl die ASM Direktive einzeln hinschreiben. In jeder Zeile, das ist mühselig und aufwendig
und Assemblerprogrammierung macht damit keinen Spaß.int main() { __asm__("movl $20,%eax\n" "movl $20,%ebx"); }
nein.
dafür ist die syntax total grottig. und dass befehle mit 'nem \n abgeschlossen werden müssen, ist auch ziemlich übel. dagegen ist die asm-unterstützung der ms-compilern die reinste offenbarung.
dem stimme ich zu. aber ein kleiner eigener präprozessor hilft da wunder, nützt natürlich nur was für eigene projekte
-
gcc ist übrigens quelloffen. anpacken statt rummeckern.
-
hinweiser schrieb:
gcc ist übrigens quelloffen. anpacken statt rummeckern.
geh wieder WoW spielen
-
fricky schrieb:
JustAnotherNoob schrieb:
Beim GNU C/C++ Compiler muß man für jeden Befehl die ASM Direktive einzeln hinschreiben. In jeder Zeile, das ist mühselig und aufwendig
und Assemblerprogrammierung macht damit keinen Spaß.int main() { __asm__("movl $20,%eax\n" "movl $20,%ebx"); }
nein.
dafür ist die syntax total grottig. und dass befehle mit 'nem \n abgeschlossen werden müssen, ist auch ziemlich übel. dagegen ist die asm-unterstützung der ms-compilern die reinste offenbarung.
Lachhaft. Wenn Syntax dein Problem ist, solltest von Assembler (oder C :p) ohnehin Abstand nehmen. Was bei MS eine Offenbarung sein soll, müsstest du schon erklären: für x64 Targets gibt es keine Unterstützung und constraints für Operanden kann man auch nicht formulieren. Ja, die Syntax ist relativ simpel, aber ein Maximum an Effizienz kann man so nicht erreichen.
Abgesehen davon sind solche Diskussionen über angebliche Defekte von Programmen (tatsächlich hier wieder wie so oft: das Problem befindet sich vor dem Bildschirm) absolute Zeitverschwendung.
-
sothis_ schrieb:
hinweiser schrieb:
gcc ist übrigens quelloffen. anpacken statt rummeckern.
geh wieder WoW spielen
wirklich sehr intelligenter kommentar, respekt.
-
hinweiser schrieb:
sothis_ schrieb:
hinweiser schrieb:
gcc ist übrigens quelloffen. anpacken statt rummeckern.
geh wieder WoW spielen
wirklich sehr intelligenter kommentar, respekt.
ähnlich intelligent wie deiner
-
camper schrieb:
Wenn Syntax dein Problem ist, solltest von Assembler (oder C :p) ohnehin Abstand nehmen.
die asm-syntax selbst ist nicht das problem. aber wenn sie jemand mit irgendwelchen unnötigen sonderzeichen ausschmückt, frag ich mich schon, ob der nicht gerade auf 'nem LSD-trip war.
-
sothis_ schrieb:
ähnlich intelligent wie deiner
argumentieren ist nicht gerade deine stärke, oder? wie wäre es, wenn du trotz offenbar stark eingeschränktem vokabular deinen einwand so formulierst, dass auch normale menschen verstehen können, worauf du eigentlich hinaus willst? mit deinen doofen kommentaren machst du dich nämlich nur zum affen.
ich sags auch gerne nochmal für dich: gcc ist quelloffene software. man könnte also in erwägung ziehen, das programm so anpassen, dass die vom threadersteller genannten mängel mit der asm-direktive behoben sind. das ist doch einer der großen vorteile von oss, die man ständig vorgebetet bekommt.
natürlich kann man auch deinem tollen vorschlag folgen, statt der ursache die symptome zu bekämpfen und ein komplett neues programm für den eigenbedarf schreiben. sinnvoll ist das aber sicher nicht.
-
hinweiser schrieb:
ich sags auch gerne nochmal für dich: gcc ist quelloffene software. man könnte also in erwägung ziehen, das programm so anpassen, dass die vom threadersteller genannten mängel mit der asm-direktive behoben sind. das ist doch einer der großen vorteile von oss, die man ständig vorgebetet bekommt.
Bla bla bla... Nur weil etwas im Quellcode verfügbar ist, muß nicht jeder etwas anpassen können oder müssen. Oder willst du mir erzählen, das wenn ich jetzt am GCC eine Änderung mache, diese morgen drin sein kann? Natürlich nicht! Da wird es sicherlich ein Core-Team geben, das darüber entscheidet, was wann und vorallem ob es rein darf. Überleg mal etwas weiter, wie so ein Software-Projekt funktioniert. Es ist reiner naiver Populismus zu sagen "Dann machs doch selbst!".
-
BarnieGeroellheimer schrieb:
Oder willst du mir erzählen, das wenn ich jetzt am GCC eine Änderung mache, diese morgen drin sein kann?
in *deiner* version ist die änderung sogar sofort drin. und wenn die änderung für eine angemessene anzahl leute nützlich ist, gelangt sie früher oder später in die offizielle version.
Es ist reiner naiver Populismus zu sagen "Dann machs doch selbst!".
bla bla. ich habe schon zig features in verschiedene oss eingebaut. selbst wenn änderungen erst spät oder sogar nie in einer offiziellen version erscheinen, macht *meine* version genau das, was ich will und brauche.
-
hinweiser schrieb:
bla bla. ich habe schon zig features in verschiedene oss eingebaut. selbst wenn änderungen erst spät oder sogar nie in einer offiziellen version erscheinen, macht *meine* version genau das, was ich will und brauche.
Haste wieder nicht nachgedacht?! Und was hat dein "Die Version in meinem kleinen Kabuff auf meiner Platte" mit "zum Standard machen" zu tun??? Hallo? Jemand zu Hause? Ich kann vieles zu Hause machen, was niemanden da draussen erreicht. Und, was hat das mit der Frage in diesem Thread zu tun?
-
natürlich kann man auch deinem tollen vorschlag folgen, statt der ursache die symptome zu bekämpfen und ein komplett neues programm für den eigenbedarf schreiben. sinnvoll ist das aber sicher nicht.
Ahja, es ist also sinnvoller den GCC so zu modifizieren, dass er nicht mehr zu anderen GCCs portierbar ist und somit das minimum an Portierbarkeit(auf dieses spezielle Programm) erreicht wird(Man müsste für eine Portierung jedes mal den Compiler modifizieren, von dem Verlust der Kompatibelität zu anderen Compilern ganz zu schweigen), als dass man einen Präprozessor schreibt, welcher den syntaktischen Zucker wesentlich abstrahierter in validen GCC Konformen(mit evtl. Parametern auch zu anderen Compilern konform) C++ Code zu verwandeln?
Dabei natürlich noch den Mehraufwand auf sich nehmen den GCC zu verstehen und modifizieren zu können.
Willst du das nicht evtl. noch mal überdenken???übrigens schien mir Inline Assembly im GCC besser als in Visual Studio, da die Kommunikation mit dem C++ Code mMn besser ist.
-
fricky schrieb:
JustAnotherNoob schrieb:
Beim GNU C/C++ Compiler muß man für jeden Befehl die ASM Direktive einzeln hinschreiben. In jeder Zeile, das ist mühselig und aufwendig
und Assemblerprogrammierung macht damit keinen Spaß.int main() { __asm__("movl $20,%eax\n" "movl $20,%ebx"); }
nein.
dafür ist die syntax total grottig. und dass befehle mit 'nem \n abgeschlossen werden müssen, ist auch ziemlich übel. dagegen ist die asm-unterstützung der ms-compilern die reinste offenbarung.
Nicht wirklich. Alles hat seine Vor- und Nachteile. Die Inline Assembler Unterstützung des MSC ist in der Tat relativ unproblematisch und einfach. Dafür ist sie wenig flexibel. Ausserdem entspricht sie nicht den C bzw C++ Standards. Diese verlangen, dass Inline Assembler wie folgt eingebettet wird:
asm ( string-literal );
Der Inline Assembler vom GCC ist zwar etwas komplizierter, allerdings betrifft das wirklich nur die Formatierung. Du musst übrigens kein '\n' ans Ende jeder Anweisung schreiben. Ein Semikolon reicht auch. Würde ja sogar zu C bzw C++ passen.
Das Assembler Listíng sieht dann allerdings relativ unübersichtlich aus.
Die wirkliche Stärke des GCC Inline Assemblers liegt aber in den Constraints. Dagegen sieht der MSC einfach blass aus. GCC unterstützt übrigens nicht nur AT&T, sondern auch Intel Syntax (-masm=intel).int main() { asm ( "mov eax, 20;" "mov ebx, 20;" ); }
-
JustAnotherNoob schrieb:
Willst du das nicht evtl. noch mal überdenken???
nein, will ich nicht. denn die freie änderbarkeit ist der vorteil von oss schlechthin, und überhaupt eines der grundlegenden pro-oss-argumente.
wenn im gcc die inline-asm syntax fürn arsch ist und man kann es ändern, warum macht man es dann nicht? egal ob man es selbst macht und einfach einen patch einreicht, oder zumindest entsprechende vorschläge an das core-team zu machen oder bestehende zu unterstützen. und so wahnsinnig kompliziert wird es wohl nicht sein, diese '\n'-geschichte zu patchen.wenn jeder so denkt wie ihr, bleibt es nämlich immer so scheiße wie es ist. aber meckern und ad hominem argumentieren ist natürlich einfacher. zwar nicht zielführend, aber bequemer.
eod.
-
groovemaster schrieb:
GCC unterstützt übrigens nicht nur AT&T, sondern auch Intel Syntax (-masm=intel).
int main() { asm ( "mov eax, 20;" "mov ebx, 20;" ); }
na, dann ist die welt doch wieder in ordnung.