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


19

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

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

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

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

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


3
Ненавижу отправлять вас в другое место, но если вы заинтересованы в AVR, вам нужно знать о AVRfreaks.net .
Кевин Вермеер

Я склоняюсь к AVR ... в основном потому, что у них так много информации о них, и они ОЧЕНЬ дешевле, чем TI-MPS430 ...

2
AVR пользуется популярностью среди любителей, но я не уверен, где вы получаете данные о расходах. У обеих семей есть некоторые предложения, которые стоят менее 1 доллара США, а другие требуют 20 долларов США.
Кевин Вермеер

Ну, ..... когда я смотрел на MPS430, казалось, что программное обеспечение (отладчики и т. Д.) Было немного дороже при добавлении в платы разработки.

1
Мой совет: не выбирайте MSP430, если вы новичок. Официальные инструменты хороши, но бесплатная поддержка, которую вы найдете в Интернете, не соответствует PIC / AVR
Тоби Джаффей

Ответы:


14

Я учился на 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.


@Mark - ARM также являются процессорами RISC, набор инструкций не так уж и плох. Это на самом деле довольно красиво оформлено; Есть некоторые инструкции для дифференцирования пространства пользователя и пространства ядра и других сложностей, но их можно игнорировать, пока вы начинаете.
Кевин Вермеер

1
@reemrevnivek Я больше пытался отвлечь его от сложностей работы с несколькими режимами процессора и MMU, когда он начинал работать с ASM, поэтому я упомянул ARM более высокого уровня. Инициализация и настройка высокопроизводительных ARM SoC также существенно сложнее, чем AVR / PIC / MSP430.
Марка

RISC? я не уверен, что понимаю разницу между этим и остальными ... не хочешь объяснить? Разве большинство микроконтроллеров не являются RISC? это просто означает меньше правильных наборов команд?

1
@sauron Я добавил в свой ответ re: RISC vs CISC.
Mark

Такие вещи, как AVR / PICS, обычно RISC или CISC?

8

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

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

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


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

7

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


Сокращенное количество регистров, которое имеет S08 по сравнению с HC11, может немного усложнить задачу, так как вам нужно будет выяснить, как стек справляется со всем (что преподавалось позже в моей лаборатории с HC11 (или это было 12 - х)). Кроме того, AVR действительно хороши, потому что у вас есть 32 огромных регистра, с которыми можно поиграть, прежде чем беспокоиться о стеке.
Ник Т

На самом деле мне нравится простота одного аккумулятора, хотя это может быть узким местом. Вместо того, чтобы использовать стек для временных переменных, для начала я считаю более простым использование 144 байтов прямых переменных страницы, которые доступны с более короткими инструкциями (остальные 112 байтов прямой страницы используются для регистров ввода-вывода). Об использовании стека (который допускает повторяющиеся и рекурсивные процедуры) можно узнать позже.
Трокли

Разве HC (S) 08 не был получен из HC05?
Johan.A

@ Johan.A Да, вы абсолютно правы. HCS08 - это расширенная версия HC05. Я должен был упомянуть это. Я думаю, что вывод примерно 6800 -> 6801 -> 6805 -> HC (S) 08. Я написал много ассемблерного кода для 6805. Я сравнил HCS08 с 6809, чтобы связать его с другими комментариями относительно 68HC11 (это примерно версия микроконтроллера 6809).
tcrosley

4

Набор инструкций 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 документированы в Википедии, по крайней мере, в качестве справки, чтобы получить полную картину, получить таблицы / руководства от поставщиков, в которых будут описаны каждый регистр и режим адресации, сброс / загрузка и т. Д.


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

4

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


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

4

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


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

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

... Книга , мы использовали это , если вы заинтересованы. Я бы предложил использовать более современный контроллер, такой как AVR; их совет по развитию можно найти здесь .
sherrellbc

3

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


Привет, Ваутер, рад видеть тебя здесь!
Олин Латроп

2

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


1

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


Да, я знал это, я не знаю, почему я не положил это. Я имел в виду, что не многие руководства говорят о фактическом соединении MP и памяти (например, flash или eeprom) и т. Д.

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

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

1

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

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


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

0

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


Пожалуйста, опишите основные функции книги и программиста, которые склонят ОП к использованию именно их.
Vorac

речь идет о понимании микроконтроллера, как он разработан из цифровых систем и объясняет язык ассемблера
avinash

зайдите на этот сайт j.mp/mpcinterest, чтобы получить эту книгу
avinash
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.