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.
Réponses:
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.
la source
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.
la source
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 .
la source
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.
la source
Ê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).
la source
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.
la source
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.
la source
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.
la source
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).
la source
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.
la source
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
la source