human
Comment est-on passé du binaire au langage assembleur puis aux langages de programmation ? (comme j'ai cinq ans) c'est-à-dire comment les langages de programmation ont-ils été initialement programmés ? Explique comme si j'avais cinq ans.
gpt
Ok , cela pourrait être un couple de questions différentes , mais commençons par une description générale du " binaire " , du langage d' assemblage et des langages de niveau supérieur . Code machine (alias binaire) : le code machine correspond aux instructions brutes que le processeur d'un ordinateur exécute réellement. C'est quelque part à l'intérieur du CPU qui décide qu'un code d'opération spécifique (OPCODE) signifie ajouter deux registres ensemble. Le code machine peut être spécifique à un seul CPU ou microcontrôleur ; Cependant, plusieurs processeurs différents utilisent souvent le même jeu d'instructions. C'est-à-dire qu'ils prennent en charge les mêmes opcodes même s'ils peuvent avoir des instructions différentes. Par exemple, le jeu d'instructions Intel (x86) est utilisé depuis les premiers processeurs produits par Intel. Un processeur 386 de la fin des années 80 fonctionnant à 8Mhz exécute le même code machine que votre Intel i7 moderne. Le i7 a des opérations supplémentaires qui le rendent plus efficace et prend en charge des opérations supplémentaires, mais les mêmes instructions de code machine pour additionner deux nombres sont exactement les mêmes. Le problème avec le code machine est qu'il est difficile pour les humains d'analyser/de comprendre. Ce n'est pas impossible, mais cela peut prendre un certain temps pour apprendre qu'un OPcode de 35 signifie "Ajouter" et 36 signifie "Soustraire". La solution à ce problème est le langage d'assemblage. Langage d'assemblage : le langage d'assemblage, ou tout simplement l'assemblage, est un petit pas au-dessus du code machine. L'assemblage est toujours spécifique à un processeur, un microcontrôleur ou une gamme de processeurs/microcontrôleurs particuliers, mais il est beaucoup plus facile à utiliser pour les humains que le code machine. Plutôt que d'avoir à connaître les Opcodes spécifiques du code machine, ils sont remplacés par des chaînes plus faciles à retenir. Utilisez donc see ADD et SUB pour les opérations d'addition et de soustraction. De plus, les registres (mémoire locale au CPU physique) sont également nommés. Donc : ADD AX , BX qui peut additionner les valeurs dans deux registres est utilisé plutôt que l' Opcode , et les nombres pour ces registres . Le langage assembleur est compilé (converti de l'assembleur en code machine) par un programme appelé assembleur. C'est le premier niveau d'abstraction loin du CPU. Bien que l'assemblage soit plus facile à utiliser que le code machine, il peut toujours être difficile d'écrire des programmes plus volumineux. Des adresses de mémoire individuelles doivent être utilisées, des registres spécifiques doivent être sélectionnés pour chaque opération et les limitations générales du processeur/microcontrôleur doivent être prises en compte lors de la programmation. Pour résoudre ces problèmes, nous passons au niveau suivant des langages de programmation de bas niveau d'abstraction. Langages de programmation de bas niveau : Les langages de programmation de bas niveau utilisent l'assemblage pour rendre la programmation encore plus facile. Ces langages font encore plus abstraction du processeur en prenant en charge des constructions supplémentaires et en gérant automatiquement des détails spécifiques du processeur. Par exemple, si vous vouliez additionner deux nombres, multipliez par un 3ème et enregistrez le résultat. En assembleur, vous devez préciser quels registres contiennent les deux valeurs à additionner, le registre pour le résultat de l'addition, le registre contenant le nombre à multiplier par, et enfin le registre pour stocker le résultat complet. Dans un langage de programmation de bas niveau, cela est géré par le compilateur, et le programmeur n'a qu'à écrire D = (A + B) * C. Généralement, les langages de programmation de bas niveau produisent un code d'assemblage automatisé, qui est ensuite compilé par l'assembleur pour créer langage machine . Même les langages de programmation de niveau supérieur ajoutent des abstractions supplémentaires qui peuvent rendre la programmation encore plus facile, telles que la gestion automatisée de la mémoire, les bibliothèques générales ou les fonctions intégrées pour les opérations complexes, etc. Supposons donc que nous décidions de nous lancer dans la production de processeurs et que nos ingénieurs viennent de créer le dernier processeur reddit, le Narwhal. Comment faire passer le Narwhal de l'exécution de code machine à l'exécution d'un langage de haut niveau comme Python ? Nous commençons par écrire à la main ou réécrivons soigneusement un assembleur pour prendre en charge le code machine du Narwhal. Une fois que nous avons un assembleur, nous pouvons passer à un compilateur de bas niveau comme C. Généralement, les compilateurs C sont partiellement construits en assembleur, et partiellement en C. Ceci est fait par un processus appelé bootstraping. L'amorçage d'un compilateur implique l'utilisation d'un assembleur pour créer un compilateur C de base. Ce compilateur de base est ensuite utilisé pour compiler le code source C restant, produisant un compilateur C final encore plus puissant. Nous pouvons enfin utiliser le compilateur C produit pour produire un interpréteur Python. Vous ne comprenez toujours pas ? Voici une analogie. Vous voulez une nouvelle maison, alors vous engagez un architecte pour la concevoir. Le travail des architectes est confié à un dessinateur, qui précise où exactement placer les murs, comment ils doivent être construits, etc. Enfin, le travail du dessinateur est envoyé aux ouvriers du bâtiment qui récupèrent le bois, le clouent, coulent le béton, etc. C'est la même chose que ce qui se passe dans un ordinateur avec des langages de programmation où l'architecte est le langage de programmation de bas niveau qui dit ce qui doit être fait. Le dessinateur est le même que l'assembleur qui dit plus précisément ce qu'il faut faire, comme où faire fonctionner les systèmes électriques et HVAC. Enfin, les travailleurs de la construction sont comme un code machine en ce sens qu'ils font réellement le travail, en coupant des planches, en martelant et en versant du béton.