Eu sugiro fortemente que você reconsidere seu objetivo e aqui está o porquê:
Eu aprendi a 6502 Assembly Language no microcomputador da BBC (modelo B, 32K). Ele tinha uma implementação BASIC incrível, que incluía um montador de macros. Nós os tínhamos na escola, então eu escrevi todos os tipos de programas maliciosos que faziam coisas como manipulação direta de buffer de tela para fazer um Lemming percorrer cada tela, ao redor da sala (eles estavam em rede) se as máquinas não fossem usadas por 10 minutos . Isso resultou em risadas entre os meus amigos do 7º ano.
Quando comprei um Commodore 64 em casa, soube que ele tinha uma CPU 6510 que também executava a linguagem assembly 6502, mas com alguns extras interessantes. Eu tive que comprar um montador (veio em um cartucho ) e invocar os programas via BASIC. Com grandes visões de escrever um jogo mais vendido, eu finalmente consegui criar várias demos que o hardware de exibição de vídeo com poucos bits registra na interrupção para fazer efeitos interessantes da barra de cores que animavam a música chip descolada. Impressionante, mas não tão útil.
Em seguida, adquiri um Acorn Archimedes A310 que tinha uma CPU ARM2, então usei a mesma implementação BASIC incrível com o macro assembler incorporado que o BBC Micro (mesma herança). Eu consegui montar alguns jogos que um amigo artístico fornecia gráficos, além de algumas demos trippy baseadas em senoides. Ambos eram um trabalho árduo para programar e códigos incorretos podiam derrubar a máquina (acionar acidentalmente o registro de redefinição de hardware, etc.), perdendo tudo se eu não tivesse salvo (em disquete!).
Na Universidade, fui apresentado ao C ++ e, portanto, ao C. Eu pude usá-lo para programar o Sun / Solaris e alguns outros computadores grandes de mainframe. Não tenho idéia de quais arquiteturas de CPU essas máquinas rodavam - nunca precisei usar assembler ou ler o código da máquina, pois as ferramentas C ++ me deram o poder necessário para produzir aplicativos profissionais.
Depois do Uni, trabalhei no Windows e em vários tipos de Unix. C e C ++ trabalharam em todas essas máquinas e, eventualmente, Java também.
Em seguida, trabalhei no Windows e no Dreamcast usando C ++ com DirectX com uma cadeia abrangente de ferramentas para depuração.
Depois, trabalhei com chipsets baseados em ARM para Smart TVs (em 2000). Embora minha experiência com o ARM2 possa ter sido relevante aqui, o trabalho foi baseado em C. Descobri que todo o hardware que eu fiz no Archimedes também poderia ser feito em C usando operações diretas de manipulação de bits. Parte da minha função era migrar a base de código para Windows, Playstation 2, Linux, outros chipsets de TV e móveis. Todas essas plataformas estavam disponíveis com um compilador C (geralmente GCC) e algum nível de API para gravar na máquina subjacente - o mundo incorporado raramente é um O / S do kernel. Eu nunca precisei conhecer o código completo da máquina para qualquer plataforma em particular, além de escrever um gerenciador de inicialização e um mini BIOS, os quais saltaram para o código C na primeira oportunidade disponível (depois de configurar vetores de interceptação,
O próximo trabalho foi trabalhar com C ++, C # e JavaScript no Windows. Nenhum código de máquina.
O trabalho atual está trabalhando com C ++, JavaScript, Python, LUA, HTML e outras linguagens em várias plataformas. Não tenho idéia de qual código de máquina essas plataformas executam, nem preciso saber - o compilador traduz nosso código para o que for necessário. Se travar, eu pego o erro em um depurador ou através de diagnósticos de tempo de execução (exceções, sinais, etc.).
Por diversão, desenvolvo aplicativos iOS no pouco tempo livre que tenho em casa. Ele usa o Objective-C e uma API que funciona em vários chipsets. Aparentemente, eles são baseados em ARM, mas nunca vi nenhum código de máquina no meu desenvolvimento.
Embora seja um exercício fascinante para aprender a linguagem assembly, agora existem ferramentas e idiomas de nível superior que permitem que você seja uma ordem de magnitude (ou duas) mais produtiva.
O número de oportunidades de trabalho disponíveis para um incrível programador de linguagem assembly / código de máquina é minúsculo em comparação com algo como JavaScript, Java, C #, C ++ ou ObjC.
Eu aconselho que você faça disso um hobby / interesse lateral, e não um objetivo principal.