125 views
--- tags: 1NSI, langage machine --- # Langage machine ## Modèle et réalité Un **modèle**, en sciences, est une représentation idéale et simplifiée de la réalité. Ainsi, le **modèle de von Neumann** est une vision simple mais réaliste de ce qu'est un ordinateur "en vrai". Nous allons dans cette activité utiliser VIC (["the visual computer"](https://faculty.runi.ac.il/vic/software/computer/)), un ordinateur "virtuel", lui aussi simplifié, mais utilisable. Suivant le modèle de von Neumann, VIC comporte quatre parties : 1. une entrée (input) 2. une sortie (output) 3. un processeur (CPU) 4. une mémoire (memory) La mémoire de VIC est une liste de cent nombres entiers naturels compris entre 0 et 999 (une case vide correspond à un 0). Le processeur est ici partagé en trois parties : 1. un **registre d'instruction** qui contient l'instruction en cours d'exécution 2. un **registre de données** (data register) : car certaines instructions peuvent avoir besoin d'une donnée supplémentaire 3. un **compteur ordinal** (program counter) un registre qui indique l'adresse mémoire de la prochaine instruction à exécuter. :::info **À retenir** Un **registre** est un emplacement de mémoire interne à un processeur. Les registres se situent au sommet de la hiérarchie mémoire : il s'agit de la mémoire la plus rapide d'un ordinateur, mais dont le coût de fabrication est le plus élevé. La plupart des ordinateurs (comme VIC) travaillent en trois étapes : 1. chargement des données (y compris les instructions) depuis la mémoire vers le registres 1. calcul par le processeur à partir des données enregistrées dans les registres 2. écriture dans la mémoire ou les périphériques de sortie. Ces trois étapes sont répétées autant de fois qu'il le faut, depuis le démarrage de l'ordinateur. ::: Voici ci-dessous l'ordinateur virtuel VIC : <iframe src="https://faculty.runi.ac.il/vic/software/computer/" width="800" height="600"></iframe> ## Langage machine ### Qu'est-ce que c'est ? Python est un langage de programmation "de haut niveau" : il est fait pour être compréhensible par des humains. Mais les ordinateurs utilisent un autre langage "à bas niveau", c'est-à-dire au niveau de la machine. :::info Un processeur ne peut exécuter qu'un assez petit nombre d'instructions différentes. L'ensemble de ces instructions et la façon de les coder constituent un **langage machine**. C'est le seul langage que comprend un processeur. Chaque marque de processeur possède un langage machine différent des autres marques. Un langage machine est constitué uniquement de 0 et de 1, que les humains écrivent parfois en convertissant ces 0 et 1 en nombre entiers naturels en écriture décimale. ::: ### Le langage machine de VIC L'ordinateur virtuel VIC possède son propre langage machine, très simple et limité. Voici la liste complète des instructions de VIC. | Code | nom | Description | | ---- | ----- | ------------------------------------------------------------------------------------ | | 000 | STOP | Arrête l'exécution du programme | | 1xx | ADD | Ajoute la valeur de la mémoire d'adresse xx au registre de données | | 2xx | SUB | Soustrait la valeur de la mémoire d'adresse xx du registre de données | | 3xx | LOAD | Charge la valeur de la mémoire d'adresse xx dans le registre de données | | 4xx | STORE | Enregistre la valeur du registre de données dans la mémoire xx | | 5xx | GOTO | Exécute l'instruction située à l'adresse xx de la mémoire | | 6xx | GOTOZ | Comme GOTO, mais seulement si la valeur du registre de données est égale à zéro | | 7xx | GOTOP | Comme GOTO, mais seulement si la valeur du registre de données est supérieure à zéro | | 800 | READ | Lit la prochaine valeur d'entrée (Input) et l'affecte au registre de donnéess | | 900 | WRITE | Écrit la valeur du registre de données dans la sortie (Output) | ### Comment exécuter un programme ? Pour exécuter un programme dans VIC, il faut : - d'abord taper une à une les instructions dans les cases de la mémoire, à partir de la case 0 - puis cliquer sur le bouton ![](https://faculty.runi.ac.il/vic/software/Controls/p_single.gif) pour démarrer le programme pas à pas ou ![](https://faculty.runi.ac.il/vic/software/Controls/run.gif) pour exécuter tout le programme. Ensuite, VIC va exécuter l'instruction de la case 0, puis passer à la case suivante, et recommencer. Le programme s'arrête dès qu'il rencontre une case mémoire égale à 0 (ou vide). On suppose que toutes les cases mémoire vides contiennent la valeur 0. VIC exécute les instructions case par case : après exécution d'une case, il passe à la suivante (sauf pour les instructions 5xx, 6xx et 7xx). ### Quelques programmes Étudiez les programmes suivants. ### Programme 1 ``` 304 105 900 0 30 12 ``` ### Programme 2 ``` 800 490 800 491 190 900 ``` ### Programme 3 ``` 800 490 800 491 290 709 390 900 000 391 900 000 ``` ### Programme 4 ``` 398 490 800 491 610 190 490 800 491 504 390 900 000 ``` Imaginez des programmes très simples et programmez-les avec le langage machine de VIC. Écrivez-les sur votre cahier et testez-les. En particulier, sauriez-vous programmer une boucle infinie ? Un "clignotant" (qui affiche en alternance 0 et 1 sans s'arrêter) ? Aller plus loin ? Pourquoi pas créer un VIC en Python ? Il ne sera pas visuel mais en mode texte.