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 [2023/09/13 16:08] – goupillwiki | nsi:premiere:architecture:langage_assembleur [2024/01/04 12:19] (Version actuelle) – goupillwiki | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== Langage Assembleur ====== | ====== Langage Assembleur ====== | ||
| - | Bien que certain standard | + | Bien que certains standards |
| - | Le langage proposé | + | Le langage proposé |
| ===== Compilation / Interprétation ===== | ===== Compilation / Interprétation ===== | ||
| Ligne 15: | Ligne 15: | ||
| À mesure de l' | À mesure de l' | ||
| + | |||
| + | C est un langage qui reste assez difficile parce qu'il nécessite une bonne compréhension de ce qui se passe dans la machine. Python est au contraire très proche de l' | ||
| </ | </ | ||
| Ligne 32: | Ligne 34: | ||
| Le travail de traduction peut ajouter des erreurs, il peut faire perdre quelque chose... Autrefois, les programmes écrits directement en Assembleur étaient toujours plus performants que ceux compilés/ | Le travail de traduction peut ajouter des erreurs, il peut faire perdre quelque chose... Autrefois, les programmes écrits directement en Assembleur étaient toujours plus performants que ceux compilés/ | ||
| - | Aujourd' | + | Aujourd' |
| Apprendre l' | Apprendre l' | ||
| Ligne 74: | Ligne 76: | ||
| On utilisera souvent le mot **registre**. On peut considérer que c'est une case mémoire. Elle contient une donnée, un mot binaire. | On utilisera souvent le mot **registre**. On peut considérer que c'est une case mémoire. Elle contient une donnée, un mot binaire. | ||
| + | |||
| + | 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 ==== | ||
| - | <Code:asm> | + | <code:asm> |
| MOV #4 | MOV #4 | ||
| ADD #8 | ADD #8 | ||
| STR @x | STR @x | ||
| - | </Code> | + | </code> |
| Chaque ligne est une instruction simple que le processeur est capable d' | Chaque ligne est une instruction simple que le processeur est capable d' | ||
| Ligne 90: | 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 102: | 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 114: | 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 que l'on utilisera sera assez simple. Dans ce microprocesseur, | + | |
| - | + | ||
| - | Par exemple : | + | |
| + | Il faut comprendre que la mémoire contiendra à la fois le programme et les données du programme. Reprenons le programme précédent. | ||
| - | ===== Un exemple de langage assembleur ===== | + | < |
| + | MOV @x | ||
| + | CMP #0 | ||
| + | BGE L | ||
| + | MULT #-1 | ||
| + | STR @x | ||
| + | L | ||
| + | </ | ||
| - | Bien que certain standard se soient mis en place, le langage assembleur est le langage d'un processeur particulier | + | Ce programme comporte 6 lignes |
| - | Le langage proposé ici n'est qu'un exemple correspondant à un processeur fictif que j'ai inventé pour les besoins du cours. | + | < |
| + | MOV @x | ||
| + | CMP #0 | ||
| + | BGE L | ||
| + | MULT #-1 | ||
| + | STR @x | ||
| + | L | ||
| + | x | ||
| + | </ | ||
| - | [[.: | + | ce qui permet d' |
nsi/premiere/architecture/langage_assembleur.1694614105.txt.gz · Dernière modification : de goupillwiki
