home *** CD-ROM | disk | FTP | other *** search
- EASM51.DOC
-
- voir aussi:
- EASM51.PAS ; code source de l'assembleur
- ALLOPC.A51 ; toutes les instructions du 8051
- DEMO*.A51 ; fichiers de démonstration programmation
- BSP*.A51 ; exemples de programmation
-
- Mode d'emploi de l'assembleur EASM51
-
- ---------------------------------------------------------------------
-
- Lancement: EASM51 [nom du fichier] [options]
-
- Nom du fichier: Nom du fichier à "assembler" SANS EXTENSION. L'assembleur
- utilise le fichier avec l'extension .A51 comme SOURCE, le
- fichier ***.LST comme LISTING et le fichier ***.HEX comme
- listing HEXADÉCIMAL.
-
- Options: admissibles sont:
- -NOLIST : sans génération de listing
- -NOHEX : sans génération de listing hexadécimal
- -NOSYMTAB : sans génération de tableau de symboles dans
- le listing
-
- En cas d'erreur, l'assembleur affiche un code de sortie <>0 .
-
- ---------------------------------------------------------------------
-
- Fichiers:
- EASM51.EXE : programme exécutable
- EASM51.PAS : code source en Turbo-Pascal
- EASM51.DOC : documentation
-
- ---------------------------------------------------------------------
-
- Format de lignes de programmation
-
- En règle générale, une ligne de programmation se compose de 3 parties:
-
- LABEL INSTRUCTION COMMENTAIRE
-
- Si le premier caractère d'une ligne est l'un des caractères A à Z, voire a à z,
- le premier symbole de la ligne sera considéré comme un LABEL.
- Un LABEL peut se terminer avec un double point (":"); ceci n'est pourtant pas
- obligatoire. Un LABEL a une longueur maximale de 8 caractères et l'on peut
- utiliser le signe de soulignement ("_"). L'assembleur fait la distinction
- entre les majuscules et les minuscules !!
-
- Si le premier caractère d'une ligne est un espace (un blanc) l'assembleur
- n'attend pas de LABEL et continue:
-
- La partie suivante de la ligne sera interprétée comme instruction (pseudo-
- assembleur ou machine).
-
- Si l'assembleur rencontre, à n'importe quel endroit, un point-virgule (";"),
- le reste de la ligne sera interprété comme commentaire.
-
- Exemples:
-
- *********************************************************************
- ;
- ; 10 lignes de programmation d'exemple pour l'assembleur EASM51
- ;
- ORG 0000H ; adresse de lancement
- START NOP ; commentaire
- NOP
- MOV A,#2 ; chargement d'une constante
- ENCORE LJMP START ; boucle
- ; uniquement commentaire
- ;
- **********************************************************************
- fichier d'exemple DEMO2.A51:
- **********************************************************************
-
- ; DEMO2.A51
- ;
- ORG 1000H
- START MOV A,R0
- RET
- TEXT DB '1234',0
- ;
- END
- *********************************************************************
-
- Les différentes parties d'une ligne peuvent commencer dans n'importe
- quelle colonne.
-
- ---------------------------------------------------------------------
-
- Instructions de commande de l'assembleur ( Pseudo-Opcodes ):
-
- ORG expr
- DB expr,expr,expr ...
- DS expr
- Label EQU expr
- END
-
- L'assembleur fait appel à un compteur d'emplacements interne qui mémorise
- où, dans la mémoire (de programme), l'octet suivant doit être stocké.
-
- L'instruction
-
- ORG expr
-
- attribue au compteur d'emplacements la valeur de l'expression arithmétique
- expr.
- Cette instruction est utilisée pour positionner le programme à un endroit
- bien défini de la mémoire. (ORG: ORIGIN)
-
-
- L'instruction
-
- DS expr
-
- se traduit par une augmentation du compteur d'emplacements de la valeur de
- l'expression arithmétique expr. et peut être utilisée aussi pour gérer la RAM
- interne. (DS: DEFINE STORAGE)
-
-
- L'instruction
-
- DB expr,expr,....
-
- dépose, sous la forme d'octets, les valeurs des expressions arithmétiques
- dans la mémoire de programme et augmente la valeur du compteur d'emplacement
- autant que cela est nécessaire. On peut utiliser également des constantes
- de texte. (DB: DEFINE BYTE)
-
-
- L'instruction
-
- Label EQU expr
-
- Attribue au LABEL la valeur de l'expression arithmétique expr.
- (EQU: EQUATE)
-
-
- L'instruction
-
- END
-
- caractérise la fin du fichier.
-
- ---------------------------------------------------------------------
-
- Représentation de constantes numériques et de texte:
-
- CONSTANTES NUMÉRIQUES:
-
- Nombres décimaux: représentation normale
- Nombres hexadécimaux: pour pouvoir les distinguer de LABEL, ces chiffres
- se caractérisent par le H à leur fin et doivent
- commencer avec un signe de 0 à 9.
- Nombres binaires: se caractérisent par le B à leur fin.
- Constante de caractère: un caractère délimité par des apostrophes
- Constante de texte: une chaîne de caractères délimitée par des apostrophes
- (ne peut être utilisée qu'avec l'instruction DB)
-
- Exemples:
- Nombres décimaux 0 00001 12324
- Nombres hexadécimaux 0H 1H 0ABCDH 01000H 0C000H
- Nombres binaires 1B 10B 11111010B
- Constantes de caractère 'A' '0' 'x'
- Constantes de texte 'XYZ' '0123456789H' 'Un texte'
-
- ---------------------------------------------------------------------
- Expressions arithmétiques:
-
- Constantes numériques et
- constantes de caractère sont des expressions arithmétiques.
- LABEL sont des expressions arithmétiques.
- $ est une expression arithmétique,
- VAL = VALeur du compteur d'emplacements
-
- Étant donné que expr1 et expr2 sont des expressions arithmétiques,
- les expressions suivantes le sont également:
-
- -expr1 ; constitution de la valeur négative
- expr1 + expr2 ; somme
- expr1 - expr2 ; différence
- expr1 * expr2 ; produit
- expr1 / expr2 ; nombre entier du quotient
-
- ---------------------------------------------------------------------
- LISTING HEXADÉCIMAL
-
- L'assembleur génère, comme code-objet, un fichier de texte qui prend
- la forme d'un LISTING HEXADÉCIMAL, dont chaque ligne a le format
- suivant:
-
- n1 n2:b1 b2 ..... bn n3
-
- n1 nombre des octets à suivre sous forme de nombre hexadécimal
- à 2 chiffres
- n2 adresse des octets à suivre sous forme de nombre hexadécimal
- à 4 chiffres
- b1 bis bn les octets du code-objet, sous forme de nombre hexadécimal à
- 2 chiffres respectivement, séparés par des blancs
- n3 total de la somme des octets du code objet, sous forme de
- nombre hexadécimal à 4 chiffres
-
- Exemple (DEMO2.HEX) :
- 07 1000:E8 22 31 32 33 34 00 01D4
-
- ---------------------------------------------------------------------
- Listing
- Le listing généré prend la forme suivante:
-
- ****** LISTING of EASM51 (DEMO2) ******
- LINE LOC OBJ T SOURCE
- 1 0000 ; DEMO2.A51
- 2 0000 ;
- 3 0000 ORG 1000H
- 4 1000 E8 [1] START MOV A,R0
- 5 1001 22 [2] RET
- 6 1002 31 32 33 TEXTE DB '1234',0
- 34 00
- 7 1007 ;
- 8 1007 END
- symboltable (2 symbols) :
- START :1000 TEXTE:1002
-
- Dans la colonne "LINE" le numéro de ligne est indiqué sous forme de nombre
- décimal.
- La colonne "LOC" (LOCation) comporte la valeur du compteur d'emplacements sous
- forme de nombre hexadécimal à 4 chiffres.
- La colonne "OBJ" montre le code objet généré.
- La colonne "T" donne la durée d'exécution en cycles. Si l'on utilise un
- quartz de 12 MHz, un cycle a une durée de 1 microseconde.
- La colonne "SOURCE" comporte le code source du fichier.
-
- ---------------------------------------------------------------------
-
- Messages d'erreur de EASM51:
-
- string length
- La chaîne de caractères indiquée est trop longue.
-
- missing or invalid term
- Absence d'expression arithmétique valable.
-
- unknown expression
- Impossibilité de calcul de l'expression arithmétique.
-
- missing expression
- Il manque une expression arithmétique.
-
- missing term
- Il manque un terme arithmétique.
-
- internal buffer overflow
- La ligne génère trop d'octets OPCODE.
-
- range error
- L'expression arithmétique ne peut pas être comprise dans l'octet.
-
- syntax
- Erreur de SYNTAXE.
-
- unknown address
- L'adresse indiquée est inconnue.
-
- relative jump range
- Saut trop éloigné.
-
- far jump range
- Saut trop éloigné.
-
- base value not bit addressable
- Valeur ne peut pas être adressée par bit.
-
- unknown opcode
- Instruction inconnue.
-
- invalid expression
- Expression arithmétique invalide.
-
- missing label
- Il manque un LABEL (étiquette).
-
- double defined label
- Double définition du même LABEL (étiquette).
-
- invalid line
- FIN de ligne invalide.
- --------------------------------------------------------------------------