Я учился на 68HC11 в колледже. С ними очень просто работать, но, честно говоря, большинство микроконтроллеров с низким энергопотреблением будут похожими (AVR, 8051, PIC, MSP430). Самая большая вещь, которая усложнит программирование ASM для микроконтроллеров - это количество и тип поддерживаемых режимов адресации памяти . Сначала вам следует избегать более сложных устройств, таких как процессоры ARM более высокого класса.
Я, вероятно, рекомендую MSP430 в качестве хорошей отправной точки. Может быть, написать программу на C и учиться, заменяя различные функции встроенной сборкой. Начните с простого, x + y = z и т. Д.
После того, как вы заменили функцию или алгоритм на сборку, сравните и сопоставьте, как вы ее кодировали и что сгенерировал компилятор Си. На мой взгляд, это, вероятно, один из лучших способов изучения ассемблера и в то же время узнать о том, как работает компилятор, что невероятно ценно для программиста встраиваемых систем. Просто сначала отключите оптимизацию в компиляторе C, иначе вы, вероятно, будете очень смущены сгенерированным кодом компилятора. Постепенно включите оптимизацию и обратите внимание, что делает компилятор.
RISC против CISC
RISC означает «Вычисление с сокращенным набором команд», это не относится к конкретному набору команд, а просто к стратегии проектирования, которая говорит, что ЦП имеет минимальный набор команд. Несколько инструкций, каждый из которых делает что-то простое. Это не строго техническое определение того, что нужно, чтобы быть RISC. С другой стороны, в архитектурах CISC много инструкций, но каждая «делает больше».
Целевые преимущества RISC состоят в том, что для разработки вашего ЦП требуется меньше транзисторов, что означает меньшее энергопотребление (большое для микроконтроллеров), более дешевое изготовление и более высокие тактовые частоты, ведущие к повышению производительности. Как правило, более низкое энергопотребление и более дешевое производство, более высокая производительность не достигла цели в результате улучшений конструкции в архитектурах CISC.
Сегодня почти все ядра ЦП являются RISC или срединными проектами. Даже с самой известной (или печально известной) архитектурой CISC, x86. Современные процессоры x86 представляют собой ядра, подобные RISC, с декодером, закрепленным болтами на передней панели, который разбивает инструкции x86 на несколько RISC-подобных инструкций. Я думаю, что Intel называет это «микрооперациями».
Что касается того, что (RISC vs CISC) легче изучить на ассемблере, я думаю, что это сложный вопрос. Выполнение чего-либо с набором инструкций RISC обычно требует больше строк сборки, чем то же самое с набором инструкций CISC. С другой стороны, наборы команд CISC сложнее изучать из-за большего количества доступных инструкций.
Большая часть причин, по которым CISC получает дурную славу, заключается в том, что x86 является, безусловно, наиболее распространенным примером и представляет собой небольшую путаницу для работы. Я думаю, что это в основном результат того, что набор инструкций x86 был очень старым и был расширен с полдюжины или более раз при сохранении обратной совместимости. Даже ваше 4,5 ГГц ядро i7 может работать в режиме 286 (и работает при загрузке).
Что касается ARM как архитектуры RISC, я бы посчитал это умеренно спорным. Это, безусловно, архитектура хранилища нагрузки. Базовый набор инструкций похож на RISC, но в последних ревизиях набор инструкций немного вырос до такой степени, что я лично считаю, что это нечто среднее между RISC и CISC. Набор инструкций для большого пальца действительно самый «RISCish» из наборов инструкций ARM.