Outils pour utilisateurs

Outils du site


nsi:premiere:architecture:langage_assembleur

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
nsi:premiere:architecture:langage_assembleur [2024/01/03 11:31] – [Registre] goupillwikinsi:premiere:architecture:langage_assembleur [2024/01/04 12:19] (Version actuelle) goupillwiki
Ligne 78: Ligne 78:
  
 Un registre est une mémoire très rapide utilisée au cœur du microprocesseur. Un microprocesseur contient généralement une mémoire interne constituée de registres. On trouve d'autres registres comme le registre qui mémorise la ligne d programme à laquelle on se trouve ou bien les registres utilisés par l'unité de calcul. Un registre est une mémoire très rapide utilisée au cœur du microprocesseur. Un microprocesseur contient généralement une mémoire interne constituée de registres. On trouve d'autres registres comme le registre qui mémorise la ligne d programme à laquelle on se trouve ou bien les registres utilisés par l'unité de calcul.
 +
 +==== UAL ====
 +
 +L'**U**nité **A**rithmétique et **L**ogique fait les calculs. Ce sont des calculs simples mais ils sont à la base de tout ce que fera le microprocesseur. Ces un composant essentiel qui peut faire une grande différence d'un microprocesseur à un autre :
 +  * certains microprocesseurs disposent des circuits pour faire des opérations compliquées comme des //cosinus//, //racines carrées//, des opérations sur les flottants...
 +  * d'autres ne savent faire que des PLUS et des MOINS avec des entiers.
 +  * dans certains cas, l'UAL dispose d'une trentaine de registres pour faire ses calculs,
 +  * dans d'autres cas il ne dispose que du registre contenant le résultat, le **registre de travail**.
 +
 +**Dans notre cas, l'UAL n'aura qu'un registre de travail.** On appelle parfois ce registre **W** pour **W**ork.
  
 ==== Exemple ==== ==== Exemple ====
Ligne 94: Ligne 104:
 ==== Premiers enseignements ==== ==== Premiers enseignements ====
  
-Les instructions sont peu variées et elles correspondent aux différents organes du processeur. Voici le genre de chose qu'une instruction peut faire :+Les instructions sont peu variées et elles correspondent aux différents organes du processeur. 
 + 
 +Voici le genre de chose qu'une instruction peut faire :
  
   * copier une donnée d'une case mémoire à une autre,   * copier une donnée d'une case mémoire à une autre,
   * exécuter un calcul avec l'UAL,   * exécuter un calcul avec l'UAL,
-  * lire / écrire en entrée / sortie,+  * lire en entrée / écrire en sortie,
   * changer le flux d'instruction : instructions de saut.   * changer le flux d'instruction : instructions de saut.
  
Ligne 106: Ligne 118:
  
 Mais parfois on a besoin de recommencer un bloc d'instructions (boucle) ou bien de ne pas exécuter un bloc d'instruction (alternative comme //if//). Dans ces cas là, on ne veut pas simplement passer à la ligne suivante. On veut passer (on dit souvent //sauter// = //jump//) à une certaine ligne du programme. Certaines instructions sont là pour cela. Mais parfois on a besoin de recommencer un bloc d'instructions (boucle) ou bien de ne pas exécuter un bloc d'instruction (alternative comme //if//). Dans ces cas là, on ne veut pas simplement passer à la ligne suivante. On veut passer (on dit souvent //sauter// = //jump//) à une certaine ligne du programme. Certaines instructions sont là pour cela.
 +
 +Voyons un exemple avec un branchement.
 +
 +<code:asm>
 +    MOV @x    // contenu de x dans travail
 +    CMP #0    // on va comparer à 0
 +    BGE L     // si plus grand ou égal, sauter à ligne étiquetée "L"
 +    MULT #-1  // multiplier travail par -1
 +    STR @x    // stocker travail dans x
 +L   HALT      // fin
 +</code>
 +
 +Vous noterez que l'on a ajouté une marge pour permettre l'ajout d'une étiquette en tête de ligne. On pourrait aussi numéroter les lignes mais l'usage est plutôt de mettre une étiquette pour indiquer les lignes où l'on est susceptible de sauter.
 +
 +Vous pouvez constater que dans ce programme, suivant la valeur de ''x'', on ne fait pas la même chose. On pourrait le traduire en Python :
 +
 +<code python>
 +if x < 0:
 +    x *= -1
 +</code>
 +
 +Le code assembleur est toujours très long comparé à l'équivalent dans un langage évolué.
  
 ==== Littéral et adresse ==== ==== Littéral et adresse ====
Ligne 118: Ligne 152:
 Souvent, on ne veut pas spécifier une adresse explicitement. Il est donc rare que l'on note quelque chose comme ''%%@4%%''. On écrit plutôt quelque chose comme ''%%@x%%'' et on laisse le système décider dans quel case mémoire il placera ''x''. Souvent, on ne veut pas spécifier une adresse explicitement. Il est donc rare que l'on note quelque chose comme ''%%@4%%''. On écrit plutôt quelque chose comme ''%%@x%%'' et on laisse le système décider dans quel case mémoire il placera ''x''.
  
-==== Registre de travail ====+==== Programme et données ====
  
-Le microprocesseur fictif que l'on utilisera sera assez simple. Dans ce microprocesseur, l'UAL écrit toujours son résultat dans un registre particulier. On l'appelle **registre de travail** et on le note parfois **W** -- W comme WORK.+Il faut comprendre que la mémoire contiendra à la fois le programme et les données du programme. Reprenons le programme précédent.
  
-Par exemple, la ligne Python : +<code:asm
- +    MOV @x 
-<code:python+    CMP #0 
-= x + 1+    BGE L 
 +    MULT #-1 
 +    STR @x 
 +L   HALT
 </code> </code>
  
-devient en assembleur :+Ce programme comporte 6 lignes et utilise une variable ''x''. Dans le microprocesseur, les 6 lignes de programme occuperont les lignes 0 à 5. On pourra placer ''x'' en ligne 6. Si on veut explicitement placer ''x'' à la suite du programme, on peut écrire :
  
 <code:asm> <code:asm>
-MOV @x +    MOV @x 
-ADD #1 +    CMP #
-STR @x+    BGE L 
 +    MULT #-
 +    STR @x 
 +L   HALT 
 +x   DATA
 </code> </code>
  
-Comprendre : +ce qui permet d'indiquer que la ligne mémoire après la ligne contenant ''HALT'' devra contenir la mémoire ''x''.
-  * charger le contenu de ''x'' dans W, +
-  * ajouter ''1'' à W, +
-  * stocker le contenu de W dans ''x''. +
- +
-Vous voyez que, sous-entendu, toutes les opérations faisant intervenir l'UAL passent par le registre de travail W. +
- +
- +
-===== Un exemple de langage assembleur ===== +
- +
-Bien que certain standard se soient mis en place, le langage assembleur est le langage d'un processeur particulier et donc, suivant les technologies mis en œuvre dans un processeur donné, l'assembleur sera différent. +
- +
-Le langage proposé ici n'est qu'un exemple correspondant à un processeur fictif que j'ai inventé pour les besoins du cours. +
- +
-[[.:exemple_assembleur|Exemple de langage assembleur]]+
nsi/premiere/architecture/langage_assembleur.1704277875.txt.gz · Dernière modification : de goupillwiki