Что такое хороший микропроцессор для начинающих для изучения ассемблера?

Итак, я хочу сначала изучить ассемблер на MP, а затем перейти на C (поскольку похоже, что большинство из них используют его).

Я хочу заняться встраиваемым программированием, мне очень нравится низкоуровневый материал C (ядра/модули для Linux — это в основном то, чем я занимался), но мне нравится идея программировать еще более низкий уровень (микроконтроллеры/модули для Linux). микропроцессоры).

Я знаю об Arduino, и это здорово и все такое, но я не могу найти много ресурсов для использования сборки с ними. AVR Atmel кажутся очень популярными (и дешевыми), но когда дело доходит до фактической аппаратной части (подключение их к макетной плате и т. д.), я не нахожу много информации.

Любые предложения/информация или ресурсы, о которых вы, ребята/девушки, знаете, пожалуйста, дайте мне знать.

Редактировать: Еще одно: кажется, что все книги по микропроцессорам, которые я читал (обычно AVR), говорят о самом микропроцессоре и его программировании. Но я еще не видел книги, в которой действительно рассказывается об установке всех компонентов самостоятельно (микропроцессор, память, питание и т. д.). Если бы я мог найти что-то, что поможет мне пройти через это, я был бы в бизнесе. (Я хочу учиться с нуля.) Не говоря уже о том, что я понятия не имею, как вы будете общаться между ними.

Я ненавижу посылать вас в другое место, но если вы заинтересованы в AVR, вам нужно знать о AVRfreaks.net .
Да, я склоняюсь к AVR... в основном потому, что о них ТАК много информации, и они НАМНОГО дешевле, чем TI-MPS430...
AVR популярен среди любителей, но я не знаю, откуда вы берете данные о затратах. У обеих семей есть предложения по цене менее 1 доллара США, а другие — по 20 долларов США.
Что ж… когда я смотрел на MPS430, мне казалось, что программное обеспечение (отладчики и т. д.) стоит немного дороже при добавлении на платы разработки.
Мой совет: не выбирайте MSP430, если вы новичок. Официальные инструменты хороши, но бесплатная поддержка, которую вы найдете в Интернете, не соответствует PIC/AVR.
На данный момент это устарело, но следует отметить, что Arduino — это AVR. Arduino — это просто платформа для разработки, использующая аппаратное обеспечение AVR.

Ответы (11)

Я учился на 68HC11 в колледже. С ними очень просто работать, но, честно говоря, большинство маломощных микроконтроллеров будут похожи (AVR, 8051, PIC, MSP430). Самое главное, что усложнит программирование ASM для микроконтроллеров, — это количество и тип поддерживаемых режимов адресации памяти . Сначала вам следует избегать более сложных устройств, таких как процессоры ARM более высокого уровня.

Я бы, наверное, порекомендовал MSP430 в качестве хорошей отправной точки. Может быть, написать программу на C и учиться, заменяя различные функции встроенным ассемблером. Начните с простого, x + y = z и т. д.

После того, как вы заменили функцию или алгоритм на ассемблере, сравните и сопоставьте, как вы их закодировали, и что сгенерировал компилятор C. На мой взгляд, это, вероятно, один из лучших способов изучить ассемблер и в то же время узнать, как работает компилятор, что невероятно ценно для встроенного программиста. Просто сначала убедитесь, что вы отключили оптимизацию в компиляторе C, иначе вы, вероятно, будете очень запутаны кодом, сгенерированным компилятором. Постепенно включайте оптимизации и отмечайте, что делает компилятор.

RISC против CISC

RISC означает «вычисления с сокращенным набором инструкций», это не относится к конкретному набору инструкций, а просто стратегия проектирования, согласно которой ЦП имеет минимальный набор инструкций. Несколько инструкций, каждый из которых делает что-то основное. Нет строго технического определения того, что нужно, чтобы «быть RISC». С другой стороны, архитектуры CISC имеют множество инструкций, но каждая из них «делает больше».

Целевые преимущества RISC заключаются в том, что в конструкции вашего ЦП требуется меньше транзисторов, что означает меньшее энергопотребление (большое для микроконтроллеров), более дешевое производство и более высокая тактовая частота, что приводит к большей производительности. Более низкое энергопотребление и более дешевое производство, как правило, верны, а более высокая производительность на самом деле не соответствует цели в результате усовершенствований конструкции в архитектурах CISC.

Сегодня почти все ядра ЦП представляют собой RISC или «средние» конструкции. Даже с самой известной (или печально известной) архитектурой CISC x86. Современные процессоры x86 внутренне представляют собой RISC-подобные ядра с декодером, прикрепленным к передней части, который разбивает инструкции x86 на несколько инструкций, подобных RISC. Я думаю, что Intel называет это «микрооперациями».

Что касается того, что (RISC или CISC) легче изучить на ассемблере, я думаю, что это подбрасывание. Чтобы что-то сделать с набором инструкций RISC, обычно требуется больше строк ассемблера, чем с набором инструкций CISC. С другой стороны, наборы инструкций CISC более сложны для изучения из-за большего количества доступных инструкций.

Большая часть причин, по которым CISC получает плохую репутацию, заключается в том, что x86, безусловно, является наиболее распространенным примером, и с ним немного неудобно работать. Я думаю, что это в основном результат того, что набор инструкций x86 очень старый и расширялся полдюжины или более раз при сохранении обратной совместимости. Даже ваш Core i7 с частотой 4,5 ГГц может работать в режиме 286 (и работает при загрузке).

Что касается того, что ARM является архитектурой RISC, я бы посчитал это умеренно спорным. Это, безусловно, архитектура загрузки-хранилища. Базовый набор инструкций похож на RISC, но в последних версиях набор инструкций значительно вырос до такой степени, что я лично считаю его чем-то средним между RISC и CISC. Набор инструкций для большого пальца действительно является самым «RISCish» из наборов инструкций ARM.

@Mark - ARM также являются процессорами RISC, набор инструкций не так уж и плох. Он на самом деле довольно красиво оформлен; есть некоторые инструкции по разграничению пространства пользователя и пространства ядра и другим сложностям, но их можно игнорировать, пока вы только начинаете.
@reemrevnivek Я больше пытался увести его от сложностей работы с несколькими режимами процессора и MMU, когда он начал заниматься ASM, поэтому я упомянул ARM более высокого уровня. Инициализация и настройка SoC ARM более высокого класса также значительно сложнее, чем что-то вроде AVR/PIC/MSP430.
РИСК? я не уверен, что понимаю разницу между этим и чем-то еще... хочешь объяснить? Разве большинство микроконтроллеров не RISC? это просто означает, что меньше наборов инструкций правильно?
@sauron Я добавил к своему ответу: RISC против CISC.
Являются ли такие вещи, как AVR/PICS, обычно RISC или CISC?
@sauron это RISC, я не знаю ни одного ядра CISC в микроконтроллерах.
@Mark 8051 являются CISC
Совершенно не актуально, но я считаю, что изучение сборки путем компиляции C очень сложно, так как вы в основном пытаетесь узнать больше о соглашениях о вызовах и о том, как этот компилятор генерирует asm, чем сам ассемблер...
Я начал с 68HC12! Есть действительно отличные книги по ассемблеру 6800 (который очень похож на 68HC12 ASM). Текст Левенталя начинается практически без знания компьютеров.

Я думаю, что 8-битные микроконтроллеры PIC являются лучшим выбором из-за меньшего количества инструкций.

Побочным эффектом меньшего количества инструкций является то, что вам придется заново изобретать велосипед по сравнению с другими микроконтроллерами с большим количеством инструкций.

Но после изучения PIC вы можете перейти на другие микроконтроллеры и посмотреть, что вам больше подходит.

Я бы не совсем не согласился, поскольку это то, что я сейчас изучаю, но 8-, 16- и 32-битные ядра имеют совершенно разные стратегии asm.

Подобно предложению Марка о 68HC11, набор инструкций семейства Freescale 68HCS08 представляет собой упрощенную версию Motorola 6809, которая, по моему мнению, имела один из самых чистых 8-битных наборов инструкций своего времени. Вы можете получить макетную плату с переключателями, светодиодами, 3-осевым акселерометром и пьезоизлучателем за 79 долларов здесь .

Уменьшенное количество регистров S08 по сравнению с HC11 может немного усложнить задачу, так как вам нужно будет выяснить, что стек делает со всем (что позже было изучено в моей лаборатории с HC11 (или это было так). 12-е)). Кроме того, AVR действительно хороши, потому что у вас есть колоссальные 32 регистра, с которыми можно поиграть, прежде чем беспокоиться о стеке.
На самом деле мне нравится простота единственного аккумулятора, хотя он может быть узким местом. Вместо того, чтобы использовать стек для временных переменных, для начала я считаю, что проще использовать 144 байта переменных прямой страницы, которые доступны с более короткими инструкциями (остальные 112 байтов прямой страницы используются для регистров ввода-вывода). Использование стека (который допускает реентерабельные и рекурсивные подпрограммы) можно изучить позже.
Разве HC(S)08 не был производным от HC05?
@Johan.A Да, ты абсолютно прав. HCS08 — это усовершенствованная версия HC05. Я должен был упомянуть об этом. Я думаю, что это что-то вроде 6800 -> 6801 -> 6805 -> HC(S)08. Я написал много ассемблерного кода для 6805. Я сравнил HCS08 с 6809, чтобы связать с другими комментариями относительно 68HC11 (который примерно является микроконтроллерной версией 6809).

Набор инструкций msp430 хорош для изучения ассемблера. Избегайте x86. Arm — еще один хороший инструмент, но в нем гораздо больше инструкций и опций, и он может не подходить в качестве первого набора инструкций. Thumb - это подмножество набора инструкций для рук, и это неплохо, на github у меня есть как эмулятор большого пальца (thumbulator), так и эмулятор msp430 (не тестировался так сильно, как у большого пальца), которые являются базовыми, только процессор и память и немного больше , так что вы можете получить хорошее представление о том, что происходит. Альтернативой может быть, например, qemu, где видимость есть, но гораздо сложнее получить, аналогично с решением, подобным qemu, требуется гораздо больше работы, прежде чем вы выясните, есть ли у вас что-то работающее.
перейдите на mspgcc4.sf.net, чтобы создать набор инструментов и/или стандартный binutils (./configure --target=msp430 --prefix=/something) в сочетании со стандартным llvm. Когда вы будете готовы к оборудованию, макетная плата msp430 будет стоить менее 5 долларов. Для инструментов руки/большого пальца просто получите облегченную версию из кода. Плата cortex-m3 (thumb/thumb2) сейчас стоит около 12 долларов. Я бы избегал x86, avr и других в качестве первого набора инструкций, вы захотите изучить другие, чтобы они были хорошо округлены. Стоит также обратить внимание на старый/оригинальный набор графических инструкций. Вы можете самостоятельно написать симулятор за полдня, а также изучить ассемблер. Я бы не обязательно сначала изучал его, он учит некоторым интересным вещам, но в то же время не масштабируется и не обязательно представляет общие функции, которые вы найдете в большинстве наборов инструкций. Msp430 дал мне ощущение pdp11, который является первым набором инструкций, который я действительно изучил, оба имеют хорошо округленные, в основном ортогональные функции. Как msp430, так и наборы инструкций pic для микрочипов задокументированы в Википедии, по крайней мере, в качестве ссылки, чтобы получить полную картину, получите таблицы данных / руководства от поставщиков, в которых будет описан каждый регистр и режим адресации, сброс / загрузка и т. Д.

только для ассемблера вам нужны только binutils, по крайней мере, для arm/thumb или msp430, и вы можете собрать ассемблер и компоновщик. Если вам нужен компилятор C, с помощью которого вы можете изучить вывод ассемблера в качестве учебного инструмента, вам понадобится mspgcc4 или codesourcery, или просто используйте llvm для обоих.

Я тоже учился на 68HC11 в колледже. Скорее, они предлагают это вместо любого другого MPU / MCU, я просто хотел указать, что на плате разработки, которую мы использовали, была программа мониторинга. Таким образом, с тупого терминала мы могли бы пройтись по коду и изучить регистры... Я бы посоветовал, когда вы знаете, какой процессор соответствует вашим требованиям, вы также проверили, какие платы разработки доступны с программой-монитором.

Программа мониторинга звучит так, как будто это было бы очень полезно. Какую книгу вы использовали, чтобы узнать это? если позволите, я спрошу....
У меня тоже был опыт работы с 68HC11, и «Программа мониторинга» известна как Buffalo Monitor . По сути, это просто программа, хранящаяся в ПЗУ, которая последовательно взаимодействует с вашим ПК. Вы вводите в терминал, и программа интерпретирует ваши запросы и возвращает вам информацию. Вы можете выводить память на экран, изменять значения памяти, выполнять инструкции и т. д. Плата, которую мы использовали, была вот этой . Этот контроллер прост в освоении, но очень устарел.
... Книга, которую мы использовали, была вот этой , если вам интересно. Я бы посоветовал использовать более современный контроллер, такой как AVR; их макетную плату можно найти здесь .

Я преподаю как сборку PIC (14-битное ядро), так и сборку ARM. Я говорю классу PIC, что как только они освоят уродство этой архитектуры, они смогут взяться за что угодно. ARM (не Thumb/Cortex!) — очень хорошая архитектура для изучения ассемблера. Мы используем плату LPC2148.


2019-12-29 обновление

Я переключился на Cortex, сначала на LPC1114/820, потом на Arduino Due. Arduino Due дешевая (из Китая), мощная, может использоваться с C, C++, ассемблером (и, если вы хотите Python), и если вы действительно хотите, вы можете использовать ее с Arduino IDE. Я предпочитаю собственную систему сборки и свободный выбор редактора/IDE.

Привет, Воутер, рад тебя видеть здесь!

Вы уверены, что хотите изучать ассемблер? Можете ли вы сказать, почему? Это довольно сложная задача, и в наши дни она становится все менее актуальной или полезной. Это от человека, который писал на нем и даже вручную собирал программы (никакого ассемблера, компоновщика, просто карточка с набором инструкций).

На самом деле это не ответ, а комментарий. Я также не решился бы доверять программисту встраиваемых систем C, который не желал время от времени копаться в фрагментах ассемблера, пытаясь понять странность в поведении проекта.

Я изучил 16-битную сборку PIC с помощью dsPIC33F. Сборка процессора очень похожа на C, поскольку поддерживает указатели и операции с тремя переменными (например, A = B + C), что значительно упрощает обучение и адаптацию к ней.

Вы путаете микроконтроллеры и микропроцессоры. AVR — это линейка микроконтроллеров от Atmel, а не микропроцессор. Я предлагаю вам сначала поискать в Википедии, чтобы лучше понять, в чем разница между ними. По сути, микроконтроллер — это более или менее законченная система, тогда как микропроцессор — это только процессор (следовательно, микроконтроллер имеет микропроцессор внутри).

Я знал это, я не знаю, почему я не поставил это. Я имел в виду, что не так много руководств говорят о фактическом подключении MP и памяти (например, flash или eeprom) и т. д.
Поскольку большинство микропроцессоров теперь имеют кэш-память и некоторые операции ввода-вывода, эта граница очень размыта.
@Sauron - Ты уверен, что знал это? Вы снова использовали MP; микроконтроллер (который является правильным термином для AVR и 99% устройств, которые мы здесь обсуждаем) почти всегда имеет встроенную память (как энергонезависимую, такую ​​как EEPROM и Flash, так и энергозависимую SRAM). Научитесь использовать встроенные компоненты, прежде чем приступать к периферийным устройствам.

В моем университете нас учили проектированию и архитектуре аппаратного обеспечения наряду с языком ассемблера (очевидно, что они идут рука об руку) с архитектурой MIPS (или, возможно, DLX ). С тех пор я немного занимался сборкой PIC и AVR в школе/на работе, и все они очень похожи. Я думаю, что сборка MIPS была отличной отправной точкой, поскольку язык очень прост, как и архитектура процессора.

Смотрите также: эта книга . Не лучшая книга в мире, но стандартная книга по компьютерному дизайну для многих университетов.

Microchip PIC32 использует архитектуру MIPS, и довольно легко смешать ассемблер MIPS с C.

мое предложение: любой, кто собирается начать изучать микроконтроллеры и процессоры, должен прочитать книгу под названием «кодировать скрытый язык компьютера», если вы изучаете, что вы почти разбираетесь в процессорах, а для программирования avr лучше использовать программатор poney prog и программу от atmel studio6.1 с официального сайта atmel

Обозначьте, пожалуйста, ключевые особенности книги и программиста, что бы склонить ОП использовать именно их.
речь идет о понимании микроконтроллера, как он разрабатывается из цифровых систем, и объясняет язык ассемблера.
перейдите на этот сайт j.mp/mpcinterest, чтобы получить эту книгу