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 :

Comment le processeur comprend-il le code machine ?


Sujet :

Assembleur

  1. #1
    Invité1
    Invité(e)
    Par défaut Comment le processeur comprend-il le code machine ?
    Comment le processeur comprend-il le code machine ?
    Et comment fait-il pour l'exécuter ?

    Depuis que je m'intéresse à l'informatique, tous les livres, cours, tutoriels que j'ai pu lire ou voir n'ont toujours pas répondu à ma question...
    On y parle toujours du matériel, de l'OS, de la programmation... enfin de l'Assembleur !

    Tout arrête toujours au même endroit... En compilant le code, il est transformé en code que le processeur va comprendre...

    Bon... ... Ok ...

    Et il comprend comment lui ?

    Comment le processeur fait-il pour comprendre ? Je n'arrive absolument pas à comprendre ! Comment est-ce que le processeur peut calculer, comparer des nombres ?

    Je sais que ce n'est pas la section idéale pour ce message, mais je n'en voyais pas d'autre...

    Merci d'avance de votre aide

    Alex
    Dernière modification par Alcatîz ; 15/02/2013 à 17h09.

  2. #2
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Tu devrais trouver ton bonheur ici : http://systeme.developpez.com/cours/#architecture

  3. #3
    Invité1
    Invité(e)
    Par défaut
    Merci beaucoup! Je vais lire tout ça bientôt!

    (merci d'avoir changé le titre! Je ferai plus attention à l'avenir!)

    Alex

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 414
    Points : 23 870
    Points
    23 870
    Par défaut
    Citation Envoyé par Alexandreg12 Voir le message
    Merci beaucoup! Je vais lire tout ça bientôt!

    (merci d'avoir changé le titre! Je ferai plus attention à l'avenir!)

    Alex
    Il faudrait que tu fasses un tout petit peu d'assembleur, car alors tu verrais les codes opérations associées à chacune de tes instructions, en vis-à-vis. Le véritable langage du processeur commencerait alors à apparaître à tes yeux.

    En gros, la seule chose que sache faire un microprocesseur est 1) lire des données en mémoire 2) appliquer un jeu d'instruction arithmétiques ou logiques fixe et restreint sur ces données 3) écrire ces données modifiées ailleurs en mémoire. Un peu comme un palan sur un dock.

    Il est donc conçu pour commencer à un endroit défini de la mémoire dès sa mise sous tension, par exemple l'adresse 00000000, et la valeur de l'octet qu'il va y lire va correspondre à une des opérations qu'il sait faire (par exemple : 0 additionne 1 soustrait 2 décale vers la gauche 3 décale vers la droite, 4 multiplie, ...). Ce sont les fameux codes-opérations.

    Cette consigne lue, ton processeur va s'attacher à remplir sa mission. Pour ce faire, il peut avoir besoin de données, qu'il va chercher ... dans la mémoire, à la suite du code-opération. Si l'octet N° 00000000 contenait MUL, l'ordre de multiplier (représenté dans mon exemple par la valeur 4), alors le CPU va aller chercher ses multiplicandes dans les octets 00000001 et 00000002. Une fois l'opération achevée, il lit la consigne suivante dans l'octet suivant, en l'occurence le n° 00000003, etc. Et ton processeur va avancer de cette manière sans s'arrêter, jusqu'à mise hors-tension.

    Évidemment, ce sont les grandes lignes. Il existe des instructions comme HALT qui stoppent le microprocesseur jusqu'à arrivée d'une « interruption », il dispose de registres pour retenir les infos sur une durée arbitraire, etc.

    Maintenant, quelles sont ces opérations ? Des opérations logiques de bases qui peuvent être obtenues par câblage au niveau électronique. Les plus fondamentales sont les opérations booléenes ET, OU, XOR, etc. Câblées ensemble, ces opérations permettent d'en définir d'autres, arithmétiques par exemple, telle que l'additionneur, sur le modèle du ripple carry :

    http://en.wikipedia.org/wiki/Adder_(electronics)

    En utilisant des XOR, tu peux inverser les bits d'un des ports d'entrées, et transformer ton additionneur en soustracteur. En faisant sortir la ligne qui contrôle les XOR, ton appareil est bi-valent : 0 ADD 1 SUB.

    De proche en proche, tu obtiens une « unité arithmétique et logique ». Si tu colles autour des registres pour les opérandes et le code opération, un séquenceur pour aller lire le tout depuis la mémoire, l'un après l'autre, et une horloge pour faire marcher le tout, tu as fabriqué un CPU.

    Ça veut dire également que le microprocesseur ne communique avec son entourage qu'en lisant en en écrivant dans la mémoire (les interruptions mises à part). Donc, en théorie, tu pourrais faire marcher un ordinateur entier rien qu'avec des pointeurs ! Ou rien qu'en utilisant PEEK et POKE, à l'é-poke du BASIC des années 80. Ce qui permettait d'épater ses amis avec des tours de magie assez amusants.

    Sur un processeur de PC, il y a des systèmes supplémentaires, par exemple deux bus distincts, un pour la RAM et un pour les périphériques (les fameux inb, outb) et plein d'autres choses très excitantes, mais le principe fondamental reste le même (celui de la machine de Turing).

  5. #5
    Invité1
    Invité(e)
    Par défaut
    wow! Merci de cette formidable réponse!!

    tout commence à être plus clair maintenant!

    Merci beaucoup!

    Alex

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Jao,

    [TROLL]

    Le processeur ne comprend pas le code machine, il l'exécute.

    [/TROLL]

  7. #7
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Il faudrait que tu fasses un tout petit peu d'assembleur, car alors tu verrais les codes opérations associées à chacune de tes instructions, en vis-à-vis. Le véritable langage du processeur commencerait alors à apparaître à tes yeux.
    Sur PC les processeurs passent depuis longtemps par un jeu d'instructions intermédiaire et n'exécutent plus "nativement" le code x86.

    Citation Envoyé par Obsidian Voir le message
    En utilisant des XOR, tu peux inverser les bits d'un des ports d'entrées, et transformer ton additionneur en soustracteur. En faisant sortir la ligne qui contrôle les XOR, ton appareil est bi-valent : 0 ADD 1 SUB.
    En complément à deux il faudrait encore ajouter un après l'inversion non ?

    Citation Envoyé par Obsidian Voir le message
    Sur un processeur de PC, il y a des systèmes supplémentaires, par exemple deux bus distinct, un pour la RAM et un pour les périphériques (les fameux inb, outb) et plein d'autres choses très excitantes, mais le principe fondamentale reste le même (celui de la machine de Turing).
    La mémoire et les I/O ont un espace d'adressage différent mais ils utilisent le même bus d'adresses.

  8. #8
    Invité1
    Invité(e)
    Par défaut
    ouf!!! C'est tellement complexe!

    Vous comprenez tout ça vous??

    C'est possible de tout comprendre??

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 414
    Points : 23 870
    Points
    23 870
    Par défaut
    Citation Envoyé par dapounet Voir le message
    Sur PC les processeurs passent depuis longtemps par un jeu d'instructions intermédiaire et n'exécutent plus "nativement" le code x86.
    - Chaque chose en son temps ;
    - Il n'y a pas que les x86. Les PICs, par exemple, sont guère plus performants que les 8 bits de l'époque, et sont pourtant très à la mode.

    En complément à deux il faudrait encore ajouter un après l'inversion non ?
    Si, mais comme tes additionneurs en cascade sont pourvus d'une retenue d'entrée, il suffit de la relier à cette même ligne.

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 414
    Points : 23 870
    Points
    23 870
    Par défaut
    Citation Envoyé par Alexandreg12 Voir le message
    ouf!!! C'est tellement complexe!

    Vous comprenez tout ça vous??

    C'est possible de tout comprendre??
    Non, c'est pas très dur, c'est même très cohérent puisque c'est inventé par l'homme dans le dernier demi-siècle. Seulement on ne peut pas résumer la totalité de la génèse des micro-processeurs en un seul post.

    Mais avec une heure d'explication et une feuille de papier, tout deviendrait limpide.

  11. #11
    Invité1
    Invité(e)
    Par défaut
    wow! une heure? malheureusement je ne connais personne capable de m'expliquer! . . .

    Comme j'ai dit, je ne souhaite pas apprendre en détails l'architecture d'un processeur moderne! Mais si je comprend les bases, je crois que le reste n'est que logique (plus gros (et plus petit en même temps , plus rapide . . .)
    Dernière modification par Invité1 ; 14/08/2008 à 04h47.

  12. #12
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 414
    Points : 23 870
    Points
    23 870
    Par défaut
    Citation Envoyé par Alexandreg12 Voir le message
    wow! une heure? malheureusement je ne connais personne capable de m'expliquer! . . .
    Je tâcherai peut-être d'écrire un papier un jour si vraiment je n'en trouve pas de bon avant, ce qui serait quand même très étonnant ...

    Comme j'ai dit, je ne souhaite pas apprendre en détails l'architecture d'un processeur moderne! Mais si je comprend les bases, je crois que le reste n'est que logique (plus gros (et plus petit en même temps , plus rapide . . .)
    Intuition correcte :-) Le problème, c'est que ça vire au troll assez vite : il y a des gens qui vont te dire que c'est dans les 8 bits que l'on fait les meilleures soupes, d'autres te diront qu'au grand jamais il ne faut regarder vers le passé ! Une chose est sûre, plus tu verras de machines différentes et mieux ce sera.

    Moi, j'étais assez fan du 6809 en son temps. Ni trop compliqué ni trop simple, un jeu d'instruction bien pensé et des mnémoniques bien choisis. L'éducation nationale était d'accord pendant un temps, également ... Tu peux aussi regarder le Z80 qui a été extrêmement répandu, sachant que ces vénérables bébêtes ne sont plus en service depuis longtemps.

    Essaie la famille des 68000, aussi. Dans la directe lignée des Motorola. L'adage disait que les Intel sont conçus par des électroniciens, les Motorola par des programmeurs. Ça résume assez bien la situation.

  13. #13
    Invité1
    Invité(e)
    Par défaut
    Ah ah!! J'ai tellement hâte de comprendre

    J'ai l'impression que ça va débloquer dans ma tête et que je vais me dire: "Ah!! C'est pas si complexe finalement!"

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 145
    Points : 170
    Points
    170
    Par défaut
    Pour compléter le tout, un ouvrage de référence qui rentre dans le détail tout en restant très simple :
    Architecture de l'ordinateur - A. Tannenbaum

  15. #15
    Invité1
    Invité(e)
    Par défaut
    Est-ce que vous avez des bonnes suggestions de lectures en-ligne pour comprendre tout ça??

    Merci beaucoup!

  16. #16
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Chaque processeur possède un Reference Manual qui contient toutes les spécifications de celui-ci. Notamment tout ce qui est : comment convertir un code en assembleur en code machine et comment comprendre un code machine.

    Par exemple pour le M68k :
    http://www.freescale.com/files/archi.../M68000PRM.pdf

  17. #17
    Invité1
    Invité(e)
    Par défaut
    Je sais cela . . . Par contre, je crois que je vais devoir comprendre un peu plus avant de me mettre à litre des documents comme ça !

  18. #18
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 70
    Points : 92
    Points
    92
    Par défaut
    en ce mettant au plus bas :

    le processeur n'est rien d'autres qu'un rassemblement de transistor, il ne fait aucune analyse. Cherche sous le net des exemples de circuit logique avec des transistors (additionneur, inverseur ....) cela t'aidera ...

    Une opération (add, sub, ...) n'est pour lui qu'un branchement (via des transistors) vers un autre ensemble de transistors qui feront l'opération demandé (addition, soustraction, etc...) en prenant les état présentés sur les lignes de données.

    Le tout est cadencé par la fréquence de la carte mère (démultiplier au sein du processeur, là encore via des transistors voir "Phase-Looked Loops" sur le net)

    C'est pas plus compliquer.

  19. #19
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bon, je détérre le sujet, mais c'est pour y apporter une contribution qui je pense sera utile a quelques "passants"

    Pour comprendre, étudie quelques cours sur la logique combinatoire et séquentielle, code un additionneur (enfin, commence par un demi aditionneur 4 bits) UNIQUEMENT sous à l'aide de transistors, un soustracteur, puis un circuit pour switcher vers l'un ou l'autre en fonction d'un bit de position (i.e : switch a 0 : additionneur, switch a 1 : soustracteur)

    Une fois que ta bête fonctionneras, crois moi, tu verras tout sous un autre angle

Discussions similaires

  1. Comment connaitre les disques dur d'une machine dans un code ?
    Par GeekettePower dans le forum Langage
    Réponses: 3
    Dernier message: 27/06/2006, 01h43
  2. comment lire apartir d'un lecteur code barre
    Par saim mohamed dans le forum Langage
    Réponses: 4
    Dernier message: 12/09/2005, 11h57
  3. Comment fermer une Fenetre Modal avec Code ?
    Par Soulama dans le forum Langage
    Réponses: 19
    Dernier message: 13/07/2005, 12h17
  4. [ImageMagick] Comment générer une image d'un code à entrer ?
    Par MiJack dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 16/01/2005, 22h29
  5. Code machine
    Par Willand dans le forum Assembleur
    Réponses: 2
    Dernier message: 20/01/2003, 19h44

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