Le sugiero que reconsidere su objetivo y he aquí por qué:
Aprendí por primera vez el lenguaje ensamblador 6502 en el microordenador BBC (Modelo B, 32K). Tenía una implementación BASIC increíble que incluía un ensamblador de macros. Los teníamos en la escuela, así que escribí todo tipo de programas traviesos que harían cosas como la manipulación directa del búfer de pantalla para hacer que Lemming caminara por cada pantalla, alrededor de la sala (estaban conectados en red) si las máquinas no se hubieran utilizado durante 10 minutos . Resultó en risas entre mis amigos de Year 7.
Cuando obtuve un Commodore 64 en casa, aprendí que tenía una CPU 6510 que también ejecutaba el lenguaje ensamblador 6502 pero con algunos extras interesantes. Tuve que comprar un ensamblador (vino en un cartucho ) e invocar los programas a través de BASIC. Con grandes visiones de escribir un juego superventas, finalmente logré crear varias demostraciones que registraban el hardware de la pantalla de video en interrupciones para hacer interesantes efectos de barra de colores que animaban a la música de chip funky. Impresionante, pero no tan útil.
Luego obtuve un Acorn Archimedes A310 que tenía una CPU ARM2, así que utilicé la misma impresionante implementación BÁSICA con ensamblador de macros incorporado que el BBC Micro (mismo patrimonio). Logré armar un par de juegos para los que un amigo artístico proporcionó gráficos, además de algunas demostraciones trippy basadas en sinusoides. Ambos fueron un trabajo difícil de programar y un código incorrecto podría derribar la máquina (disparar accidentalmente el registro de reinicio de hardware, etc.), perdiendo todo si no hubiera guardado (¡en disquete!).
En la Universidad me presentaron C ++ y, por lo tanto, C. pude usarlo para programar Sun / Solaris y algunas otras computadoras mainframe grandes. No tengo ni idea de qué arquitecturas de CPU ejecutaban estas máquinas: nunca tuve que usar ensamblador o leer el código de la máquina, ya que las herramientas C ++ me dieron la potencia que necesitaba para producir aplicaciones profesionales.
Después de Uni, trabajé en Windows y en varios sabores de Unix. C y C ++ funcionaron en todas estas máquinas y, finalmente, Java también.
Luego trabajé en Windows y Dreamcast usando C ++ con DirectX con una cadena de herramientas integral para la depuración.
Luego tomé un trabajo trabajando con chipsets basados en ARM para televisores inteligentes (en 2000). Aunque mi experiencia con ARM2 puede haber sido relevante aquí, el trabajo se basó en C. Descubrí que todo lo relacionado con el hardware que había hecho en Arquímedes también se podía hacer en C usando operaciones sencillas de giro de bits. Parte de mi función era migrar la base de código a Windows, Playstation 2, Linux, otros conjuntos de chips de TV y móviles. Todas estas plataformas estaban disponibles con un compilador de C (a menudo GCC) y algún nivel de API para escribir en la máquina subyacente: el mundo incrustado rara vez es un O / S del núcleo. Nunca necesité saber el código de máquina completo para ninguna plataforma en particular más allá de escribir un cargador de arranque y un mini BIOS, los cuales saltaron al código C en la primera oportunidad disponible (después de configurar vectores de trampa,
El siguiente trabajo fue trabajar con C ++, C # y JavaScript en Windows. Sin código de máquina
El trabajo actual es trabajar con C ++, JavaScript, Python, LUA, HTML y otros lenguajes en varias plataformas. No tengo idea de qué código de máquina ejecutan estas plataformas, ni necesito saberlo: el compilador traduce nuestro código a lo que sea necesario. Si falla, detecto el error en un depurador o mediante diagnósticos de tiempo de ejecución (excepciones, señales, etc.).
Por diversión, desarrollo aplicaciones de iOS en el poco tiempo libre que tengo en casa. Utiliza Objective-C y una API que funciona en múltiples conjuntos de chips. Aparentemente están basados en ARM, pero nunca he visto ningún código de máquina en mi desarrollo.
Si bien es un ejercicio fascinante para aprender el lenguaje ensamblador, ahora hay herramientas e idiomas de un nivel mucho más alto que le permiten ser un orden de magnitud (o dos) más productivo.
La cantidad de oportunidades de trabajo disponibles para un sorprendente programador de lenguaje ensamblador / código de máquina es minúscula en comparación con algo como JavaScript, Java, C #, C ++ u ObjC.
Te aconsejo que hagas de este un pasatiempo / interés secundario en lugar de un objetivo principal.