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.