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 15:50] – goupillwiki | nsi:premiere:architecture:langage_assembleur [2024/01/04 12:19] (Version actuelle) – goupillwiki | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== Langage Assembleur ====== | ====== Langage Assembleur ====== | ||
| - | Dans ce cours, on présente | + | Bien que certains standards se soient mis en place, le langage |
| + | |||
| + | Le langage proposé dans ce cours n'est qu'un exemple | ||
| ===== Compilation / Interprétation ===== | ===== Compilation / Interprétation ===== | ||
| Ligne 13: | 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 30: | 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 72: | 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> |
| MOV #4 | MOV #4 | ||
| ADD #8 | ADD #8 | ||
| Ligne 88: | 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 100: | 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 ==== | ||
| - | Dans le morceau de programme, vous avez pu voir '' | + | Dans le morceau de programme, vous pouvez |
| On aurait pu voir '' | On aurait pu voir '' | ||
| Ligne 110: | Ligne 150: | ||
| * '' | * '' | ||
| + | Souvent, on ne veut pas spécifier une adresse explicitement. Il est donc rare que l'on note quelque chose comme '' | ||
| + | ==== Programme et données ==== | ||
| - | ===== Un exemple de langage assembleur ===== | + | Il faut comprendre que la mémoire contiendra à la fois le programme et les données du programme. Reprenons le programme précédent. |
| - | 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' | + | < |
| + | MOV @x | ||
| + | CMP #0 | ||
| + | BGE L | ||
| + | MULT #-1 | ||
| + | STR @x | ||
| + | L | ||
| + | </ | ||
| - | Le langage proposé ici n'est qu'un exemple correspondant à un processeur fictif que j'ai inventé pour les besoins du cours. | + | Ce programme comporte 6 lignes et utilise une variable |
| + | |||
| + | < | ||
| + | MOV @x | ||
| + | CMP #0 | ||
| + | BGE L | ||
| + | MULT #-1 | ||
| + | STR @x | ||
| + | L | ||
| + | x | ||
| + | </ | ||
| - | [[.: | + | ce qui permet d' |
nsi/premiere/architecture/langage_assembleur.1694613058.txt.gz · Dernière modification : de goupillwiki
