nsi:premiere:architecture:langage_assembleur
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| nsi:premiere:architecture:langage_assembleur [2023/09/13 14:31] – créée 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 | + | ===== Assembleur et architecture du microprocesseur |
| - | Bien que certain standard se soient mis en place, le langage | + | L'assembleur est très proche du matériel. Il faut donc connaître au moins un peu l' |
| - | Le langage proposé ci-dessous n'est qu'un exemple correspondant à un processeur fictif que j'ai inventé pour les besoins du cours. | + | {{ : |
| - | ==== Jeu d' | + | La plupart des processeurs adoptent la structure dite de **Von Neumann**. |
| - | === Une instruction | + | * 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' | ||
| - | Un programme est toujours composé dune liste d' | + | ==== Registre ==== |
| - | Pour le processeur, une instruction est toujours un mot binaire. Dans notre exemple, une instruction est toujours **un mot de 16 bits**. | + | On utilisera souvent |
| - | <WRAP tip> | + | 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 |
| - | Dans certains processeurs, | + | |
| - | D' | + | ==== UAL ==== |
| - | Il y a eu un temps une mode pour le CISC. Mais c'est aujourd'hui plutôt | + | L' |
| - | </ | + | * certains microprocesseurs disposent des circuits |
| + | * d'autres ne savent faire que des PLUS et des MOINS avec des entiers. | ||
| + | * dans certains cas, l'UAL dispose d'une trentaine de registres pour faire ses calculs, | ||
| + | * dans d'autres cas il ne dispose que du registre contenant | ||
| + | |||
| + | **Dans notre cas, l'UAL n'aura qu'un registre de travail.** On appelle parfois ce registre **W** pour **W**ork. | ||
| + | |||
| + | ==== Exemple ==== | ||
| - | Notre exemple sera donc de type RISC. | + | < |
| + | MOV #4 | ||
| + | ADD #8 | ||
| + | STR @x | ||
| + | </ | ||
| - | === Format === | + | Chaque ligne est une instruction simple que le processeur est capable d' |
| + | * charger la valeur 4 dans le registre de travail, | ||
| + | * 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.// | ||
| - | Sur les 16 bits disponibles pour écrire coder une instruction, | + | ==== Premiers enseignements ==== |
| - | * attribuer 6 bits pour indiquer le nom de l' | + | |
| - | * les 10 bits restants permettent de préciser un argument. C'est à dire 2 bits pour préciser un type d' | + | |
| - | C'est encore abstrait, voyons un exemple : '' | + | Les instructions sont peu variées et elles correspondent aux différents organes du processeur. |
| - | Le mot d' | + | Voici le genre de chose qu'une instruction |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | L'instruction '' | + | * copier une donnée d'une case mémoire à une autre, |
| + | * exécuter un calcul avec l'UAL, | ||
| + | * lire en entrée / écrire en sortie, | ||
| + | * changer le flux d'instruction : instructions de saut. | ||
| - | <WRAP important> | + | ==== Flux d'instructions ==== |
| + | 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 '' | ||
| - | ===== Le langage de la machine | + | <code python> |
| + | if x < 0: | ||
| + | x *= -1 | ||
| + | </ | ||
| - | On appelle **Assembleur** le langage | + | Le code assembleur est toujours très long comparé à l' |
| - | Pour comprendre comment fonctionne l' | + | ==== 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 HALT | ||
| + | </ | ||
| + | Ce programme comporte 6 lignes et utilise une variable '' | ||
| + | < | ||
| + | MOV @x | ||
| + | CMP #0 | ||
| + | BGE L | ||
| + | MULT #-1 | ||
| + | STR @x | ||
| + | L HALT | ||
| + | x DATA | ||
| + | </ | ||
| + | ce qui permet d' | ||
nsi/premiere/architecture/langage_assembleur.1694608309.txt.gz · Dernière modification : de goupillwiki
