Hallo Besucher, der Thread wurde 17k mal aufgerufen und enthält 112 Antworten

letzter Beitrag von M. J. am

Zu dumm für Assembler? Was Hänschen nicht gelernt..

  • Es ist auch manchmal eine Frage der Herangehensweise und der Erfahrung. Frueher habe ich Assembler auch nicht verstanden, inzwischen schon. Aber in der Zwischenzeit sind halt auch viele andere Dinge passiert. Ich wuerde jetzt pauschal nicht sagen, dass man es bei einem erneuten, spaeteren Versuch nicht vielleicht doch noch lernen kann. Aber es ist auch eine Frage des Lernen-wollens, man darf halt nicht erwarten das alles in ein paar Wochen drauf zu haben. Frueher hatte man halt mehr Zeit und war noch lernwilliger, da kam einem das nicht so vor, aber irgendwann ist es halt auch eine Frage der verfuegbaren Freizeit.

  • Meiner Meinung nach gibt es nur drei kleine Hürden für Assembler:


    1. Logisches Verständnis

    Wer das logische Verständnis für Basic hat kann auch Assembler.

    Wer versteht, wie eine Schleife funktioniert und wann&warum das Programm bei bestimmten Bedingungen aus der Schleife rausspringt kann auch Assembler. Dort wird auch nur ein Schritt nach dem anderen gemacht.

    2. Hex-Zahlen

    Hört sich schlimm an, ist es aber nicht und macht das Programmieren viel einfacher. Ich weiß auch nicht aus dem Kopf, was $e2 für eine Zahl ist - und das brauch ich auch nicht. Echte Werte in Programmen schreibt man einfach weiterhin in Dezimal, wie z.B. die Anzahl der Leben. Aber Adressen oder einen 8Bit-Wert in zwei 4Bit-Werte teilen ist ungleich logischer in Hex.

    3. Die Eigenheiten des C64

    Man muss halt wissen (wo man nachschauen kann), wo beim C64 die Rahmenfarbe definiert ist, und wo die Sprites usw. Da muss man aber nicht alle Adressen und Bits im Kopf haben, sie stehen ja z.B. im Wiki.


    Dann kann man leicht mit einem schnell eingerichteten C64-Studio & Vice anfangen zu programmieren. Und Assembler hat am Ende nur eine handvoll Befehle... :)

  • wer englisch kann, der kann sich ja mi t dem lernen von Assembler fuer den C=128 mal die Videos von Nybbles and Bytes ansehen.

    Episode 1 startet unter:


    PS: Die Intromusik ist fuer mich ein echter Ohrwurm :DJ
    Die Intromusik startet beim ersten Teil erst ab der 2ten Minute.....


    Alle Videos des Kanals unter:
    https://www.youtube.com/channe…mds9vAIJICAieAUEZA/videos

  • Kann es sein das manche Leute ein natürliches Talent dafür haben?

    Meiner Meinung nach ja. Das gilt nicht nur für Assembler, sondern für Programmieren allgemein. Programmieren stellt hohe Anforderungen an eine bestimmte Mixtur geistiger Fähigkeiten und Wissensgebiete (Abstraktionsvermögen, Merkfähigkeit, Kreativität, Logik, Mathematik, Systemkenntnisse, etc.), die nicht jeder so leicht unter einen Hut bringt selbst wenn man es unbedingt will. Manchmal hilft es, wenn man z.B. unter Anleitung schnelle Erfolge erzielt, dann tut man sich leichter in der Einübung und Routinierung der Abläufe und Überwindung der ersten Hürden. Der Knoten platzt dann manchmal einfach, aber garantiert ist das nicht. Assembler per se ist da jetzt nicht unbedingt schwieriger, es betont aber bestimmte der genannten Teildisziplinen (Systemkenntnisse und Mathematik z.B.) in besonderem Ausmaß. So etwas kann aus verschiedenen Gründen längst nicht jeder, was im Umkehrschluss heisst dass manche es aus verschiedenen Gründen besonders gut und leicht können. Lernen kann man alles (nichts ist unmöglich...), aber auch das fällt nicht jedem in gleicher Weise leicht.

  • Ist schon etwas länger als ich mir die Assembler Geschichte angesehen habe. Aber verstanden hab ich null komma nix davon.


    Kann es sein das manche Leute ein natürliches Talent dafür haben?


    Witzigerweise hatte ich schon immer ein Interesse für solche Dinge. Aber daraus etwas zu machen gelang mir nie..🤔

    Geht mir genau so. Programmiere eigentlich in mehreren Sprachen, aber ich bin irgendwie zu Blöd für Assembler. Habe es mal vor 20 Jahren versucht, aber außer "Listings" eintippen kam nicht mehr dabei raus.

    Sowohl auf dem Cevi als auch auf dem Amiga.


    Ist mir einfach irgendwie zu hoch. Wollte einen erneuten Versuch starten, aber nach den ersten paar Seiten qualmt mir schon der Kopf :-)


    Ich bleibe lieber bei C# für Windoofs.

  • Kann es sein das manche Leute ein natürliches Talent dafür haben?

    Jein ;)


    Nach 35 Jahren versuche ich mich gerade wieder damit zu beschäftigen. Weia - ich habe viel vergessen. Es ist ein komplexes Thema.

    Ich weiß ja nicht was Du für Vorwissen hast.


    Es hilft auf jeden Fall Ahnung von Elektronik und Mathematik zu haben.

    - Was ist ein Transistor / Halbaddierer / Volladdierer: Elektronik Kompendium

    - Wie ist eine CPU aufgebaut: Visual Transistor-level Simulation of the 6502 CPU

    - Wie ist ein Rechner aufgebaut: Wie hängen Adressbus, Datenbus, Speicher und CPU zusammen

    - Rechnen in Zahlensystemen zur Basis 2, 8 und 16 (binär, oktal, hex)

    - Boolesche Algebra

    - Gutes Abstraktionsvermögen. Man muss Probleme in noch viel kleinere Teile zerhacken als bei Basic.


    Das alles zu wissen ist nicht unbedingt Voraussetzung. Es hilft aber beim Verständnis.


    Als ich mich mit 14 an Assembler versucht habe, wusste ich wenig davon und hab einfach durch massiven Zeiteinsatz und Trial und Error gelernt.

    Heute würde ich da strukturierter ran gehen und versuchen, die o.g. Grundlagen zuerst zu verstehen.


    Disclaimer: Ich bin weder Pädagoge noch ein guter Assembler Programmierer. Ich wurschtel mich halt so durch.
    Aber es macht Spaß mal wieder was zu lernen was ich fast vergessen habe.

  • Ich kann es nicht ganz einschätzen, da ich Assembler schon vor vielen Jahren gelernt habe.

    Aber vielleicht ist er heute besser, Assembler erst mal auf einem Aktuellen System zu lernen (Raspberry, Arduino, oder noch einfachere Systeme). Dann muss mans sich nicht gleichzeitig mit Assembler generell und dann noch den besonderheiten von Homecomputern beschäftigen.

    Und dann im zweiten Schritt wieder zurück zum CEVI.

  • Ich kann es nicht ganz einschätzen, da ich Assembler schon vor vielen Jahren gelernt habe.

    Aber vielleicht ist er heute besser, Assembler erst mal auf einem Aktuellen System zu lernen (Raspberry, Arduino, oder noch einfachere Systeme). Dann muss mans sich nicht gleichzeitig mit Assembler generell und dann noch den besonderheiten von Homecomputern beschäftigen.

    Und dann im zweiten Schritt wieder zurück zum CEVI.

    hmmm ich glaube es ist eher umgekehrt.

    Gerade weil man auf dem C64 bei jedem Assembler Befehl runter gucken kann bis auf die Hardware auf Transistorebene und per Multimeter am Chip messen kann, was da gerade passiert, ist es damit einfacher. Man kann den C64 in seiner Gesamtheit verstehen. Der 6502 hat gerade mal ca. 3500 Transistoren. Das ist noch handhabbar.

    Sogar ein Raspi ist im Gegensatz dazu schon so komplex, das man Ihn in Gänze bis auf die unterste Ebene nie verstehen kann. Die CPU hat mehrere Millionen Transistoren.

  • Assembler ist kompliziert und einfach zugleich. Kompliziert, weil man seine eigentlich zu loesenden Probleme sehr stark abstrahieren muss. Einfach, weil man eigentlich haargenau dem Computer sagt, was er tun soll, Schritt fuer Schritt.


    Die Denkweise muss halt eventuell ein wenig angepasst werden.

  • Im Prinzip kann man es so vergleichen: Stell Dir vor Du sagst Deinem Kind es soll mal eben Milch holen gehen. Im Idealfall muss man nur sagen "Geh Milch holen", und das Kind macht genau das. Das waere dann der Fall wenn man gar nicht mehr programmieren muss sondern schon ein fertiges Programm nur noch aufrufen muss. Wuerde man in BASIC programmieren, dann wuerde man dem Kind sagen, "Kind, geh an die Schublade, hol den Geldbeutel raus, nimm 5 EUR raus, zieh Deine Schuhe an, lauf zum Supermarkt, gehe zum Milchregal, nimm 2 Packungen Milch raus, achte auf das Haltbarkeitsdatum, gehe zur Kasse, stell die Milch aufs Band, warte bis Du dran bist, gib der Kassiererin das Geld, nimm das Rueckgeld, etc..." waehrend wenn man das gleiche Programm in Assembler schreiben wuerden, dann wuerde man sagen "Kind, bewege Deinen linken Fuss, dann Deinen rechten, dann wieder Deinen linken, so lange bis Du an der Schublade bist, bewege nun Deinen rechten Arm zum Knauf, halte den Knauf fest, ziehe den Arm zurueck, bis der Geldbeutel zum Vorschein kommt, loese dann die Hand vom Knauf, bewege die Hand nach oben, dann nach vorne, schau ob Du den Geldbeutel schon greifen kannst, etc."


    Es ist halt alles deutlich mehr Low-Level und dementsprechend muss man halt Schritt fuer Schritt vorgehen und dem Computer exakt vorgeben was er zu tun hat.

  • Mir ging/geht das genau so, allerdings habe ich BASIC auch auf dem C16 programmiert und da musste man ohnehin nicht Standardfunktionen, wie das Ändern der Hintergrundfarbe, mit Pokes lösen. Dazu kommt aber auch, dass ich mit Programmieren ein Problem lösen oder eine Idee umsetzen wollte/will und da nicht in einen Performance-Wettbewerb getreten bin.


    Für mich fühlte das sich immer so an, als hätte ich einen groben Holzklotz und wollte daraus eine Figur schnitzen. BASIC war dann das zur Hand liegende Taschenmesser während mir Maschinensprache/Assembler immer so vorkam als müsste ich erst mal anfangen richtige Erzverhüttung zu lernen, um dann zur Stahlprodution über zu gehen, damit ich irgendwann - in ferner Zukunft - mir selber ein Taschenmesser bauen kann. Mir war dann immer klar, dass ich auf dem Weg garantiert die Lust am Schnitzen - das ich eigentlch machen wollte - komplette verlieren würde.


    Mal so als Beispiel dieses Tool zur Darstellung von Funktionsgrafen mit Koordinatensystem auf dem Bildschirm von mir. In Assembler wäre ich wohl nie dahin gekommen, dass es funktioniert und dann hätte es komplett de Sinn verloren, denn ich wollte ja oberstufenbegleitend in Mathe Funktionen sehen können.

  • Mathematische Formeln würde ich beim Assembler-LERNEN erstmal völlig ausklammern, die sind nämlich sch**** umzusetzen. Leider ein Problem vieler Lehrbücher damals, die einem immer Assembler für Mathe-probleme oder als reine Basic-Unterstützung beibringen wollten.

  • Mal so als Beispiel dieses Tool zur Darstellung von Funktionsgrafen mit Koordinatensystem auf dem Bildschirm von mir. In Assembler wäre ich wohl nie dahin gekommen, dass es funktioniert und dann hätte es komplett de Sinn verloren, denn ich wollte ja oberstufenbegleitend in Mathe Funktionen sehen können.

    Basic 3.5 hat ja auch die Grafikbefehle, um so etwas zu machen. Auf dem C64 gab es die nicht. Und wenn man in Basic zu Fuss machen wollte, war es viel zu langsam. Also musste man anfangs sowas in Assembler machen, wenn es halbwegs benutzbar werden sollte. Später gab es dann Basic-Erweiterungen und fertige Assembler-Routinen.


    Ich habe auf dem PET angefangen, da ging genau wie auf dem C64 ohne Assembler fast nichts, wenn es halbwegs schnell sein sollte. Nur gab es für den PET viel weniger Tools und Erweiterungen und die auch erst sehr spät oder für teures Geld. Wenn man ersthaft prorgammieren wollte, kam man um Assembler gar nicht herum.

    Dazu kam dann noch das Interesse, zu verstehen, wie ein Prozessor funktioniert. Das ist der Nebeneffekt, wenn man Assembler programmiert.


    Übrigens hat man, wenn man häufiger Assembler programmiert, irgendwann eine Sammlung von Grundroutinen, die man dann wie Basic-Kommandos aneinander reiht bzw. aufruft. Das geht dann irgendwann fast so schnell wie Basic. Aber die Hürde, erstmal dahin zukommen, ist schon recht hoch.

  • Ist schon etwas länger als ich mir die Assembler Geschichte angesehen habe. Aber verstanden hab ich null komma nix davon.

    Es hilft ungemein, ein konkretes Projekt vor Augen zu haben, das man realisieren will. Einen Assemblerkurs durchzuarbeiten (oder auch mehrere), in der Hoffnung, danach "Assembler zu können", funktioniert so nicht.

    Aber wenn man z.B. ein Basic-Programm geschrieben hat und die langsamsten Teile davon beschleunigen will (sowas wie Speicherblock füllen, Speicherblock kopieren, etc.), fällt das Lernen deutlich leichter.

  • Mathematische Formeln würde ich beim Assembler-LERNEN erstmal völlig ausklammern, die sind nämlich sch**** umzusetzen. Leider ein Problem vieler Lehrbücher damals, die einem immer Assembler für Mathe-probleme oder als reine Basic-Unterstützung beibringen wollten.

    Das ist natürlich Unsinn. Assembler ist da nicht schneller als Basic. Die Mathe-Funktionen in Basic sind ja auch in Assembler prorgammiert.

    Assembler spielt seine Geschwindigkeitvorteile nur aus, wenn man bei Integer-Arithmetik bleibt.

  • Mathematische Formeln würde ich beim Assembler-LERNEN erstmal völlig ausklammern, die sind nämlich sch**** umzusetzen. Leider ein Problem vieler Lehrbücher damals, die einem immer Assembler für Mathe-probleme oder als reine Basic-Unterstützung beibringen wollten.

    Das ist natürlich Unsinn. Assembler ist da nicht schneller als Basic. Die Mathe-Funktionen in Basic sind ja auch in Assembler prorgammiert.

    Assembler spielt seine Geschwindigkeitvorteile nur aus, wenn man bei Integer-Arithmetik bleibt.

    Naja, erst mal muss der Basic Befehl ja durch den Interpreter. Die berechnung danach kann ja schnell sein, aber dort hin muss man ja auch erst mal kommen.

  • Das ist natürlich Unsinn. Assembler ist da nicht schneller als Basic. Die Mathe-Funktionen in Basic sind ja auch in Assembler prorgammiert.

    Assembler spielt seine Geschwindigkeitvorteile nur aus, wenn man bei Integer-Arithmetik bleibt.

    Naja, erst mal muss der Basic Befehl ja durch den Interpreter. Die berechnung danach kann ja schnell sein, aber dort hin muss man ja auch erst mal kommen.

    Das stimmt.