Buchempfehlung?
-
Guten Tag zusammen,
habe bereits das buch "Assembler - Grundlagen der Programmierung (Joachim Rohde)", sowie "Reversing (Eldad Eilam)" durch. Jetzt würde ich mich gerne weiterbilden in diesem Bereich.
Kenn jemand empfehlendswerte Bücher?Wie das perfekte Buch sein sollte:
- Möglichst aktuell
- SSE bzw. alle Erweiterungen
- 64bit Programmierung
- Vielleicht ein paar Optimierungstipps...Schöne Grüße!
-
__username schrieb:
Wie das perfekte Buch sein sollte:
- Möglichst aktuell
- SSE bzw. alle Erweiterungen
- 64bit Programmierung
- Vielleicht ein paar Optimierungstipps...das Buch nennt sich "Dokumentation" und man kann es umsonst bei den Herstellern runterladen.
-
Hm... hab auf etwas gehofft, was man so auf der Couch mal lesen könnte...
Dokumentationen sind noch "etwas" zu viel für mich
-
zumindest bis 2009 hat Intel einem die Manuals in Buchform umsonst geschickt ... da kommst du leider etwas zu spät
Bevor die was kaufst, schau dir lieber erst mal AMDs Manuals an - die sind IMO sehr gut schrieben und besser Strukturiert als Intels.
-
Werde ich dann mal tun, danke
-
Die ein oder andere gute Programmiertechnik bekommt man auch in Assemblermanuals/dokus mit, zumindest die vom Hauptarbeitsassembler sollte man sich gut anschauen.
Mit den beiden genannten Büchern kommt man schon recht weit, wenn man damit vernünftig arbeitet und sich die Beispielcodes anschaut, umprogrammiert und so. Was vielleicht fehlt, sind Programmiertechniken, und Ansätze zum Selber-Überlegen.
Und wenn man über die ersten Schritte hinweg ist, dann sind noch die beiden Bücher von Rhode (Assembler gepackt) und Backer recht nützlich zum Nachschlagen. Und ich finde es wäre keine schlechte Anfängeraufgabe, das Buch vom Backer nach Linux-Asm zu übersetzen und auf 64 Bit Programmiertechnik zu erweitern. Ein kleine Hilfe ist sicher das Buch vom Bartlett:
http://www.amazon.de/Programming-Ground-Up-Jonathan-Bartlett/dp/0975283847
bzw.
http://savannah.nongnu.org/projects/pgubook/Du kannst eigentlich schon anfangen, dir selbst zu überlegen, wie man z.B. einfache C-Funktionen, Algorithmen, Sortier und Codierzeugs nach Assembler übersetzen kann. Wenn du Schwierigkeiten damit hast, schau, wie weit du mit Assemblerbibliotheken und Beispielen wie die von Microsoft Visual Studio Masm, Masm32, Nasm, Fasm und Co kommst oder eben mit kleineren Programmen wie in Assembler geschriebenen Computerviren und so Zeugs.
Und natürlich ist Ida deine beste Freundin und Lehrerin, um die besten Codiertechniken (oder ganz grauenhafte...) zu lernen.
Ein guter Plan ist, sich selbst ein Konzept zu überlegen, wo es hingehen soll, und wie man dahinkommt. In gewisserweise sich selbst ein Buch schreiben und gewisse Ziele setzen.
Für 64 Bit und SSE und so Sachen, braucht man kein extra Buch, da reichen die Dokumentationen und was man so im Internet findet, wie
http://www.complang.tuwien.ac.at/ubvl/amd64/amd64h.htmlAußerdem eine didaktisch sehr gute Sache ist es, selbstgeschriebene Funktionen gemeinsam mit anderen zu optimieren.
Überleg dir z.B. eine Variante von Radixsort, oder einen anderen klassischen Algorithmus, und setz das in Assembler um und poste das in ein gut besuchtes Codierforum. Auch hilfreich ist natürlich der Blick in das Dissassembling eines Compilers bei solchen Aufgaben, auch von Compilern kann man einiges abgucken und dazulernen.
-
__username schrieb:
Dokumentationen sind noch "etwas" zu viel für mich
Dann hast Du noch keine Ahnung. Assembler ist nichts für Dich. Programmiere erst mal lieber eine Weile lang in C oder C++.
-
@nachtfeuer:
Danke, vor allem der Link sieht ziemlich gut aus!@abc.w:
Das hat doch nichts mit Assembler zu tun oO
-
__username schrieb:
@abc.w:
Das hat doch nichts mit Assembler zu tun oODu lernst dabei Konstrukte, deren Verständnis auf der Assembler-Ebene unabdingbar ist. Funktionen und ihre Rückgabe-Werte, Parameter, Konstrukte wie Strukturen, Schleifenarten, Arrays, Zeiger - wichtig, um die Adressierungs-Arten der CPU zu verstehen und sinnvoll einzusetzen.
-
Das ist interessant, meine Überzeugung ist eher die, dass es günstiger ist, zuerst Assembler zu lernen, um besser C zu verstehen. Assemblergrundlagen sind schneller gelernt, als dubiose (aber natürlich programmierpraktische) C Abstrakta und mit etwas Übung fällt es leicht, C - Programme (wie geht eine for schleife?) zu übersetzen, und man versteht, glaube ich, C - Interna etwas besser als ohne Asm. Allerings sollte man in Linux die C-libs gut kennen, um sie auch fleißig mitzubenutzen.
Man kann sich das aber so halten, wie es einem selbst eher entgegenkommt, da muss man niemanden was einreden und muss sich keiner unnötig zu irgendetwas zwingen.
-
Na, war nur ein Rat von mir. Ich denke, wenn man mit der Dokumentation von Intel, AMD o.ä. noch nichts anfangen kann, dann fehlt es noch an der notwendigen Erfahrung, "Strenge", "Abhärten", um sich mit der Materie auseinanderzusetzen. Wie in der Grunschule, man fängt ja nicht gleich an, ein Buch von Anfang bis Ende durchzulesen, man macht liest häppchenweise kleinere Texte und es dauert lange, bis man ein Buch vollständigen durchlesen kann - man kann es zwar lesen, aber bis zum Ende durchhalten braucht Zeit, man muss mehrere Stunden, Tage, Wochen, Monate an dem einen Buch sitzen und das ist bereits für viele ein Problem und es gibt sogar wenige, die noch nie ein Buch in ihrem Leben vollständig durchgelesen haben.
Ja! Man kann Bücherlesen auch auf Programme schreiben, Dokumenation lesen usw. übertragen. Meine Meinung.
-
Nein nein, ihr hattet schon ganz recht im Grunde.
Hab mir jetzt mal ein paar Dokus von Intel (z.B. zum Thema Optimize) heruntergeladen, man sollte sich keine Sorgen machen vor etwas, das man noch garnicht kennt
-
Aber die Dokus sind sowieso nur Nachschlagewerke, und helfen nicht unbedingt beim Selbernachdenken. Das ist wie bei Datenblättern von Mikrocontrollern. Programmiererfahrung kommt mit der Übung, nicht mit dem Lesen vom Datenblatt (oder Buch).
Und man kann sich natürlich auch sämtliche Dokumentationen von Microsoft/Windows reinziehen, wenn man Windows programmieren will, statt sich auch mal Sourcecodes und Programmiertechniken von anderen anzuschauen und selber dies und das auszuprobieren.
-
Bin jetzt dabei, ne kleine Library für Convertaufgabe (z.B. String To Int/Float) und andersherum zu basteln. Hab mich ein wenig im Internet umgeschaut und gedacht, das wäre doch ne gute Idee zum lernen, das ganze ist in Assembler geschrieben. Naja, nur sieht es leider so aus, dass ich fast jeden Tag irgendetwas wieder lösche, weil ich eine neue/bessere Idee habe
Aber das ist eben das unbequeme beim "selber Nachdenken"...Interessante Bücher hab ich keine mehr gefunden, werde mich dann wohl mit Dokus Ausprobieren "weiterbilden".