nsi:premiere:architecture:langage_assembleur
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| nsi:premiere:architecture:langage_assembleur [2024/01/03 11:31] – [Registre] goupillwiki | nsi: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' | 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' | ||
| + | |||
| + | ==== UAL ==== | ||
| + | |||
| + | L' | ||
| + | * certains microprocesseurs disposent des circuits pour faire des opérations compliquées comme des // | ||
| + | * d' | ||
| + | * dans certains cas, l'UAL dispose d'une trentaine de registres pour faire ses calculs, | ||
| + | * dans d' | ||
| + | |||
| + | **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 | + | * lire en entrée / écrire en sortie, |
| * changer le flux d' | * changer le flux d' | ||
| Ligne 106: | Ligne 118: | ||
| Mais parfois on a besoin de recommencer un bloc d' | Mais parfois on a besoin de recommencer un bloc d' | ||
| + | |||
| + | Voyons un exemple avec un branchement. | ||
| + | |||
| + | < | ||
| + | MOV @x // contenu de x dans travail | ||
| + | CMP #0 // on va comparer à 0 | ||
| + | BGE L // si plus grand ou égal, sauter à ligne étiquetée " | ||
| + | MULT #-1 // multiplier travail par -1 | ||
| + | STR @x // stocker travail dans x | ||
| + | L | ||
| + | </ | ||
| + | |||
| + | Vous noterez que l'on a ajouté une marge pour permettre l' | ||
| + | |||
| + | Vous pouvez constater que dans ce programme, suivant la valeur de '' | ||
| + | |||
| + | <code python> | ||
| + | if x < 0: | ||
| + | x *= -1 | ||
| + | </ | ||
| + | |||
| + | Le code assembleur est toujours très long comparé à l' | ||
| ==== 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 '' | Souvent, on ne veut pas spécifier une adresse explicitement. Il est donc rare que l'on note quelque chose comme '' | ||
| - | ==== Registre de travail | + | ==== Programme et données |
| - | Le microprocesseur fictif | + | Il faut comprendre |
| - | Par exemple, la ligne Python : | + | <code:asm> |
| - | + | MOV @x | |
| - | <code:python> | + | CMP #0 |
| - | x = x + 1 | + | BGE L |
| + | MULT #-1 | ||
| + | STR @x | ||
| + | L HALT | ||
| </ | </ | ||
| - | devient | + | Ce programme comporte 6 lignes et utilise une variable '' |
| < | < | ||
| - | MOV @x | + | |
| - | ADD #1 | + | |
| - | STR @x | + | BGE L |
| + | MULT #-1 | ||
| + | STR @x | ||
| + | L | ||
| + | x DATA | ||
| </ | </ | ||
| - | Comprendre : | + | ce qui permet d'indiquer que la ligne mémoire après la ligne contenant |
| - | * charger le contenu de '' | + | |
| - | * ajouter | + | |
| - | * stocker le contenu de W dans '' | + | |
| - | + | ||
| - | Vous voyez que, sous-entendu, | + | |
| - | + | ||
| - | + | ||
| - | ===== 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' | + | |
| - | + | ||
| - | Le langage proposé ici n'est qu'un exemple correspondant à un processeur fictif que j'ai inventé pour les besoins du cours. | + | |
| - | + | ||
| - | [[.: | + | |
nsi/premiere/architecture/langage_assembleur.1704277875.txt.gz · Dernière modification : de goupillwiki
