Amiga Assembler programmieren
Ich habe mich einige Wochen lang mit Amiga Assembler programmieren beschäftigt. In meinem Retro Blog habe ich eine Artikelserie dazu geschrieben. Assembler Programmierung sollte man als Programmierer zumindest rudimentär beherrschen, da man so die Hardwarenahe Programmierung unter C++ besser versteht und schätzen lernt.
Amiga Assembler programmieren
In der Artikelserie Amiga Assembler lernt man auf einem virtuellen Amiga 1200 Assembler Programmierung. Ich finde jeder Programmierer sollte zumindest auf einer Maschine einmal im Leben Assembler Code schreiben. Ob das nun ein C64 oder Amiga ist – man lernt auf der Hardwareschicht die Prozessor und seine Opcodes kennen und Hochsprachen wie C++ lieben.
Assembler
Eine CPU hat ein bestimmtes Set an Instruktionen die man verwenden kann. Jede fast CPU ist anders, so gibt es quasi endlos viele Assembler Dialekte. Gemein ist allen, dass man auf unterster Hardwareebene direkt definiert welche Instruktionen die CPU durchführen soll und wo im Speicher und in den Registern die Informationen gespeichert, geladen und verarbeitet werden. Pointer sind in der C Sprache ein Übel, an dem viele junge Programmierer scheitern. Hat man aber einmal Assembler programmiert lernt man diese zu lieben, da Pointer einfacher sind als Adressen aus dem RAM Speicher in bestimmte Register zu laden und an Orten im Speicher abzulegen.
So einfach wie möglich
Als Programmierer lernt man am besten einen möglichst einfachen Assembler Dialekt. Moderne CPUs verstehen hunderte Funktionen, ein C64 hat im Vergleich dazu gerade mal 151 solcher Maschinenbefehle. Ein Assembler Programmierer kennt normalerweise die meisten davon. Heutige CPUs bieten viele neue Opcodes die ganze Codeblöcke die man in einem C64 Assembler Programm schreiben musste in einem Opcode vereinfachen. Das ist schön, man muss aber mehr Wissen darüber haben. Der Amiga war eine willkommene Plattform, da man dank WinUAE und einem guten Debugger viele Informationen darstellen kann. Man sieht was auf einer CPU passiert und wie sich dessen Operationen auf den Speicher auswirken.
Vorteile
Was bringt einem Programmierer heute wissen über Assembler? In den 90er Jahren musste man noch Performance kritische Stellen im C++ Code in Assembler neu schreiben, da der Compiler ein schlechteres Ergebnis lieferte. Heute sind die Compiler schon besser als jeder Mensch, weshalb es kaum möglich ist schnelleren Code in Assembler zu schreiben. Von daher macht es keinen Sinn heute Assembler zu lernen. Trotzdem finde ich es wichtig:
- Wissen über die Hardware-Architektur ist nie falsch
Unterschiedliche CPU Architekturen stellen unterschiedliche Opcodes bereit. Deshalb kann man ein einmal compiliertes Programm nicht auf einem ARM, 32-bit und 64-bit System ausführen. Man muss für das jeweilige System neu compilieren, auch wenn der Code kompatibel wäre. - Was liegt darunter?
wenn man sich mit Assembler beschäftigt lernt man zwangsläufig auch die CPU kennen. Auch das ist heute kaum relevant, obwohl es einen massiven Unterschied macht. Mit dem Wissen versteht man warum auf einer ARM Architektur wie dem Raspberry Pi die gleiche Anzahl von MHz nicht die selbe Performance liefert.
Fazit
Assembler Programmierung war früher wichtig und ist heute mehr eine Fleißaufgabe. Man lernt dadurch aber seine CPU kennen und kann das Programm perfekt darauf anpassen. Mir hat die Erstellung der Einführung in Amiga Assembler programmieren viel Spaß gemacht und ich weiß nun Pointer In C und C++ besser zu schätzen und bin sehr froh heute Smartpointer verwenden zu können.
Welche Erfahrungen hast du mit Assembler?