Assembler-Testumgebung für totale Anfänger



  • 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.



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

    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.

    Warum sollte man Assembler programmieren lernen?

    Vielleicht für das Verständnis von Stack, Heap, Aufrufkonventionen. Ok.

    Aber sobald das Problem komplexer wird, wird Assemblercode ziemlich unübersichtlich. Wir durften beispielsweise an der Uni mal eine Gleitkommadivision ohne FPU programmieren. Die Abgabe erfolgte in Papierform. Da hatte keiner Spaß daran.



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

    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.

    Das sind Microcomputer, die Minicomputer waren meistens schon 16Bit Systeme z.B. PDP-11 oder VAX-11.



  • @Quiche-Lorraine
    Ich denke es ist in vielen Situationen sinnvoll Assembler zu können. Zumindest so gut dass man Disassembly mehr oder weniger flüssig lesen kann. Es ist nützlich wenn man...

    • Code optimieren möchte
    • Crashes debuggen möchte
    • Generell besser verstehen möchte wie eine CPU wirklich arbeitet

    Wobei es natürlich am meisten Sinn macht die Assembler-Variante für die CPU zu können mit der man dann hauptsächlich arbeitet.



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

    Ich denke es ist in vielen Situationen sinnvoll Assembler zu können. Zumindest so gut dass man Disassembly mehr oder weniger flüssig lesen kann. Es ist nützlich wenn man...

    Code optimieren möchte
    Crashes debuggen möchte
    Generell besser verstehen möchte wie eine CPU wirklich arbeitet

    Wobei es natürlich am meisten Sinn macht die Assembler-Variante für die CPU zu können mit der man dann hauptsächlich arbeitet.

    Sehe ich ein wenig anders. Klar ist es sinnvoll Assembly zu lernen damit man die CPU besser versteht und man Disassembly lesen kann.

    Aber warum benötige ich beispielsweise beim Debugging Assembly wo es doch viele andere Debugging Techniken gibt?

    Ich folgenden beziehe ich mich auf Mikrocontroller ala STM.

    Modernere Mikrocontroller IDEs / Debugger Hardware erlauben inzwischen auch Debugging wie in Visual Studio, wo man also durch den Sourcecode steppen kann.

    Ferner gibt es dann noch das unrühmliche printf/Uart Debugging, welche den internen Zustand liefert. Nicht wenige Probleme habe ich durch Logging von Controller Messdaten und Darstellung in Excel entdeckt.

    Und wenn man hochperiodisches Verhalten untersuchen möchte, nutzt man einen Pin, setzt den Pin auf High wenn Funktion startet, setzt den Pin auf Low wenn die Funktion beendet. Und dann schaut man sich den Pin mit einem Oszi an.

    Und zuguterletzt habe ich noch die Simulation schätzen gelernt. Also versuchen den Code soweit wie möglich auf den PC zu übertragen, damit man diesen dort testen/debuggen kann.



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

    Aber warum benötige ich beispielsweise beim Debugging Assembly wo es doch viele andere Debugging Techniken gibt?

    Oh, das braucht man durchaus oft. Man kriegt öfter mal core dumps von Kunden, die teilweise gar nicht mehr so einfach zu rekonstruieren sind, da kommt man ohne Assemblerkenntnisse teilweise gar nicht mehr weiter.
    Und auch beim Livedebuggen gibt es immer wieder schwierige Situationen, die man ohne Assemblerkenntnisse nicht versteht.
    Zumal zumindest der MSVC Compiler mittlerweile immer öfter fehlerhaften Code produziert. Vor 5-10 Jahren war es noch extrem unwahrscheinlich, über einen Compilerbug zu stolpern. Mittlerweile müssen wir alle 3-6 Monate feststellen, dass der Compiler Mist gebaut hat.



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

    Aber warum benötige ich beispielsweise beim Debugging Assembly wo es doch viele andere Debugging Techniken gibt?

    Ich meinte eher Debuggen von Crash-Dumps. Sobald du was reproduzierbares hast was du mit Code-Änderungen testen kannst, hast du in 90% der Fälle sowieso schon gewonnen. Wenn du aber nur nen Core Dump bekommst, und erstmal keine Ahnung hast wie du den Fehler reproduzieren kannst, ... dann sind Assembler-Kenntnisse schon oft hilfreich.


Anmelden zum Antworten