Question

Lorsque, dans un ordinateur fait l'abstrait (lettres sur l'écran) rencontrer le vrai (courant électrique passant à travers des circuits en mémoire et processeurs). Comment cette évolution se produire?

Je parle plus profond que assembleur ici, je pense. Peut-être un niveau plus profond que les instructions du processeur? À un certain point de commandes sont effectivement interprétées par le matériel, mais je ne comprends pas où / comment cela se passe.

Je ne suis pas allé à l'université, donc n'a pas pris un cours CS ou quoi que ce soit. Comme beaucoup, je suis un amateur tourné « pro ». En conséquence, il y a beaucoup de pièces du puzzle que je pense que je suis absent. Je connais un peu C ++, et de comprendre le concept de pointeurs etc (bien que je les ai pas utilisé dans beaucoup de colère), mais je ne l'ai jamais travaillé à un niveau élevé. Je ne suis pas sûr de savoir ce genre de choses kind've me aider ou non, mais il est sûr intéressant.

Était-ce utile?

La solution

Un processeur fonctionne ce qui est connu comme un cycle de lecture-décodage-exécuter. instructions de code de la machine sont assez bas niveau (à savoir qu'ils ne font pas grand-chose en une seule instruction). Par exemple, l'ajout de deux numéros aurait une séquence d'instructions avec la sémantique comme:

  • Charger un pointeur sur l'adresse de l'opérande dans le registre 1 1
  • Charger la valeur stockée à l'adresse mémorisée dans le registre 1 dans le registre 2
  • Charger un pointeur sur l'adresse de l'opérande dans le registre 2 1
  • Charger la valeur stockée à l'adresse dans le registre 1 dans le registre 3
  • Ajoutez le contenu du registre 2 et enregistrer 3 et stocker dans le registre 4
  • Charger un pointeur vers la destination dans le registre 1
  • stocker le contenu du registre 4 à l'adresse indiquée dans le registre 1

Dans le processeur est un ensemble spécial de mémoire rapide connue sous le nom « Enregistrer fichier », qui contient la mémoire que le processeur utilise pour stocker des données qu'il travaille à l'époque. Le fichier de registre a plusieurs registres, qui sont identifiés de manière unique. Les instructions fonctionnent généralement sur les registres, en particulier sur les architectures RISC; alors que ce n'est pas toujours le cas, il est assez bon abstraction pour le moment.

Généralement, un processeur doit charger ou stocker des données dans un registre à tout faire. Des opérations telles que le travail de l'arithmétique sur les registres, en prenant les opérandes de deux registres et en plaçant le résultat dans un troisième (au profit de la galerie d'arachide, I Vous utilisé un 6502 - laisse confondez pas la question; - ). Le processeur comporte des instructions spéciales pour le chargement ou le stockage de données provenant des registres dans la mémoire principale de la machine.

Un processeur a un registre spécial appelé le « compteur de programme » qui stocke l'adresse de la prochaine opération à exécuter. Ainsi, la séquence pour exécuter une instruction va à peu près comme:

  • Fetch l'instruction stockée à l'adresse actuelle dans le compteur de programme.
  • Décoder l'instruction, en singularisant l'opération proprement dite, ce qu'il utilise des registres, le « mode d'adressage » (comment cela fonctionne où obtenir ou stocker des données) et quelques autres bricoles.
  • Exécuter l'instruction.

L'exécution de l'instruction va changer les valeurs dans différents registres. Par exemple, une instruction « de charge » copie une valeur dans un registre. Une arithmétique ou logique (et, ou, XOR) prendra deux valeurs et calculer un troisième. Une instruction de saut ou de la branche va changer l'adresse au compteur de programme afin que le processeur commence à chercher des instructions à partir d'un autre endroit.

Le processeur peut avoir des registres spéciaux. Un exemple d'un tel est le compteur de programme décrit ci-dessus. Un autre type est une condition registre de drapeaux. Cela aura plusieurs bits ayant une signification particulière. Par exemple, il peut avoir un drapeau qui est défini que si le résultat de la dernière opération arithmétique était nulle. Ceci est utile pour les opérations conditionnelles. Vous pouvez comparer deux chiffres. Si elles sont égales, le drapeau « zéro » est réglé. Le processeur peut avoir une instruction conditionnelle qui est exécutée seulement si cette option est activée.

Dans ce cas, vous pouvez décrémenter un compteur dans un registre et si elle était égale à zéro, un drapeau de condition est définie. Une condition (branche sur le zéro) peut être utilisé pour une boucle où vous décrémenter un compteur et sortir de la boucle si le résultat de l'instruction de décrémentation est égal à zéro. Sur certains processeurs (par exemple, la famille de ARM) toutes les instructions conditionnelles, une condition spéciale « faire toujours » pour les instructions non conditionnelles.

Voici quelques exemples d'instructions du processeur typiques sont:

  • incrémenter ou décrémenter un registre
  • Charger ou stocker le contenu d'un registre dans la mémoire. Vous pouvez également avoir l'adresse à charger ou stocker compensée par le contenu d'un autre registre. Cela vous permet de boucler facilement sur un tableau de données en incrémentant l'autre registre.
  • Additionner, soustraire, multiplier, op logiqueOpérations pour calculer les valeurs. Celles-ci prennent opérandes de deux registres et placer le résultat dans un troisième.
  • Saut à un autre endroit - cela déplace le contenu de l'emplacement dans le compteur de programme et commence à chercher des instructions du nouvel emplacement
  • .
  • pousser ou valeurs pop sur une pile.

Ce message stackoverflow a un exemple d'un petit extrait de code C compilé et la sortie en langage assembleur à partir de ce fragment. Il devrait vous donner un exemple du genre de relation entre un langage de haut niveau et la sortie de code machine qu'il compile à.

La meilleure façon d'apprendre est d'obtenir un assembleur et l'essayer. Cette habitude d'être beaucoup plus facile sur les anciens ordinateurs, plus simples comme 8 bits micros des années 1980. La chose la plus proche de ce type d'architecture disponibles ces jours-ci sont des systèmes embarqués. Vous pouvez obtenir une carte de développement pour un processeur embarqué comme un Microchip PIC assez bon marché. Comme ce type d'architecture a moins de bagages qu'un système d'exploitation moderne, il est moins i-t parsemant et passage à utiliser les appels système. Ce sera plus facile d'amorcer un programme en langage assembleur sur ce type d'architecture; l'architecture plus simple est aussi plus facile à comprendre.

Une autre option est d'obtenir un émulateur tel que SPIM . Cela émule un processeur et vous permettent d'assembler et d'exécuter des programmes sur elle. L'avantage d'un tel émulateur est qu'ils comprennent également des installations pour les programmes pas à pas simples (un peu comme un débogueur) et montrant le contenu du fichier de registre. Cela peut être utile pour obtenir un aperçu de ce qui se passe réellement.

Autres conseils

Je voudrais bien vous suggère de lire le livre code , il donne une histoire détaillée de la façon dont l'ordinateur a évolué à partir de différents systèmes.

Il est très attrayant et vous expliquera comment les choses ont évolué à partir du code morse par une machine simple d'ajouter, puis à une assemblée. Il devrait vous donner une image exactement comment les instructions de la machine sont Interpretation d'et utilisés par le matériel d'une unité centrale, mémoire, etc.

Il est en fait une couche supplémentaire ci-dessous langage machine que je l'ai découvert récemment d'un ami. Il est appelé Microcode.

Voir cet article de Wikipedia pour plus de détails: http://en.wikipedia.org/wiki/Microcode

laisse supposer que le plus réel est courant et de tension (si vous allez plus loin, vous pouvez constater que même un électron est une abstraction). La première étape d'abstraction est de considérer qu'une tension + 5V représentent un bit mis à « 1 » et une tension de 0 V représente un bit mis à « 0 ». Avec un interrupteur, vous pouvez décider de la valeur de votre fil.

Avec un second fil et un second interrupteur, vous obtenez deux valeurs binaires. Le plus intéressant à voir avec eux est de combiner leurs valeurs binaires avec des opérations telles AND, OR et NOT. Deux concepts sont impliqués ici: réel et logique pour l'abstraction. Avec cela, vous pouvez effectuer des additions, soustractions et bien d'autres opérations sur vos deux entrées binaires. Vous pouvez ajouter plusieurs fils pour représenter des valeurs autres que « 0 » et « 1 ». Aller dans cette façon, vous obtenez un ALU .

Maintenant, il est temps d'inclure le temps. Si vous voulez plusieurs résultats de votre ALU, vous devez fournir une des données d'entrée à la fois, donc besoin d'une horloge et une unité de contrôle des opérations de séquençage. Vous devez également la mémoire pour stocker des valeurs d'entrée et les résultats, et d'entrée et de sortie pour commander et observer. Aller dans cette façon, vous obtenez un Von Neuman architecture , qui est la base de presque toutes les architectures informatiques .

niveau d'abstraction suivant est quand vous décidez, avec une électronique appropriée, que ce bit particulier en mémoire stimulera ce pixel particulier de votre écran LCD.

Vous pouvez trouver le code de Charles Petzold une lecture intéressante:
http://www.amazon.co. Royaume-Uni / code-Langue-DV-Undefined-Charles-Petzold / dp / 0735611319

La prémisse de votre question est incorrecte. Il n'y a pas de partage. Le logiciel est entré et enregistré électroniquement. Il est juste que le logiciel vous est affiché dans une langue comme l'anglais pour que les humains puissent suivre facilement.

Ainsi, par exemple, lorsque vous entrez « Modifier mon écran de bureau Green, » travail via le clavier, il va directement par voie électronique sur le métal (lire comment clavier / souris / écran tactile). Il est juste que vous le voyez comme texte anglais sur votre écran. Prenez un peu plus loin, le texte que vous entrez est dans un langage de haut niveau, il se converti en code machine pour que CPU peut effectuer la logique là-dessus. Le code de la machine est sous forme électronique également. Par exemple, le texte se transforme en opcodes etc, mais les opcodes sont sous forme électronique et CPU peut traiter celles-ci.

L'essentiel est que tout l'intérieur de votre ordinateur est sous forme électronique à partir du moment où il est entré. Il est soit sur votre disque dur ou de la mémoire (transistors, etc.). Il est juste que vous le voyez dans le texte sur votre écran.

Encore une fois, il n'y a pas de partage. Logiciel enregistré dans la mémoire (transistors, etc.) ou un disque dur est déjà par voie électronique. Matériel (logique dur - portes) est nécessaire pour exécuter le logiciel (ce que vous voulez faire du matériel avec votre logiciel). Vous ne pouvez pas entrer quoi que ce soit dans l'ordinateur sous forme non électronique.

J'espère que cela a du sens.

Eh bien, le point réel où vous rencontrez le matériel dépend de ce que vous faites, bien sûr. Mais pour prendre votre (excellent) exemple de « l'affichage du texte »:

De l'abstrait au matériel:

  • Types d'utilisateur lettres dans son traitement de texte (wp)
  • logiciel wp stocke les premières lettres en mémoire dans le cadre du document en cours d'édition
  • logiciel wp indique la bibliothèque d'interface utilisateur, il utilise ce qu'il veut afficher le texte en cours d'édition dans une fenêtre (cela arrive sans cesse, bien sûr). La bibliothèque de l'interface utilisateur sera dépendante du système (l'API Windows sur MS Windows, Windows ou X QT, etc. sous Linux, AWT / Swing Java etc.)
  • La bibliothèque de l'interface utilisateur passera les données à travers quelques couches d'abstraction. En particulier, il effectuera rastérisation (convertir les informations « montrer un A » dans la grille de pixels qui représente un A)
  • Finalement, les informations seront transmises au pilote de périphérique de la carte graphique. C'est là que nous rencontrons :-) matériel « réel ». Normalement, la carte graphique expose « la mémoire vidéo », à savoir la mémoire sur la carte que le CPU peut écrire. Le pilote de la carte graphique (qui fonctionne sur le CPU) va écrire les pixels pour un A à la mémoire vidéo.
  • Les circuits de la carte graphique liront la mémoire vidéo et convertir les données en y un signal vidéo qui sort le connecteur vidéo sur la carte et au moniteur.
  • Le moniteur affiche ce qui ressemble, espérons comme un A: -)

Cette explication ne peut pas être trop academical mais c'est ce que je comprends (ne pas aller à l'université non plus).

La première étape implique l'algèbre de Boole qui a prouvé au 19'th siècle toute opération mathématique peut être exprimée en utilisant une série de symboles et certains opérateurs associés. Ainsi, la base 10 arithmétique avec la commune +, -, *, / opérateurs peuvent être exprimés en utilisant seulement deux symboles (0, 1 / vrai, faux) et les opérateurs logiques (AND, OR, etc.) conduisant à la logique booléenne est base mathématique de calcul numérique.

La deuxième étape est travail de Alan Turing qui a construit un modèle mathématique d'un imaginaire machine capable de traiter des symboles. La description naïve d'une machine de Turing serait tout automate qui possède une mémoire (pour stocker l'état de ce), fonctionne sur une série de symboles représentant son état et interpréter une autre série de symboles qui définissent le passage d'un état à l'autre.

Le processeur numérique moderne est une implémentation d'une machine de Turing qui utilise l'algèbre logique de Boole comme le symbole et la base opérateur (jetez un oeil à un comité d'entreprise How Stuff explication détaillée de la logique de Boole au travail ). La raison en est que les vrai / faux états logiques peuvent être facilement mis en correspondance avec des signaux électriques (+, -) et leurs opérateurs associés peuvent être mises en œuvre dans des circuits à transistors que, compte tenu d'une entrée binaire (signal électrique) peut délivrer en sortie le résultat en fonction de la opérateurs booléens. Ainsi, tout ordinateur moderne est une machine qui a de la mémoire pour stocker l'état de ce (codé sous forme électrique / magnétique binaire) et un ensemble de circuits qui acceptent les impulsions et les opérateurs électriques (les instructions du processeur) et des résultats de sortie en conséquence à une vitesse très rapide.

Ainsi, chaque programme écrit dans un langage informatique est finalement traduit par le compilateur ou l'exécution dans une série d'opérations booléennes pour le processeur à exécuter

Code de la machine, je crois, est aussi faible niveau que l'on peut aller. Il est entendu directement par le processeur et exécutée sans un interprète. Le processeur est construit avec un certain jeu d'instructions qui définissent le code machine pour une architecture donnée (x86, PPC, ARM, etc.).

Tout de dessin des lettres sur l'écran pour calculer pi est, à son niveau le plus de base, exécutez dans le code de la machine. Dessin lettres sur l'écran est juste une question de créer un code machine qui calcule la hauteur des lettres, des couleurs et des emplacements de pixels et les parcelles sur un écran à l'aide d'un périphérique de sortie vidéo.

Eh bien, si vous savez comment le processeur accède à la mémoire, alors vous connaissez déjà la réponse. Mémoire et autres matériels sont accessibles dans (presque) de la même manière, en fonction de wether le processeur utilise « la mémoire mappée IO » ou « IO cartographié IO ». Dans le premier cas, le processeur essaie juste de lire et écrire à une adresse mémoire - mais il n'y a pas là mémoire - c'est plutôt un autre périphérique matériel, mais le processeur ne peut pas vraiment faire la différence. Dans ce dernier cas est très similaire.

Par contre, si vous avez aucune idée sur la façon dont le processeur accède à la mémoire, vous devriez regarder ce qu'est un « bus d'adresse » et un « bus de données » est de vous aider à démarrer.

Vous obtenez mal.

Tout l'ordinateur ne, que ce soit montrant des lettres sur l'écran ou faire quelques calculs, et peut être consulté à différents (beaucoup) niveaux d'abstraction, du courant électrique à la manipulation des concepts abstraits comme l'argent sur un compte bancaire.

Cela dit, la construction du circuit pour un simple microprocesseur est pas difficile, une ALU, des registres et une logique de contrôle. Altera a ce que des tutoriels avancés pour la carte de démarrage Cyclone II, mais je ne peux pas trouver sur le web.

Voici la vraie affaire. Mon point de départ. Tout a besoin d'énergie pour fonctionner. On / Off est défini dans une limite. par exemple si entre 3 et 5 v il est allumé si moins de 3 volts son arrêt. Un concept de code morse. Je travaille sur un thermomètre, alors je dois faire ou acheter un capteur. Ensuite, je dois calibrer. Traduire les signaux à partir du signal sans signal ou l'intensité du signal à une température. C'est là où je suis maintenant.

Ce n'est pas facile de répondre en une phrase. Lire un livre sur l'architecture informatique, apprendre un certain assemblage et je suis sûr que vous comprendrez comment cela se produit.

Lorsque nous entrons dans une touche ou donner une quelconque commande alors de petites vagues électriques sont devenues exigibles en appuyant sur la clé est en fait, nous complétons le circuit

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top