Prenons Python comme exemple. Si je ne me trompe pas, lorsque vous le programmez, l'ordinateur est d'abord "traduit" le code en C. puis à nouveau, de C à l'assemblage. L'assemblage est écrit en code machine. (Ceci est juste une idée vague que j'ai à ce sujet si corrigé-moi si je me trompe) mais quel est le code de la machine écrit dans, ou plus précisément
4 Réponses :
Électricité. Circuits, mémoire et portails logiques. P>
En outre, je crois que Python est généralement interprété, non compilé via C → Assembly → Code de la machine. SUB> P>
Si je ne me trompe pas, lorsque vous le programmez, l'ordinateur est d'abord "traduit" le code en c. p> blockQuote>
Non, ça ne le fait pas. C n'est rien de spécial, sauf que c'est le langage de programmation le plus répandu utilisé pour la programmation système. P>
L'interpréteur de Python traduit le code Python dans ce qu'on appelle le code P exécuté par une machine virtuelle. Cette machine virtuelle est l'interprète réel qui lit le code P et chaque blip de code P rend l'interprète exécuter un code de code prédéfini. Ce n'est pas très contrairement à la façon dont le code de machine binaire natif contrôle une CPU. Une approche plus moderne consiste à traduire le code P en code machine natif. P>
L'interprète CPPHON est écrit en C et a été compilé dans un binaire indigène. Fondamentalement, un binaire natif n'est qu'une longue série de nombres (opcodes) où chaque numéro désigne une certaine opération. Certains opcodes indiquent à la machine qu'un nombre défini de nombres qui suit ne sont pas des opcodes mais des paramètres. P>
Le processeur lui-même contient un décodeur d'instructions dite, qui lit le numéro binaire natif par numéro et pour chaque opcode qu'il lit, il permet d'alimenter le circuit de la CPU qui implémente cet outil particulier. Il existe des opcodes, cette mémoire d'adresse, des opcodes qui chargent des données de la mémoire dans des registres et ainsi de suite. P>
Comment le processeur traite-t-il ses instructions, comment "découvre" quoi faire? P> blockQuote>
Pour chaque opcode, qui n'est qu'un modèle binaire, il y a son propre circuit sur la CPU. Si le motif de l'opcode correspond au "interrupteur" qui permet cet outil opcode, son circuit le traite. P>
Voici un wikibook à ce sujet: http://fr.wikibooks.org/wiki/microprocessor_design P>
Il y a quelques années Il y a quelques années, un gars a construit un ordinateur entier, de la logique de fonctionnement simple et de la mémoire ICS, c'est-à-dire pas de microcontrôleur ou de même implication similaire. L'ensemble du projet appelé "Fils" Big O 'Fils " était plus ou moins une CPU construite à partir de zéro. La seule chose que Nerdier aurait construit cette chose à partir de transistors uniques (qui n'était en fait pas beaucoup plus difficile). Il fournit également un simulateur qui vous permet de voir comment la CPU fonctionne en interne, décodage de chaque instruction et l'exécutant: SIMULATEUR DE FILS BIG O 'FILS P>
éditer: Depuis que j'écris à l'origine que la réponse, construisant une CPU à part entière de composants modernes et discrets a été effectuée: Pour votre déserte, un MOS6502 (la CPU qui a alimenté Apple II, Commodore C64, NES, BBC Micro et beaucoup d'autres) construites à partir de disques: em> https://monster6502.com/ P>
qui s'appelle microcode . C'est le code dans la CPU qui lit les instructions de code de la machine et le traduit en flux de données de faible niveau. P>
Lorsque la CPU, par exemple, rencontre l'instruction Ajouter code>, le microcode décrit comment il devrait obtenir les deux valeurs, les nourrir à l'Alu pour effectuer le calcul et où mettre le résultat. p>
Bien qu'il n'y ait pas besoin de ce microcode de ce type impliqué du tout sur des processeurs simples. Je pense que juste un simple regard sur la façon dont les œuvres PC / Fetch / Exécuter seraient un bon début dans ce cas.
Le microcode est quelque chose de spécial d'architectures de la CISC, où chaque instruction se déclenche en séquence de micro-opérations. Il existe également des architectures sans microcode, exécutant directement les opcodes. Tout le X86 avant que le Pentine ne soit comme ça.
@DATENWOLF CISC n'a pas besoin de microcode. RISC pourrait avoir du microcode.
@pst: ehh, non. CECC utilise généralement le microcode pour décoder des instructions de CISC dans une série d'instructions RISC. La plupart des architectures de RISC n'ont pas de microcode. C'est juste ce que CCISC et RISC signifie: CLISC: Code de jeu d'instructions complexes. RISC: Code de jeu d'instructions réduites. Avec une machine Pure RISC, il y a peu à faire pour un mircrocode, car tout est déjà décomposé dans les instructions simples.
@Datenwolf pour un CPU i> CECC moderne Il n'y a rien d'inhérent à ce qu'il s'agisse d'une propriété de CISC, bien que cela ait du sens dans de nombreux cas. De même, pour RISC, cela est inversé. Il ne faut donc pas "ni" et "pourrait".
La famille de CISCC bien connue / populaire, X86, utilise le microcode, d'autres (les 6502 avaient une forme de microcode), rien ne dit que le RISC ne peut, mais à cause de X86, tout le monde semble penser que tous les transformateurs sont microcoded et ils sont en grande partie ne sont pas. Le microcodage n'est qu'une solution, tout comme la mise en place d'un processeur dans votre lecteur DVD et d'avoir un moyen de mettre à jour le micrologiciel. Vous plafiez-vous d'avoir à obtenir tout le produit parfait, des trucs sont inchangés, mais certaines choses que vous pouvez résoudre après la vente / l'expédition du produit.
Le code de la machine ne "communique pas avec le processeur". P>
plutôt, le processeur "sait évaluer" le code de la machine. Dans le [répandu] von Neumann architecture Cette machine-code (programme) peut être considérée comme une Array indexable de l'endroit où chaque cellule contient une instruction de code machine (ou des données, mais ignorons cela pour l'instant). P>
La CPU "Semble" à l'instruction actuelle (souvent identifiée par le PC ou Compteur de programme ) et décide de quoi faire (cela peut être fait directement avec des transistors / "nu-métal", ou il sera traduit à un code de niveau inférieur): Ceci est connu sous le nom de fetch-décodage-exécuter em> cycle. P>
Lorsque les instructions sont exécutées Effets secondaires EM>, telles que la définition d'un drapeau de contrôle, mettez une valeur dans un registre ou de passer à un index différent (changant le PC) dans le programme, etc. Voir cette Aperçu simple d'un CPU qui couvre ce qui précède un peu mieux. p>
C'est l'évaluation de chaque instruction - telle qu'elle est rencontrée - et l'interaction des effets secondaires résultant du fonctionnement d'un processeur traditionnel. P>
(Bien sûr, les processeurs modernes sont très complexes em> et font beaucoup de choses tressées soignées!) p>
J'ai des simulateurs à Github.com/dwelch67 Meecoate, par exemple, est un ensemble d'instructions propres, simples, J'ai à la fois des simulateurs logiques et logiciels. Bien que ce n'était peut-être pas la plus belle solution logique, cela pourrait / fonctionnerait comme matériel, mais devrait également être assez lisible pour un programmeur logiciel à suivre. De même, le simulateur d'instructions logicielles doit être lisible par des programmeurs.
C'est vraiment comme ça que c'est fait, la logique "regarde" à quelques bits et prend des décisions de là. La réalité provient de la HDL provient de longues équations logiques pour chaque petite chose. Un peu similaire à une langue de haut niveau devenant une liste plus longue des instructions de montage qui mettent en œuvre ce programme de haut niveau.
Trouver / emprunter le livre "Code" de Petzold.