Итак, я хочу изучить ассемблер сначала на MP, а затем перейти на C (поскольку кажется, что большинство из них используют его).
Я хочу углубиться во встраиваемое программирование, мне очень нравятся вещи с низким уровнем C (ядро / модули для Linux - это в основном то, что я сделал), но мне нравится идея возможности программировать даже более низкий уровень, чем этот (Микроконтроллеры / Микропроцессоры).
Я знаю об Arduino, и это здорово и все такое, но я не могу найти много ресурсов для использования Assembly с ними. Кажется, что Atmel AVR очень популярны (и дешевы), но когда дело доходит до реальной аппаратной части (подключение их к макету и т. Д.), Я не нахожу много информации.
Любые предложения / информация или ресурсы, о которых вы, ребята / девочки, знаете, пожалуйста, дайте мне знать.
Редактировать: Другое дело: кажется, что все книги о микропроцессорах, которые я читаю (обычно AVR), говорят о самом микропроцессоре и его программировании. Но мне еще предстоит увидеть книгу, в которой действительно говорится об установке всех компонентов самостоятельно (микропроцессор, память, питание и т. Д.). Если бы я мог найти что-то, что проведет меня через это, я был бы в бизнесе. (Я хочу учиться с нуля.) Не говоря уже, я понятия не имею, как вы будете общаться между ними.
Ответы:
Я учился на 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.
источник
Я думаю, что 8-битные микроконтроллеры PIC - лучший выбор из-за уменьшенного количества инструкций.
Побочным эффектом уменьшения количества инструкций является необходимость изобретать велосипед по сравнению с другими микроконтроллерами с большим количеством инструкций.
Но после изучения PIC вы можете перейти на другие микроконтроллеры и посмотреть, что вам больше подходит.
источник
Аналогично предложению Марка о 68HC11, Набор инструкций Freescale 68HCS08 является уменьшенной версией Motorola 6809, которая, как мне показалось, имела один из самых чистых 8-битных наборов инструкций своего времени. Вы можете получить плату разработки с помощью переключателей, светодиодов, 3-осевой акселерометр и пьезоэлектрическим зуммером для $ 79 здесь .
источник
Набор инструкций msp430 хорош для изучения ассемблера. Избегайте x86. Arm - еще один хороший инструмент, но у него гораздо больше инструкций и опций, и он может не подходить лучше всего в качестве первого набора команд. Thumb является подмножеством набора команд arm и неплохо, на github у меня есть как эмулятор большого пальца (thumbulator), так и эмулятор msp430 (не проверенный столько же, сколько thumb), которые являются barebone-компонентами, только процессор и память и немного больше , так что вы можете получить хорошее представление о том, что происходит. Альтернативой может быть qemu, например, там, где видимость есть, но куда сложнее добраться, также как и в случае решения, похожего на qemu, требуется гораздо больше работы, прежде чем вы поймете, работает ли что-нибудь.
Перейдите на mspgcc4.sf.net, чтобы создать набор инструментов и / или стандартный пакет binutils (./configure --target = msp430 --prefix = / что-то) в сочетании с базовым пакетом llvm. Как только вы готовы к аппаратному обеспечению, плата разработки msp430 стоит менее 5 долларов. Для инструментов руки / большого пальца просто получите облегченную версию из CodeSource. Доска cortex-m3 (thumb / thumb2) сейчас стоит около 12 баксов. Я бы предпочел не использовать x86, avr и другие в качестве первого набора инструкций, вы захотите научить других быть хорошо округленными. Также стоит обратить внимание на старый / оригинальный набор инструкций pic. Вы могли бы написать для себя симулятор днем, а также выучить ассемблер. Я бы не стал сначала изучать его обязательно, он учит чему-то интересному, но в то же время он не масштабируется и не обязательно отражает общие черты, которые вы найдете в большинстве наборов инструкций. Msp430 дал мне ощущение pdp11, который является первым набором инструкций, который я действительно выучил, оба имеют хорошо округленные, в основном, ортогональные функции. Наборы инструкций msp430 и microchip pic документированы в Википедии, по крайней мере, в качестве справки, чтобы получить полную картину, получить таблицы / руководства от поставщиков, в которых будут описаны каждый регистр и режим адресации, сброс / загрузка и т. Д.
источник
Вы уверены, что хотите изучить ассемблер? Можешь сказать почему? Это довольно сложная задача, и сейчас она становится все менее и менее полезной или полезной. Это от человека, который написал в нем и даже собранные вручную программы (без ассемблера, компоновщика, просто карта с набором инструкций).
источник
Я тоже учился на 68HC11 в колледже. Скорее, они предлагают это по сравнению с любым другим MPU / MCU, я просто хотел бы отметить, что на плате разработки, которую мы использовали, была установлена программа мониторинга. Поэтому из тупого терминала мы могли бы пройтись по коду и проверить регистры ... Я бы посоветовал, когда вы знаете, какой процессор соответствует вашим требованиям, вы также проверите, какие платы разработки доступны с программой мониторинга.
источник
Я преподаю PIC (14-битное ядро) и сборку ARM. Класс PIC Я говорю, что как только они овладеют уродством этой архитектуры, они могут взять на себя все остальное. ARM (не Thumb / Cortex!) - очень хорошая архитектура для изучения ассемблера. Мы используем плату LPC2148.
источник
Я изучил 16-битную сборку PIC с помощью dsPIC33F. Сборка процессора очень похожа на C, так как поддерживает указатели и три операции с переменными (например, A = B + C), что значительно облегчает обучение и адаптацию к нему.
источник
Вы путаете микроконтроллеры и микропроцессоры здесь. AVR - это микроконтроллерная линия от Atmel, а не микропроцессор. Я предлагаю вам сначала поискать в Википедии, чтобы лучше понять разницу между ними. По сути, микроконтроллер - это более или менее полная система, тогда как микропроцессор - это только процессор (следовательно, микроконтроллер имеет микропроцессор внутри).
источник
В моем университете нас учили дизайну / архитектуре аппаратного обеспечения наряду с языком ассемблера (очевидно, что они идут рука об руку) с архитектурой MIPS (или, возможно, DLX ). С тех пор я немного увлекался сборкой PIC и AVR в школе / на работе, и все они довольно похожи. Я думаю, что сборка MIPS была отличной отправной точкой, поскольку язык очень прост, как и архитектура процессора.
Смотрите также: эта книга . Не лучшая книга в мире, но это стандартная книга по компьютерному дизайну для многих университетов.
источник
Я предлагаю любому, кто собирается начать изучать микроконтроллеры и процессоры, следует прочитать книгу под названием «кодирующий скрытый язык компьютера», если вы изучаете, что почти вы разбираетесь в процессорах, и для программирования лучше использовать программист poney prog и программу из atmel studio6.1 с официального сайта atmel
источник