Add W,Reg | [C,D,Z] | Add Reg,W | [C,D,Z] |
Sub W,Reg,W | [C,D,Z] | Sub Reg | [C,D,Z] |
Sub W,#Val,W | [C,D,Z] | Add #Val,W | [C,D,Z] |
Selon l'habitude de Motorola, la soustraction A-B s'écrit Sub B,A.
Le résultat est en général dans A, mais il pourrait être
dans un autre registre C et on écrirait Sub B,A,C
Le PIC a une particularité inhabituelle lorque l'on veut soustraire un
valeur immédiate. L'instruction Sub #Valeur,A
(on prend le contenu de A, on soustrait la valeur et on met le résultat
dans A) qui existe sur tous les autres processeurs est remplacée par
un Sub W,#Valeur,W.
La notation Calm est dans ce cas très explicite et évite des erreurs
ultérieures : On prend la valeur, on soustrait le contenu de W et on
met le résultat dans W. On obtient le complément à 2 de
l'instruction Sub #Valeur,w,
que l'on peut générer par un Add #-Valeur,W.
Deux instructions de soustraction avec une variable existent : Sub W,Variable,W
et Sub W,Variable.
Dans les deux cas, on soustrait W de la variable et on place le résultat
dans W (premier cas) ou dans la variable (second cas correspondant à
tous les autres processeurs où l'on n'a jamais jugé nécessaire
d'écrire Sub W,Variable,Variable
La soustraction est effectuée comme une addition du complément.
La valeur finale du Carry est donc inversée par rapport aux autres processeurs.