L'assembleur sur Simulateur 5 M. DALMAU IUT de Bayonne
L'ASSEMBLEUR DU SIMULATEUR
La syntaxe d'une ligne d'assembleur est :
[etiquette:] [COP [operande1 [, operande2]]] [; commentaire]
Où un terme noté entre crochets est facultatif.
• Une étiquette est un mot qui ne doit comporter aucun caractère défini comme délimiteur par le
langage ( ' " ; , [ ] ) ni d'espaces. Elle peut contenir des caractères accentués et elle doit être
terminée par :
• Le COP est l'un des codes définis précédemment il peut indifféremment être écrit en minuscules ou
en majuscules.
• Un commentaire débute au ; et se termine à la fin de la ligne. Il peut contenir tous les caractères sauf
des guillemets ( " ).
Désignation des opérandes dans les instructions autres que celles de rupture de
séquence :
Registre : On met le nom du registre qui contient l'opérande (en majuscules ou minuscules)
exemple : LD R0,r1 ; R0 ← R1
Valeur immédiate : On met la valeur de l'opérande selon la forme :
décimal 123 ou –4 valeur de 0 à 655355 ou –32767 à 32767
hexadécimal $1a ou $ffa3 valeur sur 16 bits (4 digits hexadécimaux au maximum)
binaire %01110010 valeur sur 16 bits (16 chiffres binaires au maximum)
ASCII 'a' code ASCII d'un caractère
ATTENTION : Le caractère placé entre ' ne peut être " ni ; car ce sont des délimiteurs définis dans le
langage (délimiteurs de chaîne de caractères et de commentaire)
exemples : LD R1,$ff03 ; R1 ← FF03 en hexadécimal
LD R2,'A' ; R2 ← code ASCII de 'A'
Direct : On met le nom de la variable
exemples : LD R0,var1 ; R0 ← contenu de var1
ST R2,var2 ; var2 ← contenu de R2
ATTENTION : Un nom de variable doit commencer par une lettre et ne comporter aucun caractère
défini comme délimiteur par le langage ( ' " ; , [ ] ). Le compilateur distingue les majuscules et les
minuscules et accepte les caractères accentués. De plus un nom de variable ne doit pas pouvoir être
confondu avec un nom de registre ni être le mot clé STACK.
Indirect : Le registre désigné contient l'adresse de l'opérande (seuls les 10 bits de faible poids du
registre sont pris en compte). On met le nom du registre entre crochets.
exemples : LD R0,[SP] ; R0 ← contenu de la mémoire à l'adresse contenue dans SP
LD [R1],12 ; mémoire à l'adresse contenue dans R1 ← 12
LD [R1],r3 ; mémoire à l'adresse contenue dans R1 ← contenu de R3
LD [r1],var ; mémoire à l'adresse contenue dans R1 ← contenu de var
ST [R2],var2 ; var2 ← contenu de la mémoire à l'adresse contenue dans R2
LD [sp],[R1] ; mémoire à l'adresse contenue dans SP ← contenu de la
mémoire à l'adresse contenue dans R1
Désignation des opérandes dans les instructions de rupture de séquence :
On met l'étiquette qui désigne l'instruction à laquelle on doit aller (le nom seul de l'étiquette sans les :).
exemple : BNE début