2008-08-26 15 views
3

Meine Ziele konzentrieren sich auf die Entwicklung von Softwareanwendungen und vielleicht auf die Entwicklung von Webanwendungen, aber höchstwahrscheinlich Desktop-Anwendungen. Ich beginne einen Weg, C/C++ besser kennenzulernen, aber sollte ich tiefer gehen als in die Assembly? Oder hätte ich keinen Nutzen für meine langfristigen Ziele?Lohnt es sich einen Dialekt der Versammlung zu lernen?

Antwort

1

Es wird wahrscheinlich nicht viele Vorteile haben, es sei denn, Sie haben eine direkte Anwendung dafür. Wenn Sie nach allgemeinem Wissen suchen, ist C/C++ ein guter Anfang.

Das gesagt, die Herausforderungen, die Montage stellt, sind sehr interessant und es erfordert eine ziemlich andere Denkweise, Dinge zu erledigen.

Ich verbrachte ein wenig Zeit lernen Z80 Montage durch Programmierung der TI-86 Rechner. Der Z80-Befehlssatz ist ziemlich klein und die Neuheit der Programmierung eines Taschenrechners in der Montage ist sehr amüsant.

ticalc.org hat eine Menge guter Ressourcen auf TI assembly programming.

+0

Sie können Homebrew Nintendo Gameboy Spiele mit (einer Untergruppe) von Z80 Assembly, wie gut. – James

1

Ich würde nicht beginnen, ASM zu lernen. Wenn Sie C/C++ lernen wollen, fangen Sie damit an. Wenn die Qualität Ihres Codes zunimmt, stellen Sie möglicherweise fest, dass Sie ASM benötigen. 99% der Zeit werden Sie nicht, aber hin und wieder brauchen Sie es vielleicht.

Außerdem hilft es ASM zu verstehen, was C/C++ hinter den Kulissen macht. Aber wieder, bis Sie fortgeschrittener werden, werden Sie wahrscheinlich keinen Bedarf dafür haben.

1

Ich tat, und ich denke, es hat mir zu der Zeit geholfen. Es hilft mir nicht mehr Tag für Tag, aber ich denke, es hängt von Ihrer Arbeit ab.

Ich lernte Assembler vor 20 Jahren auf einem Commodore und wieder in der Universität auf einem IBM Mainframe. Ich kann nicht sagen, dass es mir in meinem jetzigen Job hilft.

1

Ich stimme Mark zu. Ich denke, es ist vergleichbar mit dem Erlernen von MSIL beim Schreiben in C#, VB.NET oder einer anderen .NET-Sprache. Es hilft zu wissen, was unter der Haube vor sich geht, aber Sie könnten Ihr ganzes Leben damit verbringen, Anwendungen zu entwickeln, die funktionieren und sie nie brauchen.

1

Nein. Wenn Sie nicht zum Spaß wollen, brauchen Sie wirklich keine Montage lernen.

Es gibt einige Dinge, die Sie Assembly für, wie Treibererstellung, OS-Entwicklung, Exploit-Entwicklung wissen müssen, aber abgesehen davon glaube ich persönlich, dass Sie für immer glücklich Code ohne es zu wissen können.

Wenn Sie Montage zu lernen brauchen, werden Sie es wissen - ich würde es nicht lernen, zum Wohle des Lernens ..

1

Wenn Sie nicht verwaltete C++ schreiben, es ist gelegentlich von unschätzbarem Wert zu wissen, bei mindestens grundlegende x86-Assembly, binäre Zahlensysteme usw. Ich mache hauptsächlich C/C++ - Entwicklung, und gelegentlich muss ich Produktionscode auf Fehler debuggen, die so spezifisch für die vom Compiler erzeugte Maschinencode-Repräsentation sind, dass der einzige Weg zu finden ist. und dann beheben Sie den Fehler, um die dekompilierte Assembly zu lesen und festzustellen, warum der Compiler es als solche generiert hat.

Weitere Informationen zur Montage finden Sie unter der folgenden Frage: What is the best way to learn Assembly? Specifically, for someone who has experience in dynamic languages.

3

G'day,

ich PDP Assembler gelernt, wenn ich meine Elect tat. Eng. Grad in den späten 70er Jahren. Der letzte Assembler-Dialekt, den ich wirklich benutzte, hatte vier verschiedene Arten der Speicheradressierung.Der letzte Dialekt, in dem ich gespielt habe, hatte 17 Modi!

Nicht sicher, was Lernassembler Ihnen heutzutage wirklich gibt. Damals war es ein wesentlicher Teil eines CS-Streams in meinen Auserwählten. deu. Grad.

In Bezug auf das Lernen C++ würde ich einfach hinsetzen und arbeiten durch C mit anderen Bits ‚" Accelerated C++" die C++ in seinem eigenen Recht und nicht als approaches‘.

In Bezug auf C, würde ich nur Arbeit durch die neueste Version von "C Programming Lanuage" (aka) K'n'R

hoffe, das hilft

prost, Rob

Nun, wenn Sie über nano-progrmming gefragt hatte ... (-:.

0

Ich würde nicht vorschlagen, eine "moderne Assembler-Sprache" zu lernen.

jedoch ein wenig über MOS 6510 Assembler und das Surfen durch die zerlegten C64 Kernel zu wissen, auch bekannt als das OS ist und BASIC-Interpreter, hat mir sehr geholfen, zu verstehen, was in einem Computer vor sich geht - Sachen wie Interrupts und Speicherseiten.

Dies könnte Ihnen möglicherweise helfen, Ihnen Tipps zu geben, wie Sie optimierten Code in anderen Sprachen schreiben können. Eine Menge davon wird jedoch bereits von modernen Compilern erledigt, daher würde ich nur vorschlagen, wenn Sie interessiert sind, was in dieser Blackbox passiert.

2

"Lohnt es sich einen Dialekt der Versammlung zu lernen?"

Ich habe die Montage professionell programmiert. M68k mit einem Faxgerät und einem Scanner. Auch Windows VxDs (virtuelle Gerätetreiber) zurück in den Windows 3/3.1 Tage bevor sie einen echten Kernel hatten.

Wenn Sie Code Montag gewöhnliche Software-y Arten von Aufgaben (Kopieren Speicher, Verketten von Strings, Interrupt-Handler usw. Aufruf) zu tun, es irgendwie interessant sind. Manchmal wird die Assembly so programmiert, dass sie von C-Code aufgerufen wird, um so schnell wie möglich auf einem bestimmten Prozessor bestimmte Aufgaben auszuführen. Das kann interessanter sein, weil Sie nach Möglichkeiten suchen, jeden Zyklus, den der Prozessor Ihnen bietet, auszunutzen. Sie kümmern sich darum, was sich im L1-Cache des Prozessors befindet. Sie kümmern sich um das Ausrichten von Daten im Speicher, um Cachezeilentreffer zu vermeiden (wenn ich mich an den Ausdruck erinnere). Sie interessieren sich für Dual-Pipeline-Prozessor-Architektur und die richtige 2 oder 3 oder 4 Anweisungen in der richtigen Reihenfolge, so dass 2 oder 3 oder 4 Dinge mit einem einzigen Tick (eines dieser HZ in XgHz des Prozessors) geschieht.

Wenn Sie Assembly codieren, um benutzerdefinierte Hardware zu betreiben, werden Sie jetzt einen 16-Byte-Speicherpuffer füllen, eine DMA-Operation einrichten und diese Daten an einen Controller senden, der so etwas wie das Treiben einer Laserdruckertrommel ausführt . Und die Trommel dreht sich und kann nicht gestoppt werden und will ihre nächsten 16 Bytes innerhalb der nächsten 5US. Natürlich kann das in C oder C++ gemacht werden. Aber die Beispiele sind endlos.

Ich würde vielleicht die letzte Hälfte Ihrer Frage abschneiden "Ist es das wert, einen Dialekt der Versammlung zu lernen?" Und mach es "Lohnt es sich zu lernen?"

Wenn Sie gerne programmieren, wie Sie "Wert" definieren, beinhaltet einige Komponente der Liebe zur Programmierung. In diesem Sinne habe ich nie etwas in der Programmierung gelernt und dachte nicht, dass es das wert ist. Auch wenn ich es nicht viel später benutze.

In diesem Sinne würde ich fast sagen, dass je härter etwas zu lernen ist, desto "wertvoller" es ist.

Aber all diese flauschigen Mist beiseite, ich glaube, es lohnt sich, zumindest einige Montage Hintergrund zu bekommen. Gehen Sie voran und finden Sie heraus, wie Sie die Assembly schreiben, um ein paar einfache stdlib-Routinen wie strcpy, memmove usw. zu ersetzen. Versuchen Sie dann, sie zu optimieren, indem Sie sie eine Million Mal von C aus aufrufen, während Sie das Timing durchführen.

1

Die Montage ist nicht sehr schwierig. Sobald Sie mit C vertraut sind, verbringen Sie einen oder zwei Tage damit, die grundlegende Montage zu lernen. Seine Hilfsbereitschaft beim Debugging ist enorm, und es macht Spaß, Code schreiben zu können, der das C-Äquivalent geschwindigkeitsmäßig um einen Faktor von 10, 15 oder mehr schlägt.

9

Ich bin wirklich überrascht, so viele "Nein" Antworten auf diese Frage zu sehen. Ich denke du sollte Montage lernen.

Ich erwarte nicht, dass Sie jemals Assembly direkt als Teil Ihrer Arbeit verwenden würden. Aber daraus folgt nicht, dass Sie es nicht lernen sollten.

Die Lerneinheit zeigt Ihnen, was im Computer vor sich geht. Es hilft Ihnen zu verstehen, was die Software tatsächlich macht.

Es geht wirklich um Professionalität. Werden Sie ein professioneller Softwareentwickler sein? Oder werden Sie ein Copy-and-Paste-Hack sein? Sicher, letzterer kann die Rechnungen bezahlen, aber ein Profi zu sein ist so viel befriedigender.

Um jemanden sagen zu hören: "Nah, mach dir keine Mühe, Assembly zu lernen", klingt in meinen Ohren wie "Hier ist das Kochbuch für den Brückenbau. Man muss nichts über Physik oder Technik lernen, um eine Brücke zu bauen Folge diesen Rezepten. " Nein danke.