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:19] – 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 56: | Ligne 60: | ||
| </ | </ | ||
| - | ===== Un exemple de langage | + | ===== Assembleur et architecture du microprocesseur ===== |
| + | |||
| + | L' | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | La plupart des processeurs adoptent la structure dite de **Von Neumann**. | ||
| + | |||
| + | * L' | ||
| + | * l' | ||
| + | * la mémoire contient toutes les données utiles : résultats de calculs mais aussi le programme lui-même ; | ||
| + | * entrées / sorties car le processeur doit servir à quelque chose, il agit sur l' | ||
| + | |||
| + | ==== Registre ==== | ||
| + | |||
| + | 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 ==== | ||
| + | |||
| + | < | ||
| + | MOV #4 | ||
| + | ADD #8 | ||
| + | STR @x | ||
| + | </ | ||
| + | |||
| + | Chaque ligne est une instruction simple que le processeur est capable d' | ||
| + | * charger la valeur 4 dans le registre | ||
| + | * additionner 8 au contenu du registre de travail, | ||
| + | * écrire le contenu du registre de travail dans la mémoire étiqueté x -- //STR signifie STORE, c'est à dire stocker.// | ||
| + | |||
| + | ==== 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 : | ||
| + | |||
| + | * copier une donnée d'une case mémoire à une autre, | ||
| + | * exécuter un calcul avec l' | ||
| + | * lire en entrée / écrire en sortie, | ||
| + | * changer le flux d' | ||
| + | |||
| + | ==== Flux d' | ||
| + | |||
| + | Détaillons le dernier item qui est le moins évident. Un programme s' | ||
| + | |||
| + | 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 | ||
| + | |||
| + | ==== Littéral et adresse ==== | ||
| + | |||
| + | Dans le morceau de programme, vous pouvez voir '' | ||
| + | |||
| + | On aurait pu voir '' | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | 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 | ||
| + | |||
| + | Il faut comprendre que la mémoire contiendra à la fois le programme et les données du programme. Reprenons le programme précédent. | ||
| + | |||
| + | < | ||
| + | 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.1694611182.txt.gz · Dernière modification : de goupillwiki
