CALM - un langage d'assemblage commun pour microprocesseurs ARTICLE
2 Instructions
Une instruction exécute une action révolue, définie par le fabricant du microprocesseur. Le texte
suivant illustre, comment une instruction est décomposée et comment ces parties séparées sont
nommées et quelle notation est utilisée.
2.1 Composition d'une instruction\
Une instruction est constituée d'un code opératoire et d'opérandes. A cela il faut ajouter selon la
complexité des codes conditions, des indicateurs d'adresses et des indicateurs de données.
Cette composition modulaire d'une instruction et l'indépendance de la signification des parties
séparées permettent des extensions quelconques. Mais ce concept impose que toutes les
indications doivent être présentes même pour les instructions avec possibilités limitées.
CALM définit 49 instructions de base. Avec celles, on peut exprimer environ 95% des instructions
d'un microprocesseur. Le reste est dû à des instructions spéciales où on réutilise le code
opératoire du fabricant, mais on utilise la notation CALM pour les opérandes, le code condition, et
les indicateurs d'adresses et de données.
L'instruction MOVE détermine l'ordre source -> destination (de gauche à droite). Il faut aussi
garder cet ordre pour les autres instructions, par exemple pour l'instruction SUB.
2.1.1 Instructions de transfert
MOVE source, destination transfère de la source vers la destination.
PUSH source empiler (équivalent à MOVE source,{-SP}).
POP destination dépiler (équivalent à MOVE {SP+}, destination).
CONV source, destination effectue une conversion de type de données.
CLR destination met à zéro opérande de destination. (= MOVE #0, destination.).
SET destination initialise l opérande de destination:1s (= MOVE #-1, destination).
EX opérande1, opérande2 échange les deux opérandes.
SWAP sourcedestination échange les deux moitiés de l'opérande.
2.1.2 Instructions arithmétiques
ADD source, sourcedestination additionne deux opérandes.
source1, source2, destination
ADDC voir ADD additionne deux opérandes et l'indicateur C
SUB voir ADD soustrait le premier opérande du second op.
SUBC voir ADD 2nd opérande - 1er opérande - l'indicateur C.
ACOC voir ADD additionne le complément à un du 1er opérande 1 et l'indicateur de
report Carry au 2nd opérande L'opération effectuée. Est égale à
SUBC mais les indicateurs sont modifiés autrement.
NEG sourcedestination calcule le complément vrai (complément à 2 ou source, destination
soustrait de 0) de l'opérande de source.
NEGC voir NEG calcule le complément vrai avec l'indicateur de report Carry, c.à.d.
soustrait l’opérande et Carry de zéro.
MUL source,sourcedestination
source1,source2,destination multiplie les deux opérandes de source. Si l'opérande de destination
n'est pas explicitement précisé par sa taille de données il n'est pas
clair si la taille de l'opérande de destination est simple ou double.
DIV diviseur,dividendequotient divise le 2nd opérande par le premier.
diviseur,dividende,quotient
diviseur,dividende,quotient,reste
INC sourcedestination incrémente l'opérande de un.
DEC sourcedestination décrémente l'opérande de un.
COMP source1,source2 compare le second opérande au premier. C'est la même opération
que SUB, mais il n'y a pas de résultat généré (uniquement les
indicateurs sont mis à jour).
CHECK limite_inf,limite_sup,source contrôle une valeur entre 2 limites.