IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Conseils pour partir à la découverte de l'assembleur


Sujet :

Assembleur

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Points : 10
    Points
    10
    Par défaut Conseils pour partir à la découverte de l'assembleur
    Bonjour/Bonsoir,

    Une petite présentation du personnage s’impose !

    Je ne me présente absolument pas par ego ou alors par volonté de parler de moi (ce que je déteste faire au passage) mais car j’estime que c’est important pour la suite du sujet. Cette petite présentation, vous aidera à quelque peu mieux comprendre le problème (et cela m’a servi de fil rouge également).


    Jeune de 14 ans, passionné par tout ce qui l’entoure, autodidaxie lui ayant permis une (petite) maîtrise du C++ (si je devais situer mon niveau, une assez bonne connaissance des bibliothèques standard, les notions d’Objets, Héritage, Polymorphisme et de Design Pattern, rien de folichon) et d’un grand nombre de choses en rapport avec l’informatique théorique (connaissances assez limitées mais non négligeables pour mon âge). Sans oublier de brèves notions en Mathématiques (bien moins concrètes que celle pour l’informatique mais encore une fois non négligeables pour mon âge).

    Je vous donne mon âge pour que vous ayez un indicateur, mais s'il vous plaît ne faites pas tourner la discussion autour de mon âge. Je vous en serais reconnaissant !


    Bon maintenant que "je me suis un peu introduit" je pense que l'on peut rentrer dans le vif du sujet !

    Je me remets à vous pour obtenir des informations, plus précisément une sorte de corpus. J'imagine que grâce au titre de la discussion vous aurez compris à quoi je fais référence ! Oui, oui, c'est bel et bien l'ASM. A vrai dire je ne cherche pas des informations sur l'ASM directement (plutôt indirectement). "Le sujet" (je suis conscient que c'est assez vaste) sur lequel je cherche des informations est en quelque sorte les prérequis pour l'ASM. Qu'est ce que j'entends par "prérequis" ? En premier lieu je parle d'informations (PDF, tutoriels, livres[...]) sur les fonctionnements internes des ordinateurs, mais également sur la logique (booléenne, mathématique en général). Et d'ailleurs si vous pensez que d'autres choses peuvent s'avérer intéressantes, je suis preneur ! Je cherche donc à posséder des bases extrêmement solides ! (Une fois la maîtrise de tout cela j'irai voir les documentations de façon assez intensive et voilà ^^'. Et (j'imagine) que je passerai beaucoup de temps sur les articles/tutoriels de developpez.net.)

    J'ai déjà quelque peu cherché, mais je ne sais pas réellement ce qui est vraiment bon et sur quoi je peux m'appuyer pour mon apprentissage !

    Remarque : J’ai actuellement 14 ans, donc niveau troisième, ce qui signifie que même le niveau lycée en mathématiques je ne l’ai pas (encore :-° ). Ce qui implique que je dois vraiment commencer par la base de la base. Je souhaite avoir des compétences solides surtout ^^ . Donc oui, on peut dire que je pars de zéro.

    Remarque 2 : Vous vous demandez sans doute pourquoi l'ASM ? "C'est simple" ! Ce langage m'attire beaucoup et je trouve somptueuses toutes les sources que j'ai eu l'occasion de voir. Mais surtout avoir un "contrôle total" sur sa machine me semble très intéressant (enfin réellement comprendre ce qu'il se passe plutôt) !

    Si vous avez la moindre question, je suis tout ouïe !

    Cordialement,
    Garnier Mathias

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 446
    Points : 43 090
    Points
    43 090
    Par défaut
    Bonjour,

    Je commencerais par t'indiquer que l'assembleur n'est plus beaucoup utilisé, mis à part peut être dans le monde de l'embarqué, et encore.

    En mathématique, pour l'assembleur proprement dit, tu n'auras besoin que de l’algèbre de Boole, avec en pré-requis savoir convertir un nombre entre les bases 2, 10, et 16.

    Tu as besoin de cours sur l'architecture d'un ordinateur. Des cours d’électronique, de logique combinatoire et séquentielle seront un plus pour bien comprendre mais pas forcément indispensables.
    Une connaissance des API d'un OS sera également utile.

    https://asm.developpez.com/cours/

    Jette aussi un oeil sur les forums Arduino et Raspberry.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Ta présentation est bien faite et bien écrite (moi à 14 ans j'aurais pas fait mieux ).

    Effectivement je te conseille de suivre les conseils de chrtophe.
    Je rajouterai que malheureusement la question qui peut te sembler basique (apprendre l'assembleur) n'est pas simple a répondre.
    Il y a souvent des personnes qui posent cette question, par exemple ici : https://www.developpez.net/forums/d1...e-l-assembleur (et si tu lis tout cela pourrait te servir).

    En gros, il est très complexe de commencer la programmation en assembleur sur un PC moderne (machine complexe et un intel x86-64 bits).
    Je conseillerais Arduino, mais pas Raspberry si on veut faire de l'asm (dans ton cas, comprendre comment fonctionne une machine) ; un Raspberry sans OS c'est vraiment pas simple aussi.
    En fait on se retrouve avec des machines très complexes qui deviennent de moins en moins abordables par un novice.

    Le souci c'est que si tu fais de l'asm sous un OS, certes cela peut être intéressant mais l'OS ne te laissera jamais utiliser le matériel ; si tu veux faire un truc plus évolué il faudra passer par lui.
    Je dirais même que pour un débutant cela peut être trompeur sur le fonctionnement 'réel' de l'asm, dans le sens où je remarque que pour les débutants "var: .db 5" par exemple semble être une déclaration de variable, alors normal d'avoir cette impression vu ce qu'elle devient vu que l'OS mettra ton code et tes data en RAM, mais voilà "var: .db 5" ne fait absolument rien à part mettre la valeur 5 dans ton binaire.

    Je rajouterai que, comme dit chrtophe, si l'asm est moins utilisé, c'est parce que les machines sont assez puissantes et donc on peut se passer a 99% de l'asm (on peut très bien faire du bas niveau en C).
    Donc tu peux très bien comprendre le fonctionnement de ta machine en faisant du C uniquement.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Points : 10
    Points
    10
    Par défaut
    Bonjour/Bonsoir,

    Je commencerais par t'indiquer que l'assembleur n'est plus beaucoup utilisé, mis à part peut être dans le monde de l'embarqué, et encore.
    En soi le fait que ce langage ne soit pas très (si ce n'est quasiment pas du tout) utilisé ne me gêne pas du tout ^^'. C'est un langage qui m'intéresse énormément, et de plus à côté je vais continuer le C++ et du coup pour quoi ne pas interfacer le C++ et l'ASM ?

    En mathématique, pour l'assembleur proprement dit, tu n'auras besoin que de l’algèbre de Boole, avec en pré-requis savoir convertir un nombre entre les bases 2,10, et 16.
    Je pense déjà me débrouiller un minimum avec l'algèbre de Boole, mais je vais essayer de pousser les notions que j'ai déjà à l’extrême pour tenter de devenir quasiment incollable sur la logique booléenne. Ensuite pour les bases(binaire, décimale et hexadécimale) j'ai déjà pu y toucher pas mal (grâce à des projets en C++ par exemple), je vais m'y intéresser de plus près pour voir si il n'y aurait pas certaines choses que j'ai pu oublier. En revanche quand vous dites "savoir convertir", vous voulez dire de tête ? Pour les petits nombres (inférieur à 64 ou 32) je pense que ça doit se faire ~assez facilement, mais après...

    Tu as besoin de cours sur l'architecture d'un ordinateur. Des cours d’électronique, de logique combinatoire et séquentielle seront un plus pour bien comprendre mais pas forcément indispensable.
    Une connaissance des API d'un OS sera également utile.
    Je vais regarder tout cela, merci ! Pour l'électronique est ce que des chaînes comme celle de Ben Eater pourraient être intéressants ? De ce que j'ai pu comprendre c'est vraiment bien fait ! En plus de ça je pense me tourner sur des PDF ou alors livres, et pourquoi pas aller voir mon prof de techno pour avoir un mini corpus ^^'.
    Ha aussi, pour la logique combinatoire et séquentielle, même si ce sont des notions surtout pour la ~"culture G", je trouve quand même cela très important ! Et le problème vient du fait que pour pouvoir (réellement) comprendre ce genre de notions il m'a vraiment l'air de falloir des prérequis. Je ne pense vraiment pas pouvoir attaquer et comprendre ces notions avec les connaissances que j'ai ! (Quoique x) Quelqu'un m'a fait part de la notion de coefficient binomial et binôme de Newton, cette introduction a duré deux heures mais j'ai quand même bien compris ^^'. Pour au final aboutir à cela :https://github.com/MathiasGarnier/Te...omialCoeff.cpp).

    Ta présentation est bien faite et bien écrite (moi à 14 ans j'aurais pas fait mieux ).
    Merci bien ^^' ! Je l'ai quand même pas mal travaillé.

    Je suis allé faire un petit tour sur le lien que vous m'avez donné et je vais regarder ça de plus près ^^' ! (Le message de Obsidian a l'air vraiment (vraiment) très complet !)

    En gros il est très complexe de commencer la programmation en assembleur sur un PC moderne ( machine complexe et un intel x86-64 bits).
    Je conseillerai Arduino , mais pas Rasberry si on veut faire de l'asm (donc ton son cas comprendre comment fonctionne une machine) un Rasberry sans OS c'est vraiment pas simple aussi.
    En faite en se retrouve avec des machines très complexe qui devient de moins en moins abordable par un novice.
    Pensez vous que ce serait intéressant d'acheter une vieille machine ? Et si oui laquelle ? Si on allégorise c'est un peu la même chose pour une personne voulant devenir "Kernel Hacker" mais en commençant par étudier le kernel de Linux actuel alors qu'il serait vraiment préférable de commencer par la toute première version du kernel de Linux.
    J'ai déjà eu l'occasion de faire de l'Arduino (scolairement par contre ), mais dans le cas où je me tourne vers l'Arduino ça vaut toujours le coup de me tourner (en plus) sur une vieille machine ? Car l'idée de la vieille machine me paraît plus intéressante et plus enrichissante ^^'.

    Le souci c'est que si tu fais de l'asm sous un OS , certes cela peut être intéressant mais l'OS ne te laissera jamais utiliser le matériel , si tu veux faire un truc plus évolué il faudra passer par lui.
    Je dirai même que pour un débutant cela peut être trompeur sur le fonctionnement 'réel' de l'asm , dans le sens ou je remarque que pour les débutant " var: .db 5" par exemple semble être une déclaration de variable , alors normal t'avoir cette impression vu c'est ce qu'elle devient vu que l'OS mettra ton code et tes data en RAM , mais voila " var: .db 5" ne fait absolument rien a part mettre la valeur 5 dans ton binaire.
    Ha je vois ce que vous voulez dire. J’essaierai de penser à ça et ne pas faire cette faute(en général) ^^'.

    Vraiment merci à vous deux !

    Cordialement,
    Garnier Mathias

  5. #5
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    14 ans ? Comme moi !... avec les deux chiffres inversés

    Bonsoir,

    pour la conversion binaire/decimal/hexa, je ne suis pas sûr qu'il soit utile de savoir le faire de tête, perso je m'arrête aux valeurs 16 bits, après c'est ma vieille HP28 ou 48
    Par contre, il est important d'avoir le réflexe de travailler sur la logique binaire comme les masques avec OR/AND/XOR et les décalages de bits.

    L'achat d'une vieillerie n'est pas utile, un petit DosBox fonctionne très bien, garde tes sous pour d'autres achats.

    Mais faire de l'assembleur PC ne présente que peu d’intérêt aujourd'hui. Petite liste des trucs chiants à faire en ASM sur une machine de type PC :

    • faire du son : ça dépend de la carte son, et la doc et super chiante à trouver (voire impossible) ;
    • faire de l'affichage : ça dépend de la carte graphique et... c'est un peu comme pour la carte son (sauf si tu restes sur le standard VESA).

    Si je devais me lancer dans l'asm aujourd'hui, je pense que je ferais comme Kannagi : de la programmation sur consoles rétro.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 446
    Points : 43 090
    Points
    43 090
    Par défaut
    L'idée de commencer par des vieilles consoles avec les CPU 8 bits, c'est pas mal pour débuter.

    pour quoi ne pas interfacer le C++ et l'ASM ?
    Ça se fait dans des cas très précis, exemple accès à des commandes/registres du CPU impossible autrement.

    Je pense déjà me débrouiller un minimum avec l'algèbre de Boole, mais je vais essayer de pousser les notions que j'ai déjà à l’extrême pour tenter de devenir quasiment incollable sur la logique booléenne
    Pas forcément utile, tu vas passer beaucoup de temps pour pas grand-chose, sauf si tu comptes faire de l'informatique embarquée.

    Ha aussi, pour la logique combinatoire et séquentielle, même si ce sont des notions surtout pour la ~"culture G", je trouve quand même cela très important ! Et le problème vient du fait que pour pouvoir (réellement) comprendre ce genre de notions il m'a vraiment l'air de falloir des prérequis
    Je me suis trouvé à en faire par mon cursus, j'avais une bonne culture informatique mais aucun prérequis, mes camarades eux venaient d'électrotechnique, pas moi. Pour de l'assembleur pur sur PC, sans montage électronique à faire, ça a peu d’intérêt. A l'époque, on n' avait pas de RaspBerry ni dArduino, ça permettait de faire des montages à base de microcontrôleur, maintenant, j'investirais plus sur le C.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Je suis content que la plupart des habitués de ce forum rejoignent mon idée, faire de la console rétro est une bonne porte d'entrée.

    Je dis souvent que la Nes ou la Master System sont des machines faciles à apprendre et à connaître pour deux raisons :

    1. leur assembleur est facile à connaître de bout en bout, que cela soit le 6502 (Nes) ou la Master System (z80) ; il est tout à fait possible de les connaître "par coeur" au bout d'un mois de pratique.
    2. ce sont des 'petites' consoles, dans le sens où leurs I/O (entrées/sorties) sont très restreintes. La Nes possède comme I/O 8 (bytes) pour l'affichage, 21 (bytes) pour le son et 2 (bytes) pour le joypad.

    Et donc connaître ces deux choses suffit pour connaître l'asm et le fonctionnement d'une machine. Si tu as lu le post que je t'ai passé, les anciennes machines fonctionnent comme les récentes, sauf qu'il est très peu probable de connaître le x86-64 de bout en bout, et les I/O sont largement plus nombreuse et plus complexes sur un PC (et sans doc très complexe d'utiliser le matériel).

    Pour tester un simple émulateur Nes peut suffire.
    (Après tu peux acheter du matos pour tester sur une vraie console), je ne possède pas de linker pour la Nes (mais pour la Master System oui).

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Points : 10
    Points
    10
    Par défaut
    Bonjour/Bonsoir,

    pour la conversion binaire/décimal/hexa, je je ne suis pas sûr qu'il soit utile de savoir le faire de tête, perso je m'arrête aux valeurs 16 bits,après c'est ma vieille HP28 ou 48
    Par contre il est important d'avoir le réflexe de travailler sur la logique binaire comme les masques avec OR/AND/XOR et les décalages de bits
    Hum d'accord, je vois ^^'.
    J'ai de petites connaissances en logique binaire, mais je sens vraiment que je vais devoir beaucoup travailler !

    L'achat d'une vieillerie n'est pas utile, un petit DosBox fonctionne très bien, garde tes sous pour t'acheter du shit
    C'est pas mon genre ça ! Pas du tout... (En vrai oui, pas du tout )
    J'ai récemment entendu parler de DosBox et j'ai trouvé les sources sur Github, je pense que j'vais y faire un petit tour pour vous à quoi ça ressemble ^^'.

    Mais faire de l'assembleur PC ne présente que peu d’intérêt aujourd'hui. petite liste des trucs chiants à faire en ASM sur une machine de type PC :
    - faire du son : ça dépend de la carte son, et la doc et super chiante à trouver (voire impossible)
    - faire de l'affichage : ça dépend de la carte graphique et ... c'est un peu comme pour la carte son (sauf si tu restes sur le standard VESA)

    Si je devais me lancer dans l'asm aujourd'hui, je pense que je ferai comme Kannagi : de la programmation sur consoles rétro.
    Haaa , je pensais que faire de l'assembleur présenter plus d’intérêt que faire du son ou de l'affichage :/ J'imagine bien que l'on peut faire d'autres choses, mais ce serait réinventer la roue j'imagine ?
    Pourquoi pas voir de ce côté dans ce cas là(programmation sur consoles rétro), ça peut être vraiment intéressant !

    Pas forcément utile, tu vas passer beaucoup de temps pour pas grand-chose, sauf si tu comptes faire de l'informatique embarquée.
    Ça m'intéresse pas mal l'informatique embarquée, même si j'ai quelques préférences pour l'intelligence artificielle ou même la cryptographie. Le problème c'est qu'à mon niveaux, je ne peux pas tellement en faire que ce soit pour cause de manque de matériel ou de connaissances(mais ça s'apprend ! ).

    Je me suis trouvé à en faire par mon cursus, j'avais une bonne culture informatique mais aucun prérequis, mes camarades eux venaient d'électrotechnique, pas moi. Pour de l'assembleur pur sur PC, sans montage électronique à faire, ça a peu d’intérêt. A l'époque, on n' avait pas de RaspBerry ni dArduino, ça permettait de faire des montages à base de microcontrôleur, maintenant, j'investirais plus sur le C.
    Haaa je vois !
    J'ai déjà eu l'occasion de faire un peu de C, mais j'ai quand même une nette préférence pour le C++. Donc, No ce, no ce.

    @Kannagi, j'ai bien lu ton message et je vais vraiment regarder de plus près cette option, cela me parait entièrement envisageable ! J'imagine que beaucoup d'articles portent sur ce sujet sur Internet(pour les débutants) ? Mais si je pars dans cette voie, je pense plutôt me pencher vers la Master System(z80) ^^'.

    Encore une fois je ne peux que vous remercier pour vos réponses !

    Cordialement,
    Garnier Mathias.

  9. #9
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut à tout le groupe,
    Je rejoints tous les avis qui ont été donné car c'est dans cette ordre que j'ai commencé.

    Je vais citer beaucoup de messages pour apporter mon point de vu :

    Citation Envoyé par Yapix Voir le message
    "Le sujet"(je suis conscient que c'est assez vaste) sur lequel je cherche des informations est en quelque sorte les prérequis pour l'ASM. Qu'est ce que j'entends par "prérequis" ?
    Je t'encourage à aller jusqu'au bout des choses et peu importe mes réponses ci après. Le langage assembleur est très utile pour maîtriser une architecture, le problème c'est que une fois l’architecture prise en main tu te rends compte que l'intérêt du langage disparaît.

    Citation Envoyé par chrtophe et Forthman
    Je commencerais par t'indiquer que l'assembleur n'est plus beaucoup utilisé, mis à part peut être dans le monde de l'embarqué, et encore.
    ais faire de l'assembleur PC ne présente que peu d’intérêt aujourd'hui. petite liste des trucs chiants à faire en ASM sur une machine de type PC
    Je suis d'accord et apprendre un langage tout en se rendant compte qu'il ne présente plus grand intérêt, sauf cas très particuliers, peut rendre d'un coup son apprentissage moins motivant qu'au départ.
    Concernant le domaine de l'embarqué, c'est exacte, le langage assembleur n'est pas vraiment utilisé sauf comme dit avant pour des cas très particuliers mais qui peuvent être résolus autrement. Par exemple, il y a 20 ans les micro n'étaient pas très rapides et l'assembleur permettait de connaître très précisément la durée d'une instruction. Tu pouvais contrôler le timing de ton programme pour répondre aux spécifications du hard. Tu peux faire une tempo en langage assembleur si tu connais la durée du jeu d'instruction. Aujourd'hui, si l'aspect timing est important, tu choisis un micro qui tourne plus vite tout simplement. Concernant l'aspect maîtrise des choses, un langage comme C ou C++ permet d'avoir exactement le même niveau de contrôle.

    Il y a peut être sur un DSP que je programmerai peut être en ASM et encore !?

    Citation Envoyé par chrtophe Voir le message
    Tu as besoin de cours sur l'architecture d'un ordinateur.
    Je partage à 100% c'est une obligation et concernant l'électronique disons que c'est facilitant surtout à la marge ou en périphérie.

    Citation Envoyé par Kannagi Voir le message
    En gros il est très complexe de commencer la programmation en assembleur sur un PC moderne ( machine complexe et un intel x86-64 bits).
    Oh que oui....Autant apprendre l'architecture interne d'un microcontrôleur est relativement simple mais apprendre l'architecture d'un processeur c'est une tout autre affaire. Rien que le nombre de pages des docs constructeurs respectives en dit long, a titre d'exemple la doc du processeur SITARA AM355x qui équipe la carte Beagle Bone Black (un concurrent du Raspberry) fait 5000 pages contre 440 pages pour le microcontrôleur ATMEGA328P qui équipe le Arduino UNO. C'est comme tenter de maîtriser les notions d'aires en math mais en commençant par s'attaquer aux intégrales

    Nom : product_detail_black_sm.jpg
Affichages : 1104
Taille : 39,1 Ko
    BeagleBone Black

    Citation Envoyé par Kannagi Voir le message
    Le souci c'est que si tu fais de l'asm sous un OS , certes cela peut être intéressant mais l'OS ne te laissera jamais utiliser le matériel , si tu veux faire un truc plus évolué il faudra passer par lui.
    Exacte, c'est donc un piège puisqu'on a l'illusion de maîtriser, tu pourrais être rapidement déçu si ton but est de maîtriser tout ce qui se passe dans le PC. Ou alors il faut faire sans OS mais cela implique une grande maîtrise préalable qui paradoxalement requière de connaître l'assembleur.

    Citation Envoyé par Forthman et chrtophe
    Si je devais me lancer dans l'asm aujourd'hui, je pense que je ferai comme Kannagi : de la programmation sur consoles rétro.
    L'idée de commencer par des vieilles consoles avec les CPU 8 bits, c'est pas mal pour débuter.
    Je suis d'accord car c'est beaucoup moins complexe pour démarrer et là tu peux avoir la maîtrise total (les registres, les tailles du tas et de la pile, le compteur programme, le pointeur de pile, ...)

    Citation Envoyé par Yapix Voir le message
    J'ai déjà eu l'occasion de faire un peu de C, mais j'ai quand même une nette préférence pour le C++.
    Pour de l'embarqué ça ne pose pas de soucis. Ayant été très a l'aise avec l'ASM de chez Microchip il y 15 ans, j'ai déjà comparé le code assembleur généré par un compilateur C et franchement c'était très très optimisé. Aujourd'hui, un compilateur va te générer du code assembleur peut être plus efficace que ce que tu aurais fait toi même.

    Je recommande de démarrer l'assembleur sur un microcontrôleur car c'est largement plus simple. Soit avec une console rétro ou en prenant un Microchip PIC18F 8 bits + Pickit qui est la sonde de programmation/débuggage ou bien Texas Instruments MSP430 16 bits la sonde de programmation/débuggage est déjà sur la carte. Avoir un débuggeur hardware permet de voir l'état des registres, les variables, la mémoire, la pile etc... en live en faisant dérouler le programme en mode pas à pas. Si tu prends un Arduino, il faut aussi un débuggeur pour voir le coeur du micro mais il coûte 80€ (Atmel ICE). Ce qui pourrait te dérouter c'est que ces microcontrôleurs ont des jeux d'instructions assembleur RISC (réduit) alors que sur un PC il me semble que tu es sur un jeux CISC (complexe) donc tu ne retrouvera pas les mêmes instructions ou leurs équivalents si le nom de l'instruction est différent. Quoi qu'il en soit, tu t'apercevras comme nous tous ici que l'assembleur va t'aider a maîtriser l'animal mais une fois cela fait, tu vas comprendre les limites de l'assembleur :
    • Très compliqué de faire un gros logiciel.
    • Très compliqué de maintenir un programme ou pour le faire évoluer.
    • Pas plus de maîtrise qu'avec un langage comme C ou C++ si ce n'est l'aspect timing mais qui avec les performances des processeurs et de l'électronique actuels, devient de moins en moins critique.



    Mais !
    Je ne dis pas qu'il ne vaut pas le coup d'être appris, je dis juste qu'il y a 20 ans c'était une obligation d'y passer et encore plus sur des microcontrôleurs car il n'y avait pas beaucoup de compilateur C mais aujourd'hui ?

    Il y a aussi un piège à trop user de l'ASM et du C (et pour moi du VHDL) sur des cibles embarqués, c'est d'avoir un mal de chien a repasser sur des langages objets ou haut niveau comme C++, JAVA etc... Tu attrapes des habitudes "procédures" et c'est difficile de t'en échapper après coup.


    Nom : Capture du 2017-04-23 01-57-22.png
Affichages : 1047
Taille : 258,8 Ko Nom : Capture du 2017-04-23 01-57-23.png
Affichages : 1082
Taille : 115,2 Ko
    A gauche Microchip et à droite Texas Instruments
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  10. #10
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Au moins on reste d'accord soit un microcontrôleur 8 bits soit une console rétro 8 bits (et tant pis pour les ordi 8 bits comme l'amstrad CPC ou le commodore 64 ).

    Je ne connais pas de tuto pur pour les débutants , mais ça reste relativement 'simple' (j'ai mis une journée pour connaître et coder sur une Master system).
    http://www.smstributes.co.uk/view_pa...?articleid=207

    Un site sur les instruction du z80 : http://z80-heaven.wikidot.com/instructions-set
    D'ailleurs le Z80 a une assez longue longévité , vu que il était utilisé aussi sur la Game boy , la Mega drive (comme processeur sonore) , la Neo Geo (comme processeur sonore aussi) et sur pas mal de calculatrice.

    Pour t'aider un peu tu dois installer un programme assembleur , je te conseille wla-dx : http://www.villehelin.com/wla.html (il y'a une version windows "Binaries (UNSUPPORTED): Win32 (link)".
    Ensuite utiliser autre chose que notepad , donc notepad++ ou moi je conseille Geany (qui peut être configurer pour compiler ton code et lancer un émulateur ).
    En tant qu'émulateur il y'en a 2 :
    -mednafen qui se lance assez rapidement
    -meka qui est un vrai debuggeur et qui te permettra de comprendre tout ce que tu fais

    Voila un petit exemple de code :
    Base.zip
    Je peux mettre quelque commentaire :
    la MS possède 2 interruption :
    - IRQ qui survient pendant le VBlank (VBlank a un intérêt que avec un tube cathodique , il faut voir le VBlank quand on a fini d'écrire en bas a droite de l'écran et que le canon remonte en haut a gauche ce laps de temps c'est le VBlank).
    - NMI c'est le bouton pause de la console (du coup en faite ça provoque une interruption ce bouton que je trouve ma fois assez étrange ^^).
    D'ailleurs leur adresses sont arbitraire .org $0038 et .org $0066 , ils le sont sur d'autres machines doté d'un Z80 aussi.
    (sur les autres processeurs il y'a en général un tableau qui indique l'adresse de ces interruptions).

    Si SpriteX et SpriteY sont des fonctions si grosse c'est que les sprites ne peuvent être que de 8x8.
    Donc c'est fonction permettre de faire du 32x32 (la taille du sprite que je veux afficher :p ).
    Bien sur le code est pas possible de lire tel quel il faut connaître un peu sa memory map , la RAM se trouve a l'adresse $C000-$DFFF (soit 8ko !).

    Il faudrait un cours sur l'assembleur en complément, de façon basique je dirai qu'il faut voir les instructions de manière simple (sur un z80 , ça sait lire /ecrire , calcul simple , condition , sauf , fonction) en gros

    Bon courage , si tu as des questions plus tard spécifique sur la prog MS n'hésite pas a créer un topic dédié

  11. #11
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    Tu peut aussi faire de l'assembleur sur la plupart de calculatrices graphiques
    C'est en 16 bit mais il y a une grosse communauté et tu en a déjà peut être une

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir à tous

    L'ASM j'en ai fais sur des micro Siemens ou ST en 1998 (je ne me souviens plus, juste que c'était une sainte horreur) et les AVR entre 97 et 2005, et j'ai continué sur ces dernier en amateur peu actif...

    Citation Envoyé par Vincent PETIT Voir le message
    Il y a peut être sur un DSP que je programmerai peut être en ASM et encore !?
    Les 3 DSP que j'ai touché aux études c'était déjà en C et on parle de l'époque 2002 à 2007

    Le problème de l'ASM sur OS c'est que l'on fait avec peine 10% du travail puis on appelle une routine du système (écrite en C ou mieux) pour faire les 90% autre. Pour moi c'est ridicule car on ne verra jamais l’enjeu de l'accès au matériel.

    A titre d’apprentissage, l'ASM c'est faisable sur les PIC et les AVR (encore que les PIC n'ont pas un jeu d'instruction très pratique à utiliser). On peut très bien faire de l'ASM sur l'ATMega328 des Arduino Uno (c'est le même principe que pour la programmation en C de ces micros, présent dans les tuto Arduino de Dvp).

    Bonne suite

    Delias

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/07/2003, 16h04
  2. Conseils pour developper une application avec Oracle
    Par belugha dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 02/06/2003, 16h03
  3. Cherche conseil pour choisir mon orientation.
    Par AslDice dans le forum Débuter
    Réponses: 6
    Dernier message: 24/04/2003, 17h07
  4. Conseils pour poser votre question...
    Par Community Management dans le forum XMLRAD
    Réponses: 0
    Dernier message: 30/01/2003, 16h58
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo