Я настоятельно рекомендую вам пересмотреть свою цель и вот почему:
Сначала я выучил язык ассемблера 6502 на микрокомпьютере BBC (модель B, 32K). У него была потрясающая реализация BASIC, которая включала ассемблер макросов. У нас они были в школе, поэтому я написал все виды вредных программ, которые делали бы такие вещи, как прямая манипуляция с буфером экрана, чтобы заставить Лемминга пройтись по каждому экрану по комнате (они были подключены к сети), если машины не использовались в течение 10 минут , Это привело к приступам хихиканья среди моих друзей по Году 7.
Когда я приобрел Commodore 64 дома, я узнал, что он имеет процессор 6510, который также поддерживает язык ассемблера 6502, но с некоторыми интересными дополнениями. Пришлось купить ассемблер (пришел на картридж ) и вызывать программы через бейсик. С грандиозным видением написания бестселлера, мне в итоге удалось создать несколько демонстраций, в которых аппаратные регистры отображения видео с разбивкой по битам записывают прерывания для создания интересных цветовых эффектов, которые анимируются в стиле фанк-музыки. Впечатляет, но не так полезно.
Затем я получил Acorn Archimedes A310 с процессором ARM2, поэтому я использовал ту же замечательную реализацию BASIC со встроенным макроассемблером, что и BBC Micro (то же наследие). Мне удалось собрать пару игр, для которых подруги предоставили графику, плюс несколько трип-демо на основе синусоид. Обе эти программы были тяжелой работой для программирования, и плохой код мог вывести компьютер из строя (случайно отключить регистр сброса оборудования и т. Д.), Потеряв все, если я не сохранил (на дискету!).
В университете я познакомился с C ++ и, следовательно, с C. Я смог использовать его для программирования Sun / Solaris и некоторых других крупных мэйнфреймов. Я понятия не имею, на каких архитектурах ЦП работают эти машины - мне никогда не нужно было использовать ассемблер или читать машинный код, поскольку инструменты C ++ дали мне силу, необходимую для создания профессиональных приложений.
После Uni я работал над Windows и несколькими разновидностями Unix. C и C ++ работали на всех этих машинах, и в конечном итоге Java тоже.
Затем я работал над Windows и Dreamcast, используя C ++ и DirectX с обширной цепочкой инструментов для отладки.
Затем я начал работать с чипсетами на базе ARM для Smart TV (в 2000 году). Хотя мой опыт работы с ARM2, возможно, был уместен здесь, работа была основана на C. Я обнаружил, что все работы с аппаратными средствами, которые я делал на Архимеде, также могут быть выполнены в C с использованием простых операций переворота битов. Часть моей роли заключалась в том, чтобы перенести кодовую базу на Windows, Playstation 2, Linux, другие телевизионные и мобильные чипсеты. Все эти платформы были доступны как с компилятором C (часто GCC), так и с некоторым уровнем API для записи на базовый компьютер - встроенный мир редко является ядром O / S. Мне никогда не нужно было знать полный машинный код для какой-либо конкретной платформы, кроме написания загрузчика и мини-BIOS, которые оба переходили на C-код при первой доступной возможности (после настройки векторов перехвата,
Следующей работой была работа с C ++, C # и JavaScript на Windows. Нет машинного кода.
Текущая работа - работа с C ++, JavaScript, Python, LUA, HTML и другими языками на различных платформах. Я понятия не имею, какой машинный код работают на этих платформах, и мне не нужно знать - компилятор переводит наш код во что бы то ни было. В случае сбоя я улавливаю ошибку в отладчике или с помощью диагностики во время выполнения (исключения, сигналы и т. Д.).
Ради интереса я занимаюсь разработкой приложений для iOS, когда у меня дома мало свободного времени. Он использует Objective-C и API, который работает на нескольких чипсетах. Очевидно, они основаны на ARM, но я никогда не видел никакого машинного кода в моей разработке.
Хотя это увлекательное занятие по изучению ассемблера, сейчас есть гораздо более высокоуровневые инструменты и языки, которые позволяют вам работать на порядок (или два) более продуктивно.
Количество рабочих мест, доступных для замечательного программиста на языке ассемблера / машинного кода, ничтожно мало по сравнению с чем-то вроде JavaScript, Java, C #, C ++ или ObjC.
Я бы посоветовал вам сделать это хобби / побочным интересом, а не главной целью.