Ich empfehle dringend, dass Sie Ihr Ziel überdenken und hier ist der Grund:
Ich habe zum ersten Mal 6502 Assembler-Sprache auf dem BBC-Mikrocomputer (Modell B, 32K) gelernt. Es hatte eine fantastische BASIC-Implementierung, die einen Makro-Assembler enthielt. Wir hatten sie in der Schule, also schrieb ich alle möglichen schelmischen Programme, die Dinge wie die direkte Manipulation des Bildschirmpuffers ausführen, um einen Lemming-Spaziergang über jeden Bildschirm im Raum zu machen (sie waren vernetzt), wenn die Maschinen 10 Minuten lang nicht benutzt wurden . Bei meinen Freunden der siebten Klasse kam es zu Kichern.
Als ich zu Hause einen Commodore 64 bekam, erfuhr ich, dass er eine 6510-CPU hatte, auf der auch 6502-Assemblersprache lief, aber mit einigen interessanten Extras. Ich musste einen Assembler kaufen (kam auf eine Kassette ) und die Programme über BASIC aufrufen. Mit den großartigen Visionen, ein Bestseller-Spiel zu schreiben, gelang es mir schließlich, mehrere Demos zu erstellen, bei denen sich im Bit-Twiddle-Modus die Hardware der Videoanzeige bei Unterbrechungen registriert, um interessante Farbleisteneffekte zu erzielen, die zu funky Chip-Musik animiert wurden. Beeindruckend, aber nicht so nützlich.
Dann bekam ich einen Acorn Archimedes A310 mit einer ARM2-CPU, sodass ich dieselbe großartige BASIC-Implementierung mit eingebautem Makro-Assembler verwendete wie die BBC Micro (dasselbe Erbe). Es gelang mir, ein paar Spiele zusammenzustellen, für die ein künstlerischer Freund Grafiken zur Verfügung stellte, sowie einige sinusförmige Trippy-Demos. Beide waren schwer zu programmieren und fehlerhafter Code konnte den Computer ausschalten (versehentlich das Hardware-Reset-Register auslösen usw.) und alles verlieren, wenn ich nicht gespeichert hatte (auf Diskette!).
An der Universität wurde ich mit C ++ und damit C vertraut gemacht. Ich konnte damit Sun / Solaris und einige andere große Großrechner programmieren. Ich habe keine Ahnung, auf welcher CPU-Architektur diese Maschinen liefen - ich musste nie Assembler verwenden oder Maschinencode lesen, da die C ++ - Tools mir die Leistung gaben, die ich für die Erstellung professioneller Anwendungen benötigte.
Nach Uni habe ich an Windows und verschiedenen Unix-Versionen gearbeitet. C und C ++ funktionierten auf all diesen Rechnern und schließlich auch auf Java.
Ich habe dann an Windows und Dreamcast mit C ++ und DirectX mit umfassender Toolkette zum Debuggen gearbeitet.
Ich nahm dann eine Stelle an, bei der ich mit ARM-basierten Chipsätzen für Smart-TVs arbeitete (im Jahr 2000). Obwohl meine Erfahrung mit ARM2 hier relevant gewesen sein mag, war der Job C-basiert. Ich stellte fest, dass das Stöbern mit Hardware, das ich auf den Archimedes gemacht hatte, auch in C mit einfachen Bit-Twiddling-Operationen durchgeführt werden konnte. Ein Teil meiner Aufgabe bestand darin, die Codebasis auf Windows, Playstation 2, Linux, andere TV- und mobile Chipsätze zu migrieren. Alle diese Plattformen waren sowohl mit einem C-Compiler (häufig GCC) als auch mit einer bestimmten API-Version zum Schreiben auf den zugrunde liegenden Computer verfügbar - die eingebettete Welt ist selten ein Kernel-Betriebssystem. Ich musste nie den vollständigen Maschinencode für eine bestimmte Plattform kennen, außer einen Bootloader und ein Mini-BIOS zu schreiben, die beide bei der ersten verfügbaren Gelegenheit (nach dem Einrichten von Trap-Vektoren) in C-Code sprangen.
Der nächste Job war die Arbeit mit C ++, C # und JavaScript unter Windows. Kein Maschinencode.
Der aktuelle Job arbeitet mit C ++, JavaScript, Python, LUA, HTML und anderen Sprachen auf verschiedenen Plattformen. Ich habe keine Ahnung, welchen Maschinencode diese Plattformen ausführen, noch muss ich wissen - der Compiler übersetzt unseren Code in das, was er sein muss. Wenn es abstürzt, erkenne ich den Fehler in einem Debugger oder über eine Laufzeitdiagnose (Ausnahmen, Signale usw.).
Zum Spaß entwickle ich iOS-Anwendungen in meiner Freizeit. Es verwendet Objective-C und eine API, die über mehrere Chipsätze hinweg funktioniert. Anscheinend sind sie ARM-basiert, aber ich habe in meiner Entwicklung noch keinen Maschinencode gesehen.
Während es eine faszinierende Übung ist, Assemblersprache zu lernen, gibt es jetzt viel höhere Tools und Sprachen, mit denen Sie um eine Größenordnung (oder zwei) produktiver arbeiten können.
Die Anzahl der Stellenangebote, die einem erstaunlichen Assembler- / Maschinencode-Programmierer zur Verfügung stehen, ist im Vergleich zu JavaScript, Java, C #, C ++ oder ObjC äußerst gering.
Ich rate Ihnen, dies eher zu einem Hobby / Nebeninteresse als zu einem Hauptziel zu machen.