Consiglio vivamente di riconsiderare il tuo obiettivo ed ecco perché:
Ho imparato per la prima volta il 6502 Assembly Language sul BBC Microcomputer (Modello B, 32K). Aveva un'impressionante implementazione BASIC che includeva un assemblatore di macro. 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 Lemming su ogni schermo, intorno alla stanza (erano collegati in rete) se le macchine non fossero state utilizzate 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 grandi visioni di scrivere un gioco best-seller, alla fine sono riuscito a creare diverse demo che l'hardware di visualizzazione video bit-twiddled registra su interrupt per creare interessanti effetti della barra dei colori che animano la musica funky dei chip. Impressionante, ma non così utile.
Ho quindi ottenuto un Acorn Archimedes A310 che aveva una CPU ARM2, quindi ho usato la stessa fantastica implementazione BASIC con macro assemblatore incorporato come BBC Micro (stessa eredità). Sono riuscito a mettere insieme un paio di giochi per i quali un amico artistico ha fornito la grafica, oltre ad alcune demo trippy basate su sinusoidi. Entrambi sono stati un duro lavoro da programmare e un codice errato ha potuto abbattere la macchina (inciampare accidentalmente il registro di ripristino hardware, ecc.), Perdere tutto se non avessi salvato (su floppy!).
All'università mi è stato presentato C ++ e quindi C. Sono stato in grado di usarlo per programmare Sun / Solaris e alcuni altri grandi computer mainframe. Non ho idea di quali architetture CPU funzionassero su queste macchine: non ho mai avuto bisogno di usare assemblatore o leggere il codice macchina poiché gli strumenti C ++ mi davano 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 Java.
Ho quindi lavorato su Windows e Dreamcast utilizzando C ++ con DirectX con una catena di strumenti completa per il debug.
Ho quindi svolto un lavoro lavorando con chipset basati su ARM per Smart TV (nel 2000). Sebbene la mia esperienza con ARM2 possa essere stata rilevante qui, il lavoro era basato su C. Ho scoperto che tutto ciò che riguardava l'hardware che avevo fatto su Archimede poteva essere fatto anche in C usando semplici operazioni di manipolazione dei bit. Parte del mio ruolo era migrare la base di codice su Windows, Playstation 2, Linux, altri TV e chipset mobili. Tutte queste piattaforme erano disponibili sia con un compilatore C (spesso GCC) sia con 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 nessuna particolare piattaforma oltre a scrivere un boot loader e un mini BIOS, entrambi passati al codice C alla prima opportunità disponibile (dopo aver impostato i vettori trap,
Il lavoro successivo stava lavorando con C ++, C # e JavaScript su Windows. Nessun codice macchina.
Il lavoro attuale sta lavorando con C ++, JavaScript, Python, LUA, HTML e altri linguaggi su varie piattaforme. Non ho idea di quale codice macchina eseguano queste piattaforme, né ho bisogno di sapere - il compilatore traduce il nostro codice in qualunque cosa debba essere. Se si arresta in modo anomalo, rilevo l'errore in un debugger o tramite 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 degli assemblaggi, ora ci sono strumenti e linguaggi di livello molto più elevato che ti consentono di essere un ordine di grandezza (o due) più produttivo.
Il numero di opportunità di lavoro disponibili per un fantastico programmatore di linguaggio assembly / codice macchina è minuscolo rispetto a qualcosa come JavaScript, Java, C #, C ++ o ObjC.
Ti consiglierei di renderlo un hobby / interesse collaterale piuttosto che un obiettivo principale.