Assembler-Testumgebung für totale Anfänger



  • Hallo Freunde.

    Um die heutigen Programmiersprachen, insbesondere C, besser verstehen zu können, möchte ich Assembler wenigstens mal kurz angelernt haben.

    Nun bräuchte ich dafür natürlich einen geeigneten Computer oder tiefgehenderes Wissen, um z.B. Assemblercode für moderne Intel-Prozessoren zu schreiben, den man dann auch ausführen kann. Ich befürchte aber, dass das nicht ganz trivial ist.

    Und daher habe ich folgende Frage:

    Wenn ein Kind sich bspw. für Autos interessiert, gibt man ihm ja nicht ein echtes Auto, sondern erstmal ein Spielzeugauto oder drgl.

    Gibt es eine Art virtuellen, einfachen Rechner mit einem einfachen Befehlssatz, den man auf einfache Art und Weise mit Assembler-Code füttern kann? Könnt ihr da was spezielles empfehlen?


  • Mod

    Das gibt es tausendfach und ist die übliche Art und Weise, wie man Assembler lernt. So etwas kommt üblicherweise auch mit einer Art Volldebugger, wo man Schritt für Schritt den kompletten Zustand der Maschine sehen und nachvollziehen kann. Empfehlen kann ich nichts spezielles (Aus Unwissenheit über die heutigen Programme, nicht weil ich die alle schlecht fände. Ich habe noch mit einem solchen Programm unter DOS gelernt, das es heute bestimmt nicht mehr gibt).

    @KlausDieter sagte in Assembler-Testumgebung für totale Anfänger:

    Um die heutigen Programmiersprachen, insbesondere C, besser verstehen zu können, möchte ich Assembler wenigstens mal kurz angelernt haben.

    Und wie kommst du darauf, dass dir das irgendwie nützen würde? Um deine Autoanalogie aufzugreifen: Wirst du ein besserer Autofahrer, wenn du Mountainbiking betreibst?



  • Also ich finde den Compiler Explorer ja dafür sehr spannend. Allerdings tut er nicht das, was du dir wünscht, sondern du schreibst C (oder C++) Code und es wird dir direkt live dafür erzeugte Assember-Code angezeigt. Das ist nützlich, um zu verstehen, was der Compiler aus deinem Code macht.

    Fang mit einfachen Funktionen an wie dem Addieren, Multiplizieren und (!) Dividieren von Zahlen (oder Zahl und Konstante) an und versuche den erzeugten Code zu verstehen. Wenn nicht, dann google die Instruktionen, die du nicht kennst.

    Das hilft dir dann vielleicht dabei, den Code zu verstehen, aber selbst schreiben ist nochmal ne andere Hausnummer. Aber vielleicht schlägt dafür auch jemand ein Tool vor.



  • @KlausDieter sagte in Assembler-Testumgebung für totale Anfänger:

    Gibt es eine Art virtuellen, einfachen Rechner mit einem einfachen Befehlssatz, den man auf einfache Art und Weise mit Assembler-Code füttern kann? Könnt ihr da was spezielles empfehlen?

    Ich kenne da für den Einstieg den SPIM MIPS Simulator



  • @SeppJ Sag ruhig wie das heißt, ich wette ich finde das und kann das irgendwie mit FreeDOS zum laufen kriegen, sofern es nicht Win 3.1 voraussetzt



  • beim gcc und g++ (das sind Compiler die Textdateien in ausführbare Programme übersetzten) gibt es den Schalter "-S", damit erzeugt der Compiler den lesbaren Asambler-Code anstatt das ausführbaren Programms. So kannst du die c- Anweisungen in Asambler-Anweisungen übersetzten, du siehst dann den Asamblercode den du schreiben müsstest anstatt des c-Codes Asambler ist sehr Hardware nah und hat m.E. keine Abstraktion, das bedeuted du schiebst Bits und Bytes von einem Prozessoregister zum Anderen und musst wissen was sie bedeuten und die Befehlssätze des Prozessors kennen den du programmieren willst. Ich denke es bringt keinen Vorteil Assamblercode schreiben zu können wenn man eine Hochsprache lernen will. Außer du willst tatsächlich den Prozessor oder Microcontroler programmieren, dann musst du aber die Befehssäze und Register des jeweiligen Prozessors kennen und arbeitest mit rohen Bits und Bytes.



  • Im Gegensatz zu früher stürzt nicht mehr gleich der ganze Computer ab, wenn man ein fehlerhaftes Assemblerprogramm versucht laufen zu lassen. Daher kann man im Prinzip mit jedem Computer ohne Simulator das Assemblerprogrammieren lernen. Wenn Du einen separaten Computer willst, dann nimm einen Raspberry Pi, der hat im Gegensatz zu einem x86-64 einen deutlich simpleren Befehlssatz.

    Was auch eine Möglichkeit ist, man nimmt MIX bzw. MMIX dafür gibt es spezielle Simulatoren. Für MIX gibt es unter Linux einen virtuelle Maschine, bei der man sich die Register etc. anschauen kann. Für MMIX gibt es nur einen Simulator, der den Code ausführen kann, ein schönes GUI gibt es noch nicht. MIX und MMIX sind von Donald E. Knuth und entsprechend dokumentiert bzw. in seinen Büchern zu Algorithmen benutzt. MIX ist ein älteres CISC Design und MMIX ist ein modernes RISC Design.

    P.S. x86 Assembler ist Murks, da sieht man erst die Altlasten dieser Plattform.



  • @KlausDieter
    Nimm ein ubuntu oder debian linux, wenn du eine win-Maschine hast virtualisiere ein Linux. In Linux Betriebssystemen ist alles was du zum Asambler programmieren brauchst einfach mit "sudo apt-get install asm, nasm, ..." installierbar. Die c und c++ Compiler sind schon installiert. Der gcc und g++ übersetzen auch Asambler-code, eigentlich erzeugt jeder compiler immer Asamblercode der zu ausführbaren Programmen "gelinkt" (zusammengeführt) wird.
    Hier noch ein Link zum Umgang mit dem as (gnu Asambler)
    GNU Assambler Manual


  • Mod

    @KlausDieter sagte in Assembler-Testumgebung für totale Anfänger:

    @SeppJ Sag ruhig wie das heißt, ich wette ich finde das und kann das irgendwie mit FreeDOS zum laufen kriegen, sofern es nicht Win 3.1 voraussetzt

    Wozu? 2 Sekunden Google findet gleich Dutzende Ergebnisse wo man direkt auf der Webseite einen Emulator hat, der sicherlich mindestens genauso gut ist, wie irgendein Lehrprogramm, das irgendein Lehrer an meiner Schule vor 30 Jahren zufällig ausgepickt hat.



  • @SeppJ Stell dir vor du wärst PC-Verkäufer. Und zu dir kommt ein Rentner der keine Ahnung von PCs hat und fragt dich nach einem PC, weil ihm bewusst ist, dass er selbst nicht die nötige Erfahrung hat um zu beurteilen, welcher PC was taugt und welcher für den Preis nichts taugt.

    Für wie schlau hältst du die Antwort, er solle irgendeinen nehmen, die können alle rechnen?

    Erst einmal gibt es nicht all zu viele Assembler-Simulatoren, und zweitens dachte ich, dass solche die sich da besser auskennen mir sagen können, welcher am besten taugt. Nicht irgendeiner - sondern ein möglichst guter. Verstehst du?

    Du brauchst darauf nicht zu antworten - das würden diesen Thread nur unangenehm verstopfen.



  • @KlausDieter
    der @SeppJ hat schon recht. Es ist völlig gleichgültig mit was du Asambler lernst wenn du keinen Prozessor programieren sondern nur die "Sprache" lernen willst. Asambler sind tatsächlich nur Anweisungen, Registerinhalte logisch (UND, ODER, links-rechts-vreschieben) zu verknüofen und sie wieder in Register zu schreiben. Der Rest ist Prozessorspeziefisch. Ich empfehle dir zur Programmierung unabhängig der Sprache ein Linux weil du damit alles ohne Probleme (Internetzugang vorausgesetzt) bekommst ohne dich um fehlende DLL's oder Linzenzen kümmern zu müssen. Allerdings ist die Windows Dokumentation viel besser und auf deutsch, wenn du dich als Entwickler dort registrierst, So war es zumindest bis 2012



  • @KlausDieter Bei Microsoft bekommst du als Entwickler, und das ist jeder der meint einer zu sein (das ist nicht abwertend sonder tatsächlich so gemeint), auch fast alles als Evoluations-software für bis zu 180 tage zur verfügung gestellt. nach den 180 tagen musst du nur dein "Setup" neu machen, mehr nicht. Die Software kostet dich nur im "Produktivbetrieb", wenn du damit Geld verdienst Geld.



  • @EL-europ sagte in Assembler-Testumgebung für totale Anfänger:

    nach den 180 tagen musst du nur dein "Setup" neu machen, mehr nicht.

    Nein, muss man nicht.



  • @Mechanics sagte in Assembler-Testumgebung für totale Anfänger:

    @EL-europ sagte in Assembler-Testumgebung für totale Anfänger:

    nach den 180 tagen musst du nur dein "Setup" neu machen, mehr nicht.

    Nein, muss man nicht.

    Ja es gibt bestimmt Unterschiede, der Server 2012 konnte bis zu 180 Tage verlängert werden, danach stellte ein wichtiger Bestandteil seinen Dienst ein. Vielleicht hat Microsoft seine Politik auch geändert, ich denke sogar das es zwingend war für MS diesbezüglich "moderner" zu werden



  • @Mechanics
    Ich glaube in Zukunft bekommt man jede Software Kostenlos und das nötige NowHow dazu wird Kosten. Es gibt nichts was du mit MS tun kannst was du nicht auch mit Open Source tun kannst, außer vielleicht für MS Entwickeln, das hab ich mit Linux noch nicht versucht



  • @EL-europ sagte in Assembler-Testumgebung für totale Anfänger:

    Ich glaube in Zukunft bekommt man jede Software Kostenlos und das nötige NowHow dazu wird Kosten.

    Naja, das hat zwar wenig mit dem Thema zu tun, aber das glaub ich so allgemein nicht. Es gibt sehr viele (kleinere) Firmen, die Geld mit (Spezial)Software verdienen. Ich sehe da bei weitem nicht so viel Potenzial, mit Know How Geld zu verdienen. Daran wird sich vermutlich nichts ändern (und ist wohl auch gut so).
    "Microsoft-Software" ist aus meiner Sicht eher ein Spezialfall.



  • @Mechanics
    Ja genau so sehe ich das auch. MS ist ein Spezialfall mit Marketing


  • Mod

    Dann nehme ich jetzt eben das erste Ergebnis von Google:
    https://schweigi.github.io/assembler-simulator/
    Da! Damit du endlich deine Antwort hast. 256 Byte RAM, 4Hz, 4 Register, 40 Anweisungen, was will man mehr?

    Jetzt wirst du wahrscheinlich einwenden, dass das nicht einem modernen Prozessor entspricht. Ist aber egal. Es macht keinen Unterschied, ob der Prozessor 4GHz,4GB RAM, mehr und breitere Register hat. Alles was der moderne Prozessor mehr kann, ist dass er die gleichen Anweisungen wie der Spielprozessor kennt, aber für mehr und breitere Datenwörter. Am prinzipiellen Aufbau eines Programms ändert sich nichts. Wenn du ein sinnvolles Programm für die 256 Byte schreiben kannst, dann weißt du alles was du wissen musst, um für 256GB zu programmieren.

    Du wirst aber feststellen, dass das schon nicht so ganz einfach ist, diesen Minicomputer zu programmieren.



  • Es gibt ja noch die ganz alten Minicomputer. Die 8bit aus den 80zigern. Da gab es ja so gut wie keine Möglichkeit außer Assembler.
    Deswegen, wenn schon Grundlagen, erst mal einfach und dann kann man ja immer noch weiter schauen.

    Und dann so als Einstiegstip: 🤨
    Ein guter Einstieg in C64 Assembler. Hier lernst Du die Grundlagen!t

    PS:
    Okay, ist jetzt etwas als Scherz gemeint 🙃 Aber naja... 😉



  • Also ich denke wenn man heutzutage Assembler lernen will, dann ist x86 Assembler nicht verkehrt. Und zwar die 16 Bit Variante die man in einem DOS .COM Programm verwenden kann.

    Warum?

    • x86 Assembler ist relativ einfach zu lernen
    • Es gibt genügend Infos dazu im Internet zu finden
    • Die Syntax bleibt beim Schritt zu 32 und 64 Bit gleich - und 32 bzw. 64 Bit x86/amd64 Assembler lesen zu können ist oft hilfreich
    • Man kann die Programme in jedem DOS Emulator ausprobieren
    • Ausgabe von Text ist in DOS ziemlich einfach
    • Sogar das Verwenden des VGA Grafikmodus ist mit DOS relativ einfach
    • Es gibt Online Assembler wo man sein Programm laufen lassen kann, z.B. https://www.tutorialspoint.com/compile_assembly_online.php

    ps: Es gibt zwei Syntax Varianten - AT&T und Intel. Wenn man im DOS/Windows Umfeld unterwegs ist, macht es mehr Sinn die Intel Variante zu verwenden. Im POSIX Umfeld wird eher die AT&T Variante verwendet. Persönlich würde ich eher die Intel Syntax empfehlen - speziell wenn man seine Gehversuche mit DOS macht. Quasi alle Tutorials/Beispiele die man für DOS finden wird verwenden die Intel Syntax.


Anmelden zum Antworten