Fage an die Assemblerprogrammierer.
-
Ich stelle mir momentan die Frage, ob ich mich weiterbilden soll und Assembler lernen soll, Zweifel habe ich aber trotzdem.
Ich hab mir einige Dinge durchgelesen, die mir Vor- und Nachteile geschildert haben und möchte nun euch fragen, ist es wirklich noch sinnvoll Assembler zu lernen?
Was kann man mit Assembler was man mit Hochsprachen nicht kann?
Ist der Aufwand, denn man betreibt um das ganze zu lernen, wirklich bezahlbar?
Was bieten mir Assemblerkenntnise noch so, kann ich danach vielleicht sogar besser in anderen Programmiersprachen programmieren?Was für Erfahrungen habt ihr mit Assembler und was habt ihr damit schon bewerkstelligt?
Falls ihr mich vollkommen überzeugt habt, werde ich mir wohl "Das Assembler Buch" zulegen, weil es hier im Forum wirklich gute Kritik bekommen hat.
-
Ich zähl mich zwar nicht zu den Assemblerprogrammierern(ich lerne es selbst gerade), aber ich denke ich kann trotzdem mal antworten.
Für normale Programme ist Assembly nicht zu gebrauchen.
Man kann performanter programmieren, wenn man weiß wie es intern abläuft, aber das ist selten notwendig, man sollte in modernen Sprachen eher auf Stil achten.
Assembly bringt dir etwas wenn du:
Betriebssystemlos programmieren willst, also etwas zu booten u.s.w.
Wenn du eigene Compiler schreiben willst.
Reverse Engeneering, Programme dissassemblieren und z.B. Patches schreiben, ist aber meist verboten.
Oder als Inline Assembly vielleicht noch für extrem Performancekritische Anwendungen, aber ich nehme nicht an, dass das so häufig benötigt wird, man kann es meistens auch anders einspaaren.
Es gibt sicher noch mehr Anwendungen, aber du siehst vielleicht schon wohin das führt.
-
JustAnotherNoob hat an sich schon das Wichtigste gesagt, deshalb nur noch einige Konkretisierungen:
markusrw schrieb:
[...]ist es wirklich noch sinnvoll Assembler zu lernen?
Wenn du mehr als nur ein bisschen Script- und Hobby-Gefrickel auf dem PC programmieren willst, kann es sicher nicht schaden, die Basics zu kennen.
markusrw schrieb:
Was kann man mit Assembler was man mit Hochsprachen nicht kann?
Ultimativ systemnah programmieren, spezielle Prozessorbefehle ausfuehren.
markusrw schrieb:
Ist der Aufwand, denn man betreibt um das ganze zu lernen, wirklich bezahlbar?
Praktisch? Bei ernsthaftem Studium ist das Wichtigste in ca. 1-2 Monaten durchaus gut zu lernen, also: ja.
markusrw schrieb:
Was bieten mir Assemblerkenntnise noch so, kann ich danach vielleicht sogar besser in anderen Programmiersprachen programmieren?
Du lernst zwangslaeufig etwas ueber die CPU-Architektur des jeweiligen Systems, fuer das du dich mit Assembler beschaeftigst.
markusrw schrieb:
Was für Erfahrungen habt ihr mit Assembler und was habt ihr damit schon bewerkstelligt?
Es kann durchaus Spass machen.
Was ich zB. schon so mit Assembler fuer x86 verbrochen habe, kannst du dir auf meiner Heimseite ansehen.
-
Danke, werd mir mal deine Seite anschaun.
-
Hallo,
aus meiner Sicht macht es wirklich keinen großen Sinn, sich mit Assembler zu beschäftigen. Denn, zunächst ein mal, bevor du loslegst, musst du dich erst ein mal für eine CPU entscheiden, auf dem dein Programm oder Funktion oder was auch immer laufen soll. Mit dieser Entscheidung hast du praktisch einen nicht unerheblichen Teil deiner Lebenszeit dafür verplant (wahrscheinlich auch vertan), Code zu schreiben, der nur auf dem einen Chip läuft. Es wird vermutlich CPUs geben, die "abwärts" kompatibel sind und deinen Code ohne große Änderungen ausführen, doch ob der Code dann wirklich schneller ist, verglichen mit dem, den ein Compiler erzeugt, kann man nicht garantieren.
Aber vielleicht möchtest du nicht unbedingt einen schnelleren Code schreiben, sondern, einen kompakteren, so dass auf einem Gigabyte großen USB-Speicherstick ein Paar Hundert Bytes gespart werden könnten
Dann, warum nicht...
-
abc.w schrieb:
Hallo,
aus meiner Sicht macht es wirklich keinen großen Sinn, sich mit Assembler zu beschäftigen. Denn, zunächst ein mal, bevor du loslegst, musst du dich erst ein mal für eine CPU entscheiden, auf dem dein Programm oder Funktion oder was auch immer laufen soll. Mit dieser Entscheidung hast du praktisch einen nicht unerheblichen Teil deiner Lebenszeit dafür verplant (wahrscheinlich auch vertan), Code zu schreiben, der nur auf dem einen Chip läuft. Es wird vermutlich CPUs geben, die "abwärts" kompatibel sind und deinen Code ohne große Änderungen ausführen, doch ob der Code dann wirklich schneller ist, verglichen mit dem, den ein Compiler erzeugt, kann man nicht garantieren.
Aber vielleicht möchtest du nicht unbedingt einen schnelleren Code schreiben, sondern, einen kompakteren, so dass auf einem Gigabyte großen USB-Speicherstick ein Paar Hundert Bytes gespart werden könnten
Dann, warum nicht...das ist imho unbegründet. wenn man assembler code auf x86/x86_64 und ppc architekturen portiert, hat man schonmal 95% der verfügbaren mainstream architekturen abgedeckt. dazu kommt noch, dass es wirklich nicht sehr viel arbeit bedeutet, assemblercode von einer architektur auf die andere zu portieren, da es sich eh meist um kleinere codefragmente handelt. desweiteren finde ich es grundsätzlich schlecht jemanden von etwas abzuraten, dass sinnvoll, erreichbar und realisierbar ist. wer weiss, vielleicht ist es markusrw, der auf zukünftigen prozessor architekturen den entscheidenden assemblerteil beisteuert, der deinen kompiler überhaupt erst brauchbar macht, oder dafür sorgt, dass dein betriebsystem gestartet wird

-
markusrw schrieb:
Was bieten mir Assemblerkenntnise noch so, kann ich danach vielleicht sogar besser in anderen Programmiersprachen programmieren?
auf low-level sprachen wie C bezogen ein klares ja! bei high-level sprachen wie Java, PHP, C# werden dir asm-kenntnisse ever weniger helfen.
[/quote]
btw, welchen prozessor willst du mit asm beharken?
sehr einfach und daher ideal zum lernen von assembler finde ich die alten 6502-derivate, Z80 sowie 68000'er. auch hochinteressant und guter lernstoff, aber schon etwas komplexer, sind ARM-architekturen (z.b. wenn man nebenbei das arm architecture reference manual liest)

-
So ich werd dann ab nächster Woche mit ASM anfangen, hoffe mal, dass ich kein Brain-overflow bekomm^^
[e] Ahja ich versuch mich erstmal an einem Intel Pentium 4 (x86) (gut, ist etwas veraltet, aber was solls, ich brauch momentan eh nichts stärkeres, ansonsten hält mein Notebook hin, welches eindeutig mehr Leistung hat)^^
-
Hallo,
trotz unserer manch einer Überzeugung hast du dich doch entschieden... finde ich gut. Als ultimative Aufgabe bzw. Test, ob aus dir ein Programmierer wird, der irgendwann einmal sagen kann, er habe in Assembler programmiert, schlage ich folgende Aufgabe vor: Schreibe ein Taschenrechner-Programm mit so vielen Funktionen wie möglich. Eine Voraussetzung ist unbedingt notwendig - das Programm muss mit Fliesskommazahlen rechnen, also kein Hex-Taschenrechner o.ä. - das wäre langweilig, und natürlich in Assembler.
Hast du es geschafft - Respekt.
Gescheitert - dann, was soll's, bist nicht der einzige.
Die Aufgabe ist interessant, weil es klassisches Eingabe-Verarbeitung-Ausgabe Programm ist. Musst dir Gedanken machen, wie du die Eingabe und wie daraus die Fliesskommazahlen machst. Verarbeitung soll am Besten mit Mathe-Koprozessor realisiert werden, kannst gerne emulieren. Und musst dir dann Gedanken über die Ausgabe machen. Alles in Assembler.
Für welches Betriebssystem es sein soll, ist frei dir überlassen...
Viel Glück...
-
Ja ich bin auf einen guten Weg dazu.^^
Hab mir jetzt auch Literatur zu dem Thema besorgt wozu ich auch gleich in einem neuen Thread ne Frage hätte.^^