Assembler noch nützlich ??
-
Original erstellt von RenéG:
**Siehe strlen() sowie MMX/SIMD/3DNow-Routinen und versuch das mal in C
**Ok ich sag mal wenn man sich sehr gut in asm auskennt ist man dazu in der Lage schnelleren Code als ein guter C++ Compiler zu erzeugen wenn sie sich im Verhältnis ein vielfaches an Zeit nimmt
.
Und das das bei libs oft Sinn macht tagelang eine Funktion zu optimieren und , die in asm zu schreiben und solange zu verbessern bis es nichtmehr geht stimmt schon.Nur wenn man jetzt dabei geht und ein normales Programm ganz normal runterschreibt ist die C Variante bei den heutigen Compilern meist schneller weil die mittlerweile auch bei riesigen Projekten so gut optimieren wie es kein asm Programmierer hinbekommt ohne den Überblick zu verlieren(wer vom Compiler optimierten asm Code normal versteht hat meinen Respekt :o ).
-
Nur wenn man jetzt dabei geht und ein normales Programm ganz normal runterschreibt
Definitionsfrage, was ist ein 'normales' Programm?
Für die einen halt z.B. der Internet-Explorer. Da das Laden der Seiten meist länger dauert als die Verarbeitung, ist ASM hier ziemlich Quatsch.Für die anderen sind normale Programme halt MPEG2-Encoder. Viel Rechnung mit wenig Daten. Ich kenne keinen MPEG2-Encoder auf C-Basis, der sich durchgesetzt hat.
-
auch für Programme mit hohem Rechenaufwand ist Assembler nicht die Allheillösung, da besodners größere Programme ja innerhalb eines Jahrhunderts irgendwann auch fertig werden sollten
. Außerdem je weiter die Compilier-Optimierung vorangeht , desto weniger muß irgendetwas noch mit Assembler gecodet werden, denk ich mal.. ein Grundwissen von Assembler is aber schon ganz gut, und wenns nur ist zu wissen wieviel bequemer und schneller man mit hochsprachen vorankommt
-
Also Ass zu lernen ist grundsätzlich nicht falsch, es ist (so sage ich immer) die Muttermilch.
Das braucht man irgendwie für den Anfang, aber später dann nicht. Nachdem ich damals von Ass nach C++ umgestiegen bin, hab ich immer noch in Ass gedacht, während ich C++ schrieb. Heute nach einigen C++-Jahren ist es nicht mehr ganz so schlimm.
Wer Ass programmieren kann (egal welche CPU, muß ja kein x86 sein) versteht auch den Computer besser und wird auch beim Hochsprachen-Coden sich immer wieder erinnern, das er vielleicht in der Hochsprache etwas optimieren kann. Weil man sich denkt, der Compiler wird wohl dies und das daraus machen, aber das wäre nicht so optimal. Naja...
Für Standard-Anwedungen wird man heute nicht in Ass coden. Zumal die C++-Compiler heute schon so gut sind, das man wohl eh gegen ihn verlieren würde. ;)Ass wird man wohl eher da noch coden, wo Speicher knapp ist und/oder wo es wohl auf jeden Taktzyklus ankommt.
Falls du Ass lernen willst: besorg dir nen C64-Emulator und hau in die Tasten! Da hat man wenigstens einen Grund in Ass zu coden.
-
Original erstellt von Artchi:
Falls du Ass lernen willst: besorg dir nen C64-Emulator und hau in die Tasten! Da hat man wenigstens einen Grund in Ass zu coden.Die Architektur ist eines der Abschreckendsten Beispiele, die ich bisher gesehen habe, dagegen ist x86 noch ein Segen
Den Toipp würde ich nur wem geben, von dem ich will, dass er ANGST vor Assembelr bekommt
-
Er soll ja kein neues Turrican coden!
Aber auf dem PC sich in Ass ranmachen... das ist irgendwie so sinnlos. Bei den alten 8 Bittern hat man gleich die passende Umgebung: langsam und wenig Speicher - ergo muß man in Ass coden.
OK, bei der 6510-CPU hat man sehr wenig Register etc. aber es ist einfacher zu lernen als x86. Bei x86 krieg ich nen Krampf, in dem Register darf man das, in dem anderen das nicht usw. Vorallem hat der x86 viiieeel zu viele Befehle, es dauert ewig bis man die CPU kennt. Den 6510 hat man dagegen mit seinen paar Befehlen und drei Registern ruck zuck gelernt.
Vorallem kann man ruck zuck Sprites darstellen, man kann so ebend mal die Bildschirmfarbe ändern usw. Alles mit im Schnitt zwei bis drei Befehlen, man hat sofort Ergebnisse die einen motivieren weiter zu machen.
Die Architektur des C64 ist im Prinzip ganz einfach... kein Wunder, so viel gibts da ja nicht zu erforschen.
Kann also den C64 als Ass-Einstieg nur empfehlen. Und das meine ich jetzt mal im Ernst.
[ Dieser Beitrag wurde am 04.07.2003 um 16:18 Uhr von Artchi editiert. ]
-
Original erstellt von Artchi:
**Er soll ja kein neues Turrican coden!Aber auf dem PC sich in Ass ranmachen... das ist irgendwie so sinnlos. Bei den alten 8 Bittern hat man gleich die passende Umgebung: langsam und wenig Speicher - ergo muß man in Ass coden.
OK, bei der 6510-CPU hat man sehr wenig Register etc. aber es ist einfacher zu lernen als x86.
**Ich würde sagen bei sowenig ist das shcon kontraproduktiv, selbst der x86 hat schon wenig so dass man ständig was im Speicher lagern muss.
**
Bei x86 krieg ich nen Krampf, in dem Register darf man das, in dem anderen das nicht usw. Vorallem hat der x86 viiieeel zu viele Befehle, es dauert ewig bis man die CPU kennt. Den 6510 hat man dagegen mit seinen paar Befehlen und drei Registern ruck zuck gelernt.
**Also die Register finde ich sind recht geläufig, da gibts doch außer ESP und EBP nichts besonderes. Gut der Befehlssatz ist etwas übertrieben.
**
Kann also den C64 als Ass-Einstieg nur empfehlen. Und das meine ich jetzt mal im Ernst.
**Ich halte den Sparc-Assembler dagegen
Zugegeben, der ist nicht ganz so schnell emuliert zu bekommen, aber der hat eine vernünftige Zahl an Registern und einen schönen Befehlssatz.
-
@Newbie0850
Ist Assembler immernoch nützlich?
assembler wird nie wirklich aussterben und unütz sein. es kommt darauf an wofür man assembler nutzt. zum beispiel um spezielle treiber zu schreiben die besonders schnell sein sollen, wird man wahrscheinlich NIE um assembler drumrum kommen. allgemeiner gesagt, braucht man immer eine sprache, die einer hardware DIREKT sagt, was sie machen soll. und genau dafür ist assembler. insofern wird assembler IMMER nützlich sein.
...Aber, ist das der einzige nützliche Vorteil Assembler zu beherschen heute? Oder hat man mit Assembler gravierende Vorteile gegenüber anderen Programmiersprachen?
ich glaube nicht das man das so sagen sollte. es geht nicht NUR darum sich das disassemblat eines debuggers anzuschauen. (ausserdem wer macht das schon wenn er ein c/c++-programm debugt? er wird nicht mehr information erfahren, als wenn er sich die c/c++-debug-informationen anschaut.) wenn man mit assembler programmieren kann, dann weisß man wie eine rechenmaschine funktioniert. das bringt einem viel verständnis und man versteht besser was wirklich passiert, und sitzt nicht nur dumm davon und fragt sich warum das denn alles so ist wie es ist.
ein einfaches beispiel:
wenn man einen führeschein gemacht hat und autofahren kann, dann weiß man (teilweise) wie ein auto funktioniert und man kann mit einem auto mehr anfangen als wenn man keinen führerschein hat. deine frage mit dem debugger wäre dann gleichbedeutend mit: "ist es der einzige nützliche vorteil, wenn ich mit einem auto aus der garage fahren kann?"
nein. wenn man ein auto fahren kann, kann man noch viel mehr. man kann sich vorallem besser über andere autos unterhalten, weil man jetzt vesteht, worauf es bei einem auto denn ankommt.
und wenn man mit assembler programmieren kann, dann kann man sich viel besser über computer unterhalten und bessere programme schreiben, ..., weil man jetzt versteht, worauf es bei einem comuter denn ankommt.
sorry für dieses "kinderbeispiel" aber somit wirds klarer hoffe ich.
-
Warum nicht MMIX-Assembler zum Einstieg?
-
...strlen()...
Also so was kann man auch in C coden!
MFG
CrazyLinux
-
ASM ist wie gesagt sehr gut um einiges über den Prozessor und die allgemeine Funktionsweise eines Computers, des Stacks usw. zu lernen. ASM ist zudem ein schöner Zeitvertreib. Ich nenne da nur Virenprogrammieren (nicht verbreiten, sondern lediglich programmieren) oder Cracken. Da gibt es zum Beispiel http://www.reverser-course.de (hab ich erst letzten mit angefangen).