Assembler lernen CPU Architekturen verstehen1?



  • Hallo Leute,

    ich würd mich gern bischen in den lowlevel der Softwareetnwicklung einarbeiten. da würde ich gern bischen Assembler verstehen und lernen. Die Frage ist nun welches Assembler? Für welchen CPU? Was macht Sinn? Analog hierfür würde ich mich auch gern etwas tiefer in CPU Architekturen einarbeiten, dies sollte aber nich zu speziell für einen CPU Typ sein... hmmm

    Was meint ihr1?

    Grüße



  • CDiscoverer schrieb:

    Hallo Leute,

    ich würd mich gern bischen in den lowlevel der Softwareetnwicklung einarbeiten. da würde ich gern bischen Assembler verstehen und lernen. Die Frage ist nun welches Assembler? Für welchen CPU? Was macht Sinn? Analog hierfür würde ich mich auch gern etwas tiefer in CPU Architekturen einarbeiten, dies sollte aber nich zu speziell für einen CPU Typ sein... hmmm

    Was meint ihr1?

    Grüße

    Es gibt aber keine Assembler-Sprache die universell für mehrere CPU-Architekturen geeignet ist, sondern jede CPU-Architektur hat unterschiedliche Befehle, die allenfalls eine gewisse Ähnlichkeit aufweisen. Der Sinn richtet sich danach was du erreichen möchtest. Beruflich wird man Assembler kaum noch benötigen, so das Assemblersprache heute meistens nur noch als Hobby eine Verwendung findet. Sehr tief kann man mit Assembler heute aber auch nicht beispielsweise in die X86er-CPU-Architektur eindringen, da auch die von einem Assembler erzeugten Opcodes bei der Ausführung intern von den CPUs noch weiter in Micro-Ops zerlegt und ggf. umsortiert werden. Darauf hat man so gut wie gar keinen Einfluss, man kann höchstens die verwendeten Opcodes dafür sinnvoll plazieren, so das die internen Ausführungseinheitten die Opcodes optimal und paralell verarbeiten können.

    Weit verbreitet ist die x86-Architektur. Opcodes die beispielsweise für einen 80386er entwickelt wurden sind auch auf modernen PCs mit aktuellen 64 Bit-CPUs ausführbar, da diese CPUs zu den Vorgängern kompatibel sind. So kann man dort ebenfalls auch noch ältere 16 Bit-Anwendungen zur Ausführung bringen, da auch die 64 Bit-x86 CPUs immer noch im 16 Bit-Mode starten und dann erst von einem OS, oder einer Anwendung in den 32 Bit-Mode oder dem 64 Bit-Mode geschaltet werden. Wenn man x86-Architektur kennenlernen möchte, dann könnte man mit kleinen 16 Bit-Anwendungen um ein erstes Verständniss für diese x86er-Architektur zu bekommen.

    Dirk



  • x86 ist nicht unbedingt das beste Beispiel. RISC-Architekturen (ARM, AVR, MIPS) sind für den Anfang möglicherweise geeigneter.



  • blarg schrieb:

    x86 ist nicht unbedingt das beste Beispiel. RISC-Architekturen (ARM, AVR, MIPS) sind für den Anfang möglicherweise geeigneter.

    mag sein, x86 is aber weit verbreite und einfach zugänglich.



  • x86_hat_jeder_zuhaus schrieb:

    blarg schrieb:

    x86 ist nicht unbedingt das beste Beispiel. RISC-Architekturen (ARM, AVR, MIPS) sind für den Anfang möglicherweise geeigneter.

    mag sein, x86 is aber weit verbreite und einfach zugänglich.

    👍



  • blarg schrieb:

    x86 ist nicht unbedingt das beste Beispiel. RISC-Architekturen (ARM, AVR, MIPS) sind für den Anfang möglicherweise geeigneter.

    Würde ich unterschreiben.

    Man muss den Anfang ja auch nicht unbedingt auf echter Hardware machen. Der GDB enthält einen ARM-Simulator mit dem man schonmal einiges machen kann. Dazu holt man sich dann eine Referenzkarte zum Befehlssatz und kann eigentlich schon ein bisschen rumspielen. Wenn du die GNU-Toolchain nicht selbst bauen willst, bekommst du unter gnuarm.com auch (etwas ältere) Binaries.

    ARM ist mindestens ebenso verbreitet wie x86 und die Hardware gibt es zu vernünftigen Preisen, entweder als Eval-Board (von kleinen ARM7- oder Cortex-M3-Boards bis hin zu fetten Pandaboards) oder in zig anderen Geräten.

    Außerdem im Vergleich zu x86 eine recht schöne Architektur. MIPS finde ich auch noch ganz ansprechend, da findet man auch viel Lehrmaterial für. Echte Hardware (in hackbarer Ausführung) ist da aber weniger leicht zu bekommen.

    Auch ganz interessant sind die AVR-Dinger. Ist eine 8-Bit-RISC-Architektur für Mikrocontroller, für die es aber sehr gute, modifizierungsfreundliche Hardware zu niedrigen Preisen gibt, z.B. die Arduinos ab 20-30 Euro. Leistungsmäßig natürlich eher beschränkt.

    Ich würde ARM oder AVR nehmen, je nach Leistungsanforderung. Zumindest dann, wenn du mit den erworbenen Kentnissen auch wirklich was spaßiges machen willst. x86 auf dieser Ebene ist imho ziemlich hässlich.



  • ARM ist mindestens ebenso verbreitet wie x86 und die Hardware gibt es zu vernünftigen Preisen

    Haha, Arm ist weit vor x86. Der Durchschnittsmensch sieht das nur nicht auf den Mediamarktplakaten.

    ARM-Kunden lieferten alleine im vergangenen Quartal 1,2 Milliarden Handy-Chips (+10 Prozent) und 1 Milliarde Chips für Unterhaltungselektronik und Embedded-Produkte (+40 Prozent).

    Quelle: http://www.heise.de/newsticker/meldung/ARM-meldet-Umsatz-und-Gewinnwachstum-1425192.html



  • AVR ist gerade mein Opfer ...

    Einstieg für unter 100 Eus. Gnu Compiler/Assembler gibt's für lau. Übersichtlich,
    überschaubar und man hat schnell etwas das funktioniert.

    Erstaunlich was man zB in einem ATTiny2313 mit 2 k Programm und 128 Byte RAM
    so unterbringen kann 🤡



  • Wie war das noch mit Äpfeln und Birnen?



  • Vergleichbar? schrieb:

    Wie war das noch mit Äpfeln und Birnen?

    Pressen und Most daraus machen ...



  • .. ich habe auch bestimmt noch zig Mega8 bis 32iger und tiny's bei mir zuhause rumgammeln... 🙂

    Für den Einstig von asm kann man sich ja die IDE von ATMEL herunterladen. Der hat auch einen Debugger/Simulator der auch die Status der IO Pins mit angibt und etc,...



  • zeusosc schrieb:

    .. ich habe auch bestimmt noch zig Mega8 bis 32iger und tiny's bei mir zuhause rumgammeln... 🙂

    Na toll, rumgammeln... ich habe bei mir daheim auch so 5 bis 10 ATmegas inzwischen auf Lochrasterplatinen zusammengefrickelt: Selbstbau-Taschenrechner, -Frequenzzähler, -EPROM-Programmiergeräte, -DDS-Synthesizer :p


Log in to reply