Ti suggerisco caldamente di riconsiderare il tuo obiettivo ed ecco perché:
Ho appreso per la prima volta 6502 Assembly Language sul Microcomputer BBC (Modello B, 32K). Aveva un'impressionante implementazione BASIC che includeva un macro assemblatore. Li abbiamo avuti a scuola, quindi ho scritto tutti i tipi di programmi maliziosi che farebbero cose come la manipolazione diretta del buffer dello schermo per fare una passeggiata di Lemming su ogni schermo, intorno alla stanza (erano collegati in rete) se le macchine non fossero state usate per 10 minuti . Ha provocato risatine tra i miei amici del 7 ° anno.
Quando ho avuto un Commodore 64 a casa, ho appreso che aveva una CPU 6510 che eseguiva anche il linguaggio assembly 6502 ma con alcuni extra interessanti. Ho dovuto comprare un assemblatore (arrivato su una cartuccia ) e invocare i programmi tramite BASIC. Con le grandiose visioni di scrivere un gioco best-seller, alla fine sono riuscito a creare diverse dimostrazioni che i registri hardware di visualizzazione video bit-twiddled in interruzione facevano interessanti effetti della barra dei colori che animavano la musica dei chip funky. Impressionante, ma non così utile.
Poi ho ottenuto un Acorn Archimedes A310 con una CPU ARM2, quindi ho usato la stessa impressionante implementazione BASIC con macro assembler integrato come BBC Micro (stesso patrimonio). Riuscii a mettere insieme un paio di giochi a cui un amico artistico aveva fornito grafica, oltre ad alcuni demo trippy basati su sinusoidi. Entrambi questi erano un duro lavoro da programmare e un codice errato poteva far cadere la macchina (accidentalmente far scattare il registro di reset dell'hardware, ecc.), Perdendo tutto se non avessi salvato (su floppy!).
All'università I è stato introdotto in C ++ e quindi C. Sono stato in grado di usarlo per programmare Sun / Solaris e alcuni altri computer mainframe di grandi dimensioni. Non ho idea di quali architetture CPU funzionassero su queste macchine - Non ho mai avuto bisogno di usare assembler o leggere codice macchina dato che gli strumenti C ++ mi hanno dato la potenza di cui avevo bisogno per produrre applicazioni professionali.
Dopo Uni, ho lavorato su Windows e diverse versioni di Unix. C e C ++ hanno funzionato su tutte queste macchine e alla fine anche su Java.
Ho quindi lavorato su Windows e Dreamcast utilizzando C ++ con DirectX con una catena di strumenti completa per il debug.
Poi ho iniziato a lavorare con chipset basati su ARM per Smart TV (nel 2000). Anche se la mia esperienza con ARM2 poteva essere rilevante qui, il lavoro era basato su C. Ho scoperto che tutta la ricerca sull'hardware che avevo fatto su Archimede poteva essere fatta anche in C usando semplici operazioni di bit-twiddling. Parte del mio ruolo consisteva nel migrare il codice base su Windows, Playstation 2, Linux, altri chipset TV e mobili. Tutte queste piattaforme erano disponibili con un compilatore C (spesso GCC) e un certo livello di API per scrivere sulla macchina sottostante - il mondo incorporato raramente è un kernel O / S. Non ho mai avuto bisogno di conoscere il codice macchina completo per una particolare piattaforma oltre a scrivere un boot loader e un mini-BIOS, entrambi entrati nel codice C alla prima opportunità disponibile (dopo aver impostato i vettori trap, assicurando l'endianità e modalità istruzioni e stabilendo una pila).
Il prossimo lavoro stava lavorando con C ++, C # e JavaScript su Windows. Nessun codice macchina.
Il lavoro corrente sta lavorando con C ++, JavaScript, Python, LUA, HTML e altre lingue su varie piattaforme. Non ho idea di quale codice macchina funzioni queste piattaforme, né ho bisogno di sapere - il compilatore traduce il nostro codice in qualunque cosa debba essere. Se si blocca, rilevo l'errore in un debugger o attraverso la diagnostica di runtime (eccezioni, segnali, ecc.).
Per divertimento, sviluppo applicazioni iOS nel poco tempo libero che ho a casa. Utilizza Objective-C e un'API che funziona su più chipset. Apparentemente sono basati su ARM, ma non ho mai visto alcun codice macchina nel mio sviluppo.
Sebbene sia un 'esercizio affascinante per imparare il linguaggio assembly, ora ci sono strumenti e linguaggi di livello più alto che ti permettono di essere un ordine di grandezza (o due) più produttivo.
Il numero di opportunità di lavoro disponibili per un programmatore di codice assembly / machine sorprendente è minuscolo rispetto a qualcosa come JavaScript, Java, C #, C ++ o ObjC.
Ti consiglierei di rendere questo hobby / side-interest piuttosto che un obiettivo principale.