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:44] goupillwikinsi:premiere:architecture:langage_assembleur [2024/01/04 12:19] (Version actuelle) goupillwiki
Ligne 87: Ligne 87:
   * dans d'autres cas il ne dispose que du registre contenant le résultat, le **registre de travail**.   * 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.**+**Dans notre cas, l'UAL n'aura qu'un registre de travail.** On appelle parfois ce registre **W** pour **W**ork.
  
 ==== Exemple ==== ==== Exemple ====
Ligne 124: Ligne 124:
     MOV @x    // contenu de x dans travail     MOV @x    // contenu de x dans travail
     CMP #0    // on va comparer à 0     CMP #0    // on va comparer à 0
-    BGE fin   // si plus grand ou égal, sauter à ligne étiquetée "L"+    BGE L     // si plus grand ou égal, sauter à ligne étiquetée "L"
     MULT #-1  // multiplier travail par -1     MULT #-1  // multiplier travail par -1
     STR @x    // stocker travail dans x     STR @x    // stocker travail dans x
Ligne 130: Ligne 130:
 </code> </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 143: 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.1704278657.txt.gz · Dernière modification : de goupillwiki