Systèmes embarqués - Langage d'assemblage

Les langages d'assemblage ont été développés pour fournir mnemonicsou des symboles pour les instructions de code de niveau de la machine. Les programmes en langage d'assemblage sont constitués de mnémoniques, ils doivent donc être traduits en code machine. Un programme responsable de cette conversion est appeléassembler. Le langage d'assemblage est souvent qualifié de langage de bas niveau car il fonctionne directement avec la structure interne du processeur. Pour programmer en langage assembleur, un programmeur doit connaître tous les registres du CPU.

Différents langages de programmation tels que C, C ++, Java et divers autres langages sont appelés langages de haut niveau car ils ne traitent pas les détails internes d'un processeur. En revanche, un assembleur est utilisé pour traduire un programme en langage assembleur en code machine (parfois également appeléobject code ou opcode). De même, un compilateur traduit un langage de haut niveau en code machine. Par exemple, pour écrire un programme en langage C, il faut utiliser un compilateur C pour traduire le programme en langage machine.

Structure du langage d'assemblage

Un programme en langage assembleur est une série d'instructions, qui sont soit des instructions en langage assembleur telles que ADD et MOV, soit des instructions appelées directives.

Un instruction indique au CPU quoi faire, tandis qu'un directive (aussi appelé pseudo-instructions) donne des instructions à l'assembleur. Par exemple, les instructions ADD et MOV sont des commandes exécutées par la CPU, tandis que ORG et END sont des directives assembleur. L'assembleur place l'opcode à l'emplacement de mémoire 0 lorsque la directive ORG est utilisée, tandis que END indique la fin du code source. Une instruction de langage de programme comprend les quatre champs suivants:

[ label: ]   mnemonics  [ operands ]   [;comment ]

Un crochet carré ([]) indique que le champ est facultatif.

  • le label fieldpermet au programme de se référer à une ligne de code par son nom. Les champs d'étiquette ne peuvent pas dépasser un certain nombre de caractères.

  • le mnemonics et operands fieldsexécutent ensemble le vrai travail du programme et accomplissent les tâches. Des instructions comme ADD A, C & MOV C, # 68 où ADD et MOV sont les mnémoniques, qui produisent des opcodes; "A, C" et "C, # 68" sont des opérandes. Ces deux champs peuvent contenir des directives. Les directives ne génèrent pas de code machine et ne sont utilisées que par l'assembleur, tandis que les instructions sont traduites en code machine pour que l'UC s'exécute.

1.0000         ORG  0H            ;start (origin) at location 0 
2 0000 7D25    MOV  R5,#25H       ;load 25H into R5 
3.0002 7F34    MOV  R7,#34H       ;load 34H into  R7 
4.0004 7400    MOV  A,#0          ;load 0 into A 
5.0006 2D      ADD  A,R5          ;add contents of R5 to A 
6.0007 2F      ADD  A,R7          ;add contents of R7 to A
7.0008 2412    ADD  A,#12H        ;add to A value 12 H 
8.000A 80FE    HERE: SJMP HERE    ;stay in this loop 
9.000C END                        ;end of asm source file
  • le comment field commence par un point-virgule qui est un indicateur de commentaire.

  • Notez l'étiquette "ICI" dans le programme. Toute étiquette faisant référence à une instruction doit être suivie de deux points.

Assemblage et exécution d'un programme 8051

Ici, nous allons discuter de la forme de base d'un langage d'assemblage. Les étapes pour créer, assembler et exécuter un programme en langage assembleur sont les suivantes:

  • Tout d'abord, nous utilisons un éditeur pour saisir un programme similaire au programme ci-dessus. Les éditeurs tels que le programme MS-DOS EDIT fourni avec tous les systèmes d'exploitation Microsoft peuvent être utilisés pour créer ou modifier un programme. L'éditeur doit être capable de produire un fichier ASCII. L'extension "asm" pour le fichier source est utilisée par un assembleur à l'étape suivante.

  • Le fichier source "asm" contient le code de programme créé à l'étape 1. Il est transmis à un assembleur 8051. L'assembleur convertit ensuite les instructions du langage assembleur en instructions de code machine et produit un.obj file (fichier objet) et un .lst file(fichier de liste). Il est également appelé comme unsource file, c'est pourquoi certains assembleurs exigent que ce fichier ait les extensions "src". Le fichier "lst" est facultatif. Il est très utile au programme car il répertorie tous les opcodes et adresses ainsi que les erreurs détectées par les assembleurs.

  • Les assembleurs nécessitent une troisième étape appelée linking. Le programme de liaison prend un ou plusieurs fichiers objet et produit un fichier objet absolu avec l'extension "abs".

  • Ensuite, le fichier "abs" est envoyé à un programme appelé "OH" (convertisseur d'objet en hexadécimal), qui crée un fichier avec l'extension "hex" qui est prêt à être gravé dans la ROM.

Type de données

Le microcontrôleur 8051 contient un seul type de données de 8 bits, et chaque registre a également une taille de 8 bits. Le programmeur doit décomposer les données supérieures à 8 bits (00 à FFH, ou à 255 en décimal) afin qu'elles puissent être traitées par le CPU.

DB (définir l'octet)

La directive DB est la directive de données la plus utilisée dans l'assembleur. Il est utilisé pour définir les données 8 bits. Il peut également être utilisé pour définir des données au format décimal, binaire, hexadécimal ou ASCII. Pour les décimales, le "D" après le nombre décimal est facultatif, mais il est obligatoire pour "B" (binaire) et "Hl" (hexadécimal).

Pour indiquer ASCII, placez simplement les caractères entre guillemets («comme ça»). L'assembleur génère automatiquement du code ASCII pour les nombres / caractères. La directive DB est la seule directive qui peut être utilisée pour définir des chaînes ASCII de plus de deux caractères; par conséquent, il doit être utilisé pour toutes les définitions de données ASCII. Quelques exemples de DB sont donnés ci-dessous -

ORG  500H 
DATA1:  DB   28                     ;DECIMAL (1C in hex) 
DATA2:  DB   00110101B              ;BINARY  (35 in hex) 
DATA3:  DB   39H                    ;HEX 
        ORG  510H 
DATA4:  DB   "2591"                 ;ASCII  NUMBERS 
        ORG  520H                         
DATA6:  DA   "MY NAME IS Michael"   ;ASCII CHARACTERS

Des guillemets simples ou doubles peuvent être utilisés autour des chaînes ASCII. DB est également utilisé pour allouer de la mémoire en blocs de taille octet.

Directives d'assembleur

Certaines des directives de 8051 sont les suivantes -

  • ORG (origin)- La directive d'origine est utilisée pour indiquer le début de l'adresse. Il prend les nombres au format hexa ou décimal. Si H est fourni après le nombre, le nombre est traité comme hexa, sinon décimal. L'assembleur convertit le nombre décimal en hexa.

  • EQU (equate)- Il permet de définir une constante sans occuper un emplacement mémoire. EQU associe une valeur constante à une étiquette de données pour que l'étiquette apparaisse dans le programme, sa valeur constante sera remplacée par l'étiquette. Lors de l'exécution de l'instruction "MOV R3, #COUNT", le registre R3 sera chargé avec la valeur 25 (notez le signe #). L'avantage d'utiliser EQU est que le programmeur peut le changer une fois et l'assembleur changera toutes ses occurrences; le programmeur n'a pas à rechercher l'ensemble du programme.

  • END directive- Il indique la fin du fichier source (asm). La directive END est la dernière ligne du programme; tout ce qui suit la directive END est ignoré par l'assembleur.

Étiquettes en langage d'assemblage

Toutes les étiquettes en langage d'assemblage doivent suivre les règles données ci-dessous -

  • Chaque nom d'étiquette doit être unique. Les noms utilisés pour les étiquettes dans la programmation en langage assembleur se composent de lettres alphabétiques en majuscules et minuscules, de chiffres de 0 à 9 et de caractères spéciaux tels que point d'interrogation (?), Point (.), Au taux @, soulignement (_), et dollar ($).

  • Le premier caractère doit être en caractère alphabétique; ce ne peut pas être un nombre.

  • Les mots réservés ne peuvent pas être utilisés comme étiquette dans le programme. Par exemple, les mots ADD et MOV sont les mots réservés, car ce sont des mnémoniques d'instructions.