Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Bêta ON] Premiers pas vers l'assembleur Intel x86 avec NASM

Dans la catégorie "Autres" par cotoporto

    26 mars 2016 à 10:07:43

    Bonjour par ici !

    @Sadounno

    En fait, il est vrai que comme l'a dit tr1691, on peut créer un système d'exploitation  entièrement en assembleur. D'ailleurs dans l'introduction de mon cours j'y fais référence en parlant de kolibrios. Néanmoins il faut comprendre qu'un système d'exploitation moderne est composé de plusieurs chose :

    • le bootloader ;
    • le noyau qui lui même est tout au moins composé de drivers, de fonctions d'entrées/sorties, de système de gestion de mémoire et de processus.....bref j'en passe ;
    • ...
    • et le gestionnaire de fenêtre qui prend en compte l'affichage des fenêtres.

    De tout cela, là où je veux attirer ton attention, c'est que le gestionnaire de fenêtre est assez lourd à écrire SI c'est toi qui écrit depuis zéro la bibliothèque d'interface graphique utilisée pour la créer. C'est pour cela on utilise d'autres bibliothèque comme gtk+, qt... bref la liste est longue.

    La création de fenêtre peut donc se faire en asm directement en utilisant les routines de la carte vidéo/graphique mais on préférera souvent déléguer ce boulot à une bibliothèque tierce. C'est le cas de ubuntu la distribution linux qui utilise gtk+ pour développer son gestionnaire de fenêtres.

    Ajouté à tout cela, vu que c'est pénible d'écrire tout le temps en asm les millier de codes d'un système d'exploitation, on préfère utiliser un langage plus haut niveau comme le c qu'on interface avec l'asm pour les raisons évoquées ci dessus par tr1691.

    Pour terminer, dans mon tuto, on va aborder la création d'interface graphique et l'interface avec un langage de haut niveau donc pas de souci. Mais vu que tu t’impatiente, je vais te donner la liste des chapitres que je compte bientôt mettre en ligne. Dans les prochains chapitres, les notions abordées sont : les rotations binaires, l'utilité des opérateurs bits à bits, les conditions, les boucles, les fonctions, la pile et quelques nouveaux registres et bien sûr de la pratique et peut être des quizz.

    J'espère t'avoir répondu convenablement à bientôt .

    • Partager sur Facebook
    • Partager sur Twitter
    tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici
      26 mars 2016 à 17:45:05

      Merci pour cette réponse détaillée.
      • Partager sur Facebook
      • Partager sur Twitter
        30 mars 2016 à 1:03:09

        Bonsoir,

        Kolibri OS est également réputé pour sa programmation en assembleur qui lui permet de démarrer en 10 secondes chrono (oui oui, sans SSD, même en VM). Comme quoi, il est rare mais néanmoins réalisable de coder un OS en assembleur. Cependant, comme le souligne tr1691, quelles en sont les applications si ce n'est la création d'un OS ?

        J'avais éventuellement pensé à la création d'automates rapides dans le traitement de l'information, où le C++ et/ou un noyau UNIX rajouteraient, selon moi, un poids sur les performances. Or, le compilateur C++ optimise au mieux son code en assembleur, à l'inverse de nous, pauvres mortels. Est-il préférable, dans ce cas, de coder en C++ ou bien en assembleur ?

        • Partager sur Facebook
        • Partager sur Twitter
          3 avril 2016 à 22:04:37

          Salut par ici !

          Alors GeeksdelaCave, pour répondre à ta question, je vais devoir t'expliquer une ou deux chose.

          Tout d'abord, il faudrait savoir qu'un compilateur bien qu'il optimise assez bien un code écrit en langage de haut niveau pour avoir son équivalent asm, ne peut se passer du "facteur humain". Qu'est ce que j'entends par là : l'humain intervient à plusieurs niveau :

          • l’écriture du code :par exemple, si un compilateur c devait enregistrer une variable en mémoire, il n'utiliserait pas automatique un registre sauf mention du codeur . Or à moins d'avoir appris à coder en asm ou avoir réellement fait un assez grand détour du langage c, un programmeur non averti, ne saurait faire cette optimisation.
          • Le développement et la mise à jour du compilateur. En effet, de nouveaux microprocesseurs sortent à une vitesse incroyable, pour pouvoir utiliser les dernières instructions machines possible d'un microprocesseur, il faudrait donc que les compilateurs soient assez rapidement mis à jours pour supporter ces optimisations machine mais ce n'est malheureusement pas le cas. En asm on peut utiliser une instruction tout de suite dès sa sortie, il suffit d'avoir le bon assembleur (ici les nouvelles instructions sont souvent plus rapidement supportées)
          • ...
          • Il y a également le fait que certaines optimisations sont tellement acrobatiques qu'elles ne sauraient se faire dans un langage de plus haut niveau que l'asm et essayer de le faire peut parfois induire le compilateur en faute

          Après le facteur humain,il y a également le fait que Si les compilateurs sont très bons pour optimiser la vitesse d’exécution, il n'en est pas vraiment de même pour la taille du code ou la consommation énergétique.  D'ailleurs, ces deux articles : devraient amplement te convaincre du bien fondé de l'optimisation "à  mains nues" directement en ASM : 

          techniques d'optimisation du compilateur - tuto

          article Wikipedia sur l'optimisation des compilateurs

          Ainsi un développeur qui écrit directement son code asm et qui sait ce qu'il fait (c'est ce que j’essaye d'enseigner à travers mon tuto) devrait pouvoir arriver à optimiser autant voire plus un code mieux qu'un compilateur.

          Enfin pour terminer, les applications de l'asm sont cités plus hauts dans ce billet et dans l'intro de mon tuto et ne se limitent aucunement àla créations des systèmes d'exploitation.

          • Partager sur Facebook
          • Partager sur Twitter
          tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici
          Anonyme
            4 avril 2016 à 10:39:05

            Je tiens a corriger quelques points :

            "l’écriture du code :par exemple, si un compilateur c devait enregistrer une variable en mémoire, il n'utiliserait pas automatique un registre sauf mention du codeur . Or à moins d'avoir appris à coder en asm ou avoir réellement fait un assez grand détour du langage c, un programmeur non averti, ne saurait faire cette optimisation."

            Si tu entends par la l'emploi du mot clé register, il faut savoir que celui-ci est déprécie pour plusieurs raisons :

            •  les compilateurs s'en sortent mieux pour gérer l'allocation des registres que les humains
            •  si avec les processeurs 16 bits celui-ci avait du sens, avec l’avènement du 32 et surtout du 64 bits et la pléthore de registres qui va avec, il y a suffisamment de registres pour pouvoir stocker toutes les variables régulièrement utilisées
            • dernier aspect souvent oublié : avec les technologies telles l'hyperthreading ou le multi-coeur, de nombreuses problématiques d’accès concurrent surviennent et celles-ci sont plus faciles a gérer lorsque les données concernées sont en mémoire et non en registre. Les compilateurs modernes sont plus a même de gérer cela que le programmeur.

             A ma connaissance, le mot clé register est ainsi devenu déconseillé en C++ (norme 2011)

            "Le développement et la mise à jour du compilateur. En effet, de nouveaux microprocesseurs sortent à une vitesse incroyable, pour pouvoir utiliser les dernières instructions machines possible d'un microprocesseur, il faudrait donc que les compilateurs soient assez rapidement mis à jours pour supporter ces optimisations machine mais ce n'est malheureusement pas le cas. En asm on peut utiliser une instruction tout de suite dès sa sortie, il suffit d'avoir le bon assembleur (ici les nouvelles instructions sont souvent plus rapidement supportées)"

            Argument malhonnête car parfois erroné. Sur les plateformes traditionnelles, les outils de développement opèrent "en chaine" (GNU, LLVM). C'est a dire que les compilateurs génèrent du code assembleur propre a la machine cible ou en un langage intermédiaire indépendant de la plateforme (LLVM) qui est ensuite transcrit en assembleur.

            Le portage vers une nouvelle plateforme se résume donc a produire l'assembleur pour cette plateforme, rendant donc en même temps la possibilité du code en des langages de plus haut niveau pour la même plateforme.

            "Si les compilateurs sont très bons pour optimiser la vitesse d’exécution, il n'en est pas vraiment de même pour la taille du code ou la consommation énergétique.  D'ailleurs, ces deux articles : devraient amplement te convaincre du bien fondé de l'optimisation "à  mains nues" directement en ASM :"


            Les compilateurs (comme GCC) offrent parfois la possibilité d’établir un compromis entre la taille de l’exécutable (et donc sa taille en mémoire) et le temps d’exécution.

            Quand a la gestion de la consommation énergétique c'est une plaisanterie. Sur les processeurs modernes en particulier, la gestion de la consommation et des optimisations nécessaires pour cela ont lieu au sein même du processeur ou dans l’ordonnanceur des taches du systèmes d'exploitation.

            -
            Edité par Anonyme 4 avril 2016 à 10:43:53

            • Partager sur Facebook
            • Partager sur Twitter
              4 avril 2016 à 22:24:28

              Bonsoir, es que vous pouvez expliquer ;

              - ce que sont les routines, et les entrees sortie, car je ne lis que sa et personne ne l'explique.

              - les developpeurs asm sont ceux qui eveloppent les driver pour les periferiques, mais comment ils le font, surtout ya 10 ans avec linux, les fabriquants ne developpaient de driver que pour windows...

              - irad est un IDE pour MASM qui facilite beaucoup de choses (meme quil fait des fenetres, boutons, textboxes..)existe til un bon IDE NASM

              - derniere question(pour ce soir )qsq assembleur att gas, et quesque le gcc... pourquoi des qu'on arrive a ce chapitre toutes les portes se ferment et tous les tutos deviennent incomrehensible

              Merci pour votre patience

              • Partager sur Facebook
              • Partager sur Twitter
                8 avril 2016 à 7:30:48

                Bonjour esque vous savez configurer Bochs 2.6.8 sous windows 7
                • Partager sur Facebook
                • Partager sur Twitter
                  13 mai 2016 à 14:57:03

                  Bonjour; es que vous pouvez expliquer quelle est la difference entre segmentation et pagination ; et es que c'est le cpu traite la ram ou c'est le système d'exploitation.

                  Merci

                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 mai 2016 à 22:06:27

                    Bonsoir,

                    - Une routine est une fonction, premier lien Google :

                    https://fr.wikipedia.org/wiki/Routine_%28informatique%29

                    - Si cela est fondé, les développeurs codant en ASM des drivers utilisent les entrées/sorties aux niveaux les plus bas. Généralement, le pilote est fourni avec un matériel par son fabriquant, lequel connaît, du coup, le matériel fabriqué, sa datasheet, ses performances réelles, ses optimisations au niveau des circuits logiques... Je n'étais qu'utilisateur il y a 10 ans, mais je suppute qu'à l'époque ces informations étaient peut-être plus accessibles...

                    - Le programme GCC est un compilateur du langage C. Une nouvelle version, nommée G++, permet de compiler le langage C++ en utilisant, par exemple, la dernière bibliothèque standard, à savoir la STD11.

                    - Cela dépend de la machine. Exemple d'une machine ROM (schéma disponible diapo 67 du lien ci-dessous)

                    http://infodoc.aix.univ-amu.fr/~risch/TEACHING/ARCHITECTURE/cours4.pdf

                    En haut, la colonne indique des adresse mémoires, en dessous, l'accumulateur désigne des registres d'un processeur, et enfin, la forme en dessous appelée processeur représente une UAL (Unité Arithmétique et Logique), capable d'exécuter des instructions. Dans ce cas-ci, tu peux constater que cette UAL n'a pas accès à la mémoire directement, et doit donc écrire dedans, au moyen par exemple de l'instruction STORE@, permettant d'enregistrer à l'adresse mémoire passée en argument.

                    Pour de plus amples informations au sujet de l'architecture d'une machine, je t'invite à t'intéresser aux cours "Architecture des Ordinateurs", au niveaux des 6 transparents (si les liens ne sont pas cliquables il suffit de remplacer le numéro par celui du cours voulu dans le lien ci-dessus), disponible ici. Ce cours a été rédigé par un enseignant chercheur en raisonnement non-monotone et logique déductive, enseignant à l'IUT d'Aix-Marseille (autrement dit, c'est béton).

                    J'espère avoir répondu aux plus intéressantes de tes questions, cordialement...

                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 mai 2016 à 17:31:17

                      Merci pour cette reponse bref et directe...

                      Bravo

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 août 2016 à 17:20:56

                        Enfin un tuto ASM bien rédigé x) Ça fait un an que j'essaie d'apprendre l'assembleur et je dois avouer que des bons tutos avec du contenu qui reprend les bases, on en croise pas partout ! Mais là je crois qu'on tient vraiment quelque chose.

                        Les TP on l'air super intéressants, je vais suivre ce cours de très près. Ma seule remarque est qu'à mon goût, pour bien apprendre l'assembleur est être le plus libre possible,  je prône le bannissement total des interruptions DOS. Ce n'est qu'un avis personnel bien sûr :3

                        Continue comme ça, c'est du super boulot !!

                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 août 2016 à 10:37:13

                          Merci! Je pense que d'ici quelques temps je vais reprendre la rédaction de ce tuto

                          • Partager sur Facebook
                          • Partager sur Twitter
                          tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici
                            23 août 2016 à 16:01:11

                            Content de l'apprendre :p
                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 septembre 2016 à 14:59:54

                              Merci beaucoup à l'auteur du tuto !

                              Je te serai eternellement reconnaissant

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Ghost le vénéré,adulé,trés respecté et absolument inconnu !
                                29 octobre 2016 à 19:42:54

                                Salut par ici !

                                Juste pour informer la communauté que je viens d'ajouter quelques chapitres à mon cours sur l'ASM. En effet disposant d'un peu de temps et à cause des nombreux retours et MP reçus, j'ai décidé de finir ce cours TRÈS RAPIDEMENT.

                                Néanmoins quelques remarques : 

                                La partie sur la manipulation des bits est encore à compléter ( je pense le faire dès demain ou au plus tard début semaine prochaine)

                                la partie sur les boucles manque de quelques remarques que je vais compléter.

                                Bonne lecture et beaucoup de commentaires !!

                                -
                                Edité par cotoporto 29 octobre 2016 à 19:45:32

                                • Partager sur Facebook
                                • Partager sur Twitter
                                tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici
                                  16 août 2017 à 21:49:25

                                  Bonsoir, je viens de lire (reprise apres un break )tout le tuto,

                                  j'avoue que c'est tres bien detaillé et expliqué. mais je croix que pour moi en tout cas novice je veux bien arriver a la pratique pure et dure pour voir la debouchée .

                                  es quil ya un moyen d'interraction de la carte graphique avec le cpu .. si oui comment y acceder.

                                  comment interagir avec le pêripheriques.

                                  comment ecrire un driver par exemple.

                                  j'avoue que le cours est bien mais plus theorique.

                                  j'espers avoir ete compris.

                                  Grand merci pour cotoporto

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    22 août 2017 à 8:54:17

                                    bonjour sadounno

                                    Je suis content d'apprendre que mon tuto  t'a plu  et je pense qu'effectivement on reste un peu sur sa faim avec tout ce qui est abordé mais la pratique est "moins forte".

                                    Pour palier à cela, je crois me rendre disponible dans un future absolument proche avec une refonte du tuto et des ajouts de chapitres et même si ce n'est que quelques lignes de code, plus de pratique tous les deux chapitres. 

                                    En attendant, un avis clair, sur les zones pas très explicites et complexe (et plus de lecteurs qui s'expriment ici :p) serait plus qu'apprécié afin de perfectionner ce qui est fait.

                                    Merci

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici
                                      14 octobre 2017 à 20:21:59

                                      Bonsoir.
                                      J'ai grandement apprécié ce tuto qui présente l'assembleur de façon claire, concise et enfin à la hauteur d'un débutant : j'ai pu convertir grâce à vous des amis à ce magnifique langage (oui pour moi c'est un langage, désolé pour ceux qui pensent que le nier est être puriste).
                                      Je ne suis pour ma part pas débutant, mais j'avais besoin de réviser mes "classiques" et ce cours est vraiment parfait pour ça.
                                      Seuls bémols : les quelques petites fautes d'orthographe éparses, et également une impression d'inachevé très forte.
                                      En effet, on parle de bootloaders, de systèmes d'exploitations, de mode protégé, tout un tas de promesses magnifiques, et rien de tout ça à l'horizon. Est-il prévu d'aborder ces points ? Parceque pour ma part, c'est ce que je pensais trouver dans ce tuto car ce sont les notions que je ne comprend jamais dans aucun tuto sur l'assembleur : expliquer enfin ce qu'est vraiment la gdt notamment (j'ai mis longtemps à le comprendre, et ça m'a beaucoup fait défaut quand j'en avais besoin) et toutes les notions parfois non intuitives de ce langage. 
                                      J'espère que vous ne le prendrez pas mal, mais il serait vraiment dommage que vous abandonniez un projet qui semble si prometteur et dont la beta est déjà de grande qualité.
                                      Très bonne soirée à vous,
                                      Merci beaucoup
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      xorl eax, eax movl edi, "Signature de NeoX" movl esi,3 call printf
                                        17 octobre 2017 à 12:12:52

                                        Bonjour NéoX.

                                        J'apprécie grandement ce commentaire. Je suis assez heureux de voir à quel point ce tuto à pû t'aider à revoir les bases. Je suis justement en train de rédiger la suite du tuto actuellement (et je compte faire des correction et réexpliquer encore mieux les concepts abordés). Les promesses de l'introduction seront toutes remplies. Je compte également en faire un livre que je vais commercialisé. J'espère que tu seras un de mes lecteurs.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici
                                          17 octobre 2017 à 22:41:09

                                          Bonsoir Cotoporto,
                                          C'est une excellente nouvelle, et je serai sûrement un des premiers à lire et le tuto et le livre !
                                          Très bon courage à vous
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          xorl eax, eax movl edi, "Signature de NeoX" movl esi,3 call printf
                                            21 novembre 2017 à 12:38:11

                                            Salut cotoporto, je suis en 1ere S Si (sciences de l'ingénieur), je programme depuis la 5 eme et j'avoue que le Nasm m'a plutôt séduit, en revanche sur internet il y a un gros manque de tuto pour débutant... Ton tuto est juste génial j'ai tout compris du premier coup et j'ai hâte de voir la suite, alors continu ainsi et n'abandonne pas !! 

                                            Bon courage ^^

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            ASM is not dead
                                              22 novembre 2017 à 12:02:01

                                              Merci sweetleolef pour le soutient. Vraiment. Je suis actuellement en train de rédiger  la suite du tuto d'arrache pied avec plus de facilité de compréhension, plus de notions, plus de profondeurs et d'exercices et travaux pratiques. Je pense que d'ici quelques temps disons au tard mi février 2018 finir complètement le tuto.

                                              Par contre je vais finalement en faire un livre donc seule quelques chapitres seront gratuitement uploader sur ce site. Le livre sera surement disponible sur amazon. Pour ceux qui souhaitent avoir cela, qu'ils m'envoient par mail un petit texte afin que j'ai leur email pour les prévenir de la sortie. Mon email : ahounoukhaled@gmail.com


                                              Merci pour le soutient et les nombreux encouragements.

                                              -
                                              Edité par cotoporto 22 novembre 2017 à 12:03:02

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici
                                                29 novembre 2017 à 1:03:47

                                                un grand bravo

                                                j'attends avec impatience les prochains chapitres.

                                                concernant l'instruction mov DX , hello

                                                comment on peut utiliser DX pour y mettre une adresse ?

                                                merci

                                                -
                                                Edité par JSlim_ 2 décembre 2017 à 1:06:06

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  30 juillet 2018 à 16:09:05

                                                  Salut!, je viens de finir de lire ce tuto sur l'asm, et je reste sur ma faim ;). J'aimerais vraiment savoir où en est rendu la progression de la création du tutoriel! Merci!


                                                  PS: tu n'as pas reçu de commentaire depuis novembre 2017, as tu abandonné? j'espère que non.. Car je trouve qu'il s'agit d'un excellent ouvrage, surtout après tout le temps que tu y as certainement consacré..

                                                  -
                                                  Edité par NicolasKéroack 30 juillet 2018 à 16:14:34

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    31 juillet 2018 à 2:30:52

                                                    Bonjour NicolasKéroack ! 

                                                    En fait, non je n'ai pas abandonné. Au contraire j'ai perfectionné le contenu. Les fautes, les non-dits, les imprécisions....Tout cela a été enlevé. J'ai abordé la programmation en ASM 32, 64 bits  

                                                    Au menu, il y a des quizs, exercices et TDs. Par exemple, je montre comment devenir de vrai Hackers (des gentils hein:-°) en crééant des shellcodes et aussi comment craquer des programmes. Le but est de montrer les possibilités du langage.

                                                    Le volume 1 est actuellement  en précommande. Tout comme ton commentaire, je reçois énormément d'avis favorables. Voici la page de précommande : https://x86asmdemystified.landen.co/

                                                    Voici mon e-mail pour connaitres les avantages de la précommande. ahounoukhaled@gmail.com

                                                    NB: je reviendrai surement modifié le présent tuto un peu plus tard

                                                    -
                                                    Edité par cotoporto 1 août 2018 à 12:24:20

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici
                                                      1 août 2018 à 22:39:05

                                                      Merci beaucoup, je suis bien content de lire ses lignes! Je vais acheté le livre aussitôt que j'en ai les moyens, promis juré(je l'ai dit en vraio_O)

                                                      Au passage, Je me permet aussi de dire que actuellement, pour la plupart des choses(sauf le texte noir sur fond noir) votre site web est très beau :-)


                                                      Edit: je cours lire le premier volume :D.

                                                      -
                                                      Edité par NicolasKéroack 1 août 2018 à 22:50:51

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        1 août 2018 à 23:41:20

                                                        Mrerci pour les compliment (et la promesse aussi^^ ).  Le livre est à 10euro actuellement(mais ça risuqe de changer). J'espère que tu l'appréciera.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        tu aimerais apprendre l'assembleur avec NASM depuis zéro ? clique ici suis le fil de discussions ici

                                                        [Bêta ON] Premiers pas vers l'assembleur Intel x86 avec NASM

                                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                        • Editeur
                                                        • Markdown