Qu'est-ce qu'un bon microprocesseur de démarrage pour apprendre l'assemblage?

19

Je veux donc apprendre à assembler d'abord sur un MP, puis passer à C (car il semble que c'est ce que la plupart d'entre eux utilisent).

Je veux entrer dans la programmation intégrée, j'aime vraiment les trucs de bas niveau C (Kernels / Modules pour Linux est principalement ce que j'ai fait), mais j'aime l'idée de pouvoir programmer un niveau encore plus bas que cela (Microcontrôleurs / Microprocesseurs).

Je connais Arduino, et c'est génial et tout, mais je ne trouve pas beaucoup de ressources pour utiliser Assembly avec eux. Les AVR Atmel semblent être très populaires (et bon marché), mais en ce qui concerne la partie matérielle réelle (les brancher sur une planche à pain, etc.), je ne trouve pas beaucoup d'informations.

Toutes les suggestions / informations ou ressources que vous les gars / filles connaissez, faites-le moi savoir.

Edit: Une autre chose: Il semble que tous les livres sur le microprocesseur que je lis (généralement les AVR) parlent du microprocesseur lui-même et de sa programmation. Mais je n'ai pas encore vu de livre qui parle de l'installation de tous les composants vous-même (microprocesseur, mémoire, alimentation, etc.). Si je pouvais trouver quelque chose qui me guide, je serais en affaires. (Je veux apprendre de la base.) Sans oublier que je n'ai aucune idée de la façon dont vous communiqueriez entre eux.

ctype.h
la source
3
Je déteste vous envoyer ailleurs, mais si vous êtes intéressé par les AVR, vous devez connaître AVRfreaks.net .
Kevin Vermeer
Ya Im penché vers AVR ... principalement parce que le leur tellement d'informations à leur sujet, et ils sont beaucoup moins chers que le TI-MPS430 ...
2
AVR est populaire auprès des amateurs, mais je ne sais pas où vous obtenez vos données de coût. Les deux familles ont des offres inférieures à 1 USD et d'autres à 20 USD.
Kevin Vermeer
Eh bien ... quand je regardais le MPS430, il semblait que le logiciel (débogueurs, etc.) était un peu cher lorsqu'il était ajouté aux cartes de développement.
1
Mon conseil est de ne pas choisir MSP430 si vous êtes débutant. Les outils officiels sont bons, mais le support gratuit que vous trouverez en ligne ne correspond pas à PIC / AVR
Toby Jaffey

Réponses:

14

J'ai appris sur un 68HC11 au collège. Ils sont très simples à utiliser, mais honnêtement, la plupart des microcontrôleurs de faible puissance seront similaires (AVR, 8051, PIC, MSP430). La plus grande chose qui ajoutera de la complexité à la programmation ASM pour les microcontrôleurs est le nombre et le type de modes d'adressage de mémoire pris en charge . Vous devez d'abord éviter les appareils plus compliqués, tels que les processeurs ARM haut de gamme.

Je recommanderais probablement le MSP430 comme bon point de départ. Peut-être écrire un programme en C et apprendre en remplaçant diverses fonctions par un assemblage en ligne. Commencez simplement, x + y = z, etc.

Après avoir remplacé une fonction ou un algorithme par l'assembly, comparez et contrastez la façon dont vous l'avez codée et ce que le compilateur C a généré. C'est probablement l'une des meilleures façons d'apprendre l'assemblage à mon avis et en même temps d'apprendre comment fonctionne un compilateur qui est incroyablement précieux en tant que programmeur intégré. Assurez-vous simplement de désactiver les optimisations dans le compilateur C au début ou vous serez probablement très confus par le code généré par le compilateur. Activez progressivement les optimisations et notez ce que fait le compilateur.

RISC vs CISC

RISC signifie `` calcul d'instruction réduite '', il ne fait pas référence à un ensemble d'instructions particulier, mais simplement à une stratégie de conception qui dit que le processeur a un jeu d'instructions minimal. Peu d'instructions qui font chacune quelque chose de basique. Il n'y a pas de définition strictement technique de ce qu'il faut pour «être RISC». D'un autre côté, les architectures CISC contiennent de nombreuses instructions, mais chacune en fait plus.

Les avantages escomptés de RISC sont que la conception de votre CPU nécessite moins de transistors, ce qui signifie moins d'énergie (grosse pour les microcontrôleurs), moins cher à fabriquer et des fréquences d'horloge plus élevées conduisant à de meilleures performances. Une consommation d'énergie plus faible et une fabrication moins chère sont généralement vraies, de meilleures performances n'ont pas vraiment atteint l'objectif en raison des améliorations de conception des architectures CISC.

Aujourd'hui, presque tous les cœurs de processeur sont des modèles RISC ou «intermédiaires». Même avec l'architecture CISC la plus célèbre (ou infâme), x86. Les processeurs x86 modernes sont des cœurs de type RISC en interne avec un décodeur boulonné à l'avant qui décompose les instructions x86 en plusieurs instructions de type RISC. Je pense qu'Intel appelle ces «micro-opérations».

Quant à savoir (RISC vs CISC) est plus facile à apprendre en assemblage, je pense que c'est un tirage au sort. Faire quelque chose avec un jeu d'instructions RISC nécessite généralement plus de lignes d'assemblage que faire la même chose avec un jeu d'instructions CISC. En revanche, les jeux d'instructions du CISC sont plus compliqués à apprendre en raison du plus grand nombre d'instructions disponibles.

La plupart des raisons pour lesquelles CISC obtient une mauvaise réputation est que x86 est de loin l'exemple le plus courant et est un peu compliqué à utiliser. Je pense que c'est principalement dû au fait que le jeu d'instructions x86 est très ancien et a été étendu une demi-douzaine de fois ou plus tout en maintenant la compatibilité descendante. Même votre Core i7 4.5Ghz peut fonctionner en mode 286 (et le fait au démarrage).

Quant à ARM étant une architecture RISC, je considérerais cela comme modérément discutable. C'est certainement une architecture de magasin de charge. Le jeu d'instructions de base est similaire à RISC, mais dans les révisions récentes, le jeu d'instructions a augmenté un peu au point où je le considérerais personnellement plus comme un compromis entre RISC et CISC. Le jeu d'instructions du pouce est vraiment le plus «risqué» des jeux d'instructions ARM.

marque
la source
@Mark - Les ARM sont également des processeurs RISC, le jeu d'instructions n'est pas si mal. Il est en fait assez bien conçu; il existe des instructions pour la différenciation de l'espace utilisateur par rapport à l'espace noyau et d'autres complexités, mais celles-ci peuvent être ignorées lorsque vous commencez.
Kevin Vermeer
1
@reemrevnivek J'essayais davantage de l'éloigner de la complexité de traiter avec plusieurs modes de processeur et MMU quand il a commencé dans ASM, c'est pourquoi j'ai mentionné les ARM haut de gamme. L'initialisation et la configuration des SoC ARM haut de gamme sont également beaucoup plus complexes que quelque chose comme un AVR / PIC / MSP430.
Mark
RISC? Je ne suis pas sûr de comprendre la différence entre cela et ce que les autres sont ... attention à expliquer? La plupart des microcontrôleurs ne sont-ils pas RISC? cela signifie juste moins de jeux d'instructions corrects?
1
@sauron J'ai ajouté à ma réponse re: RISC vs CISC.
Mark
Les trucs comme AVR / PICS sont-ils généralement RISC ou CISC?
8

Je pense que les microcontrôleurs PIC 8 bits sont le meilleur choix en raison du nombre réduit d'instructions.

L'effet secondaire du nombre réduit d'instructions est que vous devez réinventer la roue par rapport aux autres microcontrôleurs avec plus d'instructions.

Mais après avoir appris avec PIC, vous pouvez migrer vers d'autres microcontrôleurs et voir ce qui vous convient le mieux.

Daniel Grillo
la source
Je ne serais pas totalement en désaccord car c'est ce que j'explore maintenant, mais les cœurs 8, 16 et 32 ​​bits ont des stratégies asm totalement différentes.
Grady Player
7

Semblable à la suggestion de Mark concernant le 68HC11, le jeu d'instructions de la famille Freescale 68HCS08 est une version allégée du Motorola 6809, qui, à mon avis, possédait l'un des jeux d'instructions 8 bits les plus propres de son époque. Vous pouvez obtenir une carte de développement avec des commutateurs, des LED, un accéléromètre à 3 axes et un buzzer piézo pour 79 $ ici .

tcrosley
la source
Le nombre réduit de registres du S08 par rapport au HC11 peut rendre les choses un peu plus difficiles à l'avance, car vous devrez comprendre la pile à faire pour beaucoup de choses (ce qui a été enseigné plus tard dans mon laboratoire avec les HC11 (ou était-ce 12)). Par extension, les AVR sont vraiment sympas car vous avez un énorme 32 registres à jouer avant de vous soucier de la pile.
Nick T
En fait, j'aime la simplicité de l'accumulateur unique, même si cela peut être un goulot d'étranglement. Au lieu d'utiliser la pile pour les variables temporaires, pour commencer, je trouve plus simple d'utiliser les 144 octets de variables de page directe qui sont accessibles avec des instructions plus courtes (les 112 autres octets de page directe sont utilisés pour les registres d'E / S). L'utilisation de la pile (qui permet des routines rentrantes et récursives) peut être apprise plus tard.
tcrosley
Le HC (S) 08 n'était-il pas dérivé du HC05?
Johan.A
@ Johan.A Oui, vous avez absolument raison. Le HCS08 est une version améliorée du HC05. J'aurais dû le mentionner. Je pense que la dérivation est quelque chose comme 6800 -> 6801 -> 6805 -> HC (S) 08. J'ai écrit beaucoup de code d'assemblage pour le 6805. J'ai comparé le HCS08 au 6809 pour le relier aux autres commentaires sur le 68HC11 (qui est à peu près une version à microcontrôleur du 6809).
tcrosley
4

Le jeu d'instructions msp430 est un bon outil pour apprendre à assembler. Évitez x86. Le bras est un autre bon mais a beaucoup plus d'instructions et d'options et peut ne pas être le mieux adapté comme premier jeu d'instructions. Le pouce est un sous-ensemble du jeu d'instructions de bras et pas mal, sur github j'ai à la fois un émulateur de pouce (thumbulator) et un émulateur msp430 (non testé autant que le pouce) qui sont des barebones, juste le processeur et la mémoire et peu plus , afin que vous puissiez avoir une bonne visibilité sur ce qui se passe. Une alternative serait qemu par exemple où la visibilité est là mais beaucoup plus difficile à atteindre, de même avec une solution de type qemu, il faut beaucoup plus de travail avant de savoir si vous avez quelque chose qui fonctionne.
allez à mspgcc4.sf.net pour construire une chaîne d'outils et / ou un binutils de stock (./configure --target = msp430 --prefix = / quelque chose) en combinaison avec un stock llvm. Une fois que vous êtes prêt pour le matériel, une carte de développement msp430 coûte moins de 5 dollars. Pour les outils bras / pouce, obtenez simplement la version lite de codesourcery. Une planche cortex-m3 (pouce / pouce2) coûte environ 12 dollars en ce moment. J'éviterais x86 et avr et d'autres comme premier jeu d'instructions, vous voudrez apprendre aux autres à être bien arrondis. Le jeu d'instructions photo ancien / original vaut également la peine d'être examiné. Vous pourriez écrire un simulateur vous-même dans un après-midi et apprendre l'assembleur. Je ne l'apprendrais pas nécessairement d'abord, il enseigne des choses intéressantes, mais en même temps, il n'est pas évolutif et n'est pas nécessairement représentatif des caractéristiques communes que vous trouvez dans la plupart des ensembles d'instructions. Le msp430 m'a donné la sensation du pdp11 qui est le premier jeu d'instructions que j'ai vraiment appris, les deux ont des caractéristiques bien arrondies, principalement orthogonales. Les ensembles d'instructions msp430 et microchip pic sont documentés sur wikipedia, au moins à titre de référence, pour obtenir l'image complète obtenir les fiches techniques / manuels des fournisseurs qui décriront chaque registre et mode d'adressage, réinitialisation / démarrage, etc.

old_timer
la source
pour l'assembleur uniquement, vous n'avez besoin que de binutils, au moins pour le bras / le pouce ou le msp430, et vous pouvez créer l'assembleur et l'éditeur de liens. Si vous voulez un compilateur C à partir duquel vous pouvez examiner la sortie de l'assembleur comme outil d'apprentissage, vous avez besoin de mspgcc4 ou de codesourcery ou utilisez simplement llvm pour les deux.
old_timer
4

Êtes-vous sûr de vouloir apprendre l'assemblage? Peux-tu dire pourquoi? C'est tout à fait une tâche, et est de moins en moins relavent ou utile maintenant quelques jours. Cela vient d'une personne qui y a écrit et même des programmes assemblés à la main (pas d'assembleur, de lieur, juste une carte avec le jeu d'instructions).

russ_hensel
la source
Ce n'est pas vraiment une réponse, autant qu'un commentaire. J'hésiterais également à faire confiance à un programmeur C intégré qui n'était pas disposé à se faufiler de temps en temps dans des morceaux d'assemblage en essayant de comprendre une bizarrerie dans le comportement d'un projet.
Chris Stratton
4

Moi aussi, j'ai appris sur un 68HC11 au collège. Au lieu de cela, ils suggèrent cela par rapport à tout autre MPU / MCU, je voulais juste souligner que la carte de développement que nous avons utilisée avait un programme de surveillance. Donc, à partir d'un terminal stupide, nous pourrions parcourir le code et examiner les registres ... Je suggère que lorsque vous savez quel processeur correspond à vos besoins, vous vérifiez également quelles cartes de développement sont disponibles avec un programme de surveillance.

mvr
la source
Le programme du moniteur semble être très utile. Quel livre as-tu utilisé pour apprendre cela? si cela vous dérange de demander ...
Moi aussi, j'avais de l'expérience avec le 68HC11 et le "Monitoring Program" est connu sous le nom de Buffalo Monitor . Fondamentalement, il s'agit simplement d'un programme stocké dans la ROM qui communique en série avec votre PC. Vous tapez dans un terminal et le programme interprète vos demandes et vous donne des informations. Vous pouvez vider la mémoire sur l'écran, modifier les valeurs de la mémoire, parcourir les instructions, etc. La carte que nous avons utilisée était celle- ci. Ce contrôleur est simple à apprendre mais est très daté.
sherrellbc
... Le livre que nous avons utilisé était celui-ci si vous êtes intéressé. Je suggère d'aller avec un contrôleur plus moderne comme AVR; leur conseil de développement peut être trouvé ici .
sherrellbc
3

J'enseigne à la fois PIC (noyau 14 bits) et assemblage ARM. La classe PIC Je dis qu'une fois qu'ils ont maîtrisé la laideur de cette architecture, ils peuvent prendre n'importe quoi d'autre. L'ARM (pas le Thumb / Cortex!) Est une très belle architecture pour apprendre l'assemblage. Nous utilisons une carte LPC2148.

Wouter van Ooijen
la source
Salut Wouter, c'est bon de te voir ici!
Olin Lathrop
2

J'ai appris l'assemblage PIC 16 bits avec un dsPIC33F. L'assemblage du processeur est assez similaire à C, en ce qu'il prend en charge les pointeurs et trois opérations variables (A = B + C, par exemple), ce qui rend l'apprentissage et l'adaptation beaucoup plus faciles.

Thomas O
la source
1

Vous confondez microcontrôleurs et microprocesseurs ici. AVR est une gamme de microcontrôleurs d'Atmel, pas un microprocesseur. Je vous suggère de rechercher d'abord sur wikipedia pour mieux comprendre quelles sont les différences entre celles-ci. Fondamentalement, un microcontrôleur est un système plus ou moins complet, tandis qu'un microprocesseur n'est que le processeur (par conséquent, un microcontrôleur a un microprocesseur à l'intérieur).

Erik
la source
Ouais je le savais, je ne sais pas pourquoi je n'ai pas mis ça. Je voulais dire que peu de guides parlent de la connexion d'un MP et d'une mémoire (comme un flash ou un eeprom), etc.
1
Étant donné que la plupart des microprocesseurs disposent désormais de cache / mémoire et de certaines E / S, c'est une ligne très floue.
kenny
1
@Sauron - Tu es sûr que tu le savais? Vous avez de nouveau utilisé MP; un microcontrôleur (qui est le terme correct pour un AVR et 99% des appareils dont nous discutons ici) a presque toujours de la mémoire (à la fois non volatile, comme EEPROM et Flash, et SRAM volatile) à bord. Apprenez à utiliser les éléments embarqués avant de commencer à vous aventurer dans les périphériques.
Kevin Vermeer
1

Dans mon université, on nous a enseigné la conception / architecture de matériel aux côtés du langage d'assemblage (les deux vont de pair, évidemment) avec le MIPS (ou peut-être architecture DLX ). Depuis lors, j'ai essayé un peu l'assemblage PIC et AVR à l'école / au travail, et ils sont tous assez similaires. Je pense que l'assemblage MIPS était un excellent point de départ, car le langage est très simple, tout comme l'architecture du processeur.

Voir aussi: ce livre . Ce n'est pas le meilleur livre au monde, mais c'est le livre de conception informatique standard pour de nombreuses universités.

Shamtam
la source
Le Microchip PIC32 utilise l'architecture MIPS et il est assez facile de mélanger l'assembleur MIPS avec C.
tcrosley
0

ma suggestion est que quiconque va commencer à étudier les microcontrôleurs et les processeurs devrait lire le livre nommant "coder le langage caché de l'ordinateur" si vous étudiez que vous êtes presque expert en processeurs et pour la programmation avr, utilisez mieux le programmeur et le programme poney prog atmel studio6.1 du site officiel atmel

avinash
la source
Veuillez décrire les principales caractéristiques du livre et du programmeur, qui inclineraient l'OP à les utiliser exactement.
Vorac
il s'agit de comprendre un microcontrôleur comment il est développé à partir de systèmes numériques et explique le langage d'assemblage
avinash
allez sur ce site j.mp/mpcinterest pour obtenir ce livre
avinash