Catégories
Electronique

L’assembleur

Le processeur ne peut exécuter les instructions que de son langage propre (famille de processeur), écrit en assembleur. Un programmeur à besoin de langages pouvant exprimer des instructions en utilisant un code autres que le binaire.

On s’intéresse ici au langage assembleur qui est très proches du processeur, très liés. Contrairement aux autres langages plus évolué, celui-ci permet des facilités de traitements, d’accéder au ressources (registres), de tirer entièrement profit de sa machine, et de s’exécuter bien plus rapidement.

Comme tout langages, l’assembleur a quelque lacunes, d’une part car il n’est pas portables, ils ne exécutera que sur un microprocesseur de même type, et d’autres part il faut savoir que l’assembleur suit une logique primaires, ce qui nous vaut des programmes plus long et complexe à écrire.

Parmi les langages assembleur vous pourrez certainement trouver plus ample pour vous faire une idée mais on peut en citer 3 qui ont la même syntaxe; asm, masm, tasm, il en existe d’autres tel que nasm avec des syntaxes assez différentes.

On comprend donc que le langage assembleur permet de contrôler directement un processeur. Sachez que du code assembleur peux être inséré dans certain langage tel que C. Ce langage de bas niveau utilise des mots clés (symboles mnémoniques), des codes. La plupart du temps ces mots clés représente la base de l’action effectué par l’instruction (souvent en anglais).

Un processeur n’exécute pas un langage assembleur, on n’as besoin d’un assembleur (programme).

La première phase du traitement d’un programme écrit en assembleur est son assemblage, le programme source est traduit en langage compréhensible pour la machine, le programme objet obtenue est ainsi stocké dans un fichier, sa deuxième étape de traitement est l’édition des liens et enfin le traitement de l’exécution du programme (quel données utilisées et qui produit des résultats).

Viens notre fichier .OBJ obtenue suite de l’assemblage de notre code, qui contient le produit binaire (résultat). Celui-ci n’est encore pas totalement exécutable par notre processeur. L’utilitaire de liens (selon votre assembleur) va continué le travail en lisant le fichier .OBJ pour créer un fichier exécutable. Ont peux également faire commuter plusieurs fichiers .OBJ pour ne créer qu’un seul fichier exécutable.

Les registres, leurs taille différent en fonction de l’architecture du processeur, chaque instructions du processeur passent par ces registre pour toutes ces opérations.

Les registres de base;

  • ADD AX, Val Ajoute à AX la valeur indiquée et stocke le résultat dans AX
  • ADD AX, Adr Ajoute à AX la valeur stockée à l’adresse indiquée et stocke le résultat dans AX
  • CMP AX, Val Compare AX et la valeur indiquée
  • CMP AX, Adr Compare AX et la valeur stockée à l’adresse indiquée
  • DEC AX Décrémente AX (soustrait 1)
  • INC AX Incrémente AX (ajoute 1)
  • JA adr Saut à l’adresse indiquée si CF=0
  • JB adr Saut à l’adresse indiquée si CF=1
  • JE adr Saut à l’adresse indiquée si égalité
  • JG adr Saut à l’adresse indiquée si supérieur
  • JLE adr Saut à l’adresse indiquée si inférieur
  • JNE adr Saut à l’adresse indiquée si non-égalité

Pour vous donné une idée, mais ils existe les registres d’index, les registres de segment, le registre pointeurs d’instructions, le registre drapeaux permettant d’indiquer l’état, les contrôles.. et bien d’autres.

Concevez avant toutes choses que comme pour tout autres langage de programmations, le fichier sources de votre programme ce doit d’avoir une certaine rigueur. On peux dire que chaque définition ou instructions doit être écrite sur une nouvelle ligne. Un fichier sources se doit d’avoir;

1.Un nom du programme sous TITLE.
2.Une partie pour déclarer une pile qui est définie dans le segment de pile délimité par les directives SEGMENT STACK et ENDS.
3.Des définitions de données déclarées par des directives. Celles-ci sont regroupées dans le segment de données délimité par les directives SEGMENT et ENDS.
4.Ensuite sont placées les instructions (le cœur du programme), la première devant être précédée d’une étiquette, c’est-à-dire par un nom qu’on lui donne. Celles-ci sont regroupées dans le segment d’instructions délimité par les directives SEGMENT et ENDS.
5.Enfin, le fichier doit être terminé par la directive END suivi du nom de l’étiquette de la première instruction (pour permettre au compilateur de connaître la première instruction à exécuter).

Ci-joint une table de conversion.

By Platon-y.