Les instructions propres à la famille 8-bit PIC® Microcontrollers / Enhanced Mid-Range sont décrites dans le Tableau 1 dans lequel il est indiqué, lorsque cela est applicable, l’équivalent avec les instructions de la famille 8-bit PIC® Microcontrollers / Mid-range ainsi que la description et des notes relatives à cette instruction.
Cet article s’adresse à ceux qui souhaitent migrer vers cette famille car elle apporte beaucoup d’améliorations en terme de souplesse et de performance comme :
- Une optimisation du code facilitant tout compilateur C et donc un humain qui écrit en assembleur.
- Une sauvegarde automatique des registres fondamentaux lors d’une interruption matérielle et leur restauration tout aussi automatique à l’exécution de l’instruction RETFIE. De plus, 16 niveaux sont autorisés dans la pile d’appel de sous-routines (au lieu de 8 pour la famille Mid-Range) associés à une détection Overflow et Underflow.
- Une gestion « linéaire » lors de la recopie de données au moyen des 2 registres FSR0 et FSR1 (File Select Registers).
Tableau 1– Liste des instructions propres
ADDWFC f,d | Add with Carry W and f | 11 1101 dfff ffff | |||
Description : Addition avec le bit de retenue ; (W) + (f) + (C) -> destination | |||||
Équivalent avec les instructions PIC16 / Mid-Range : . ; Addition sur 16 bits R_TEMP += C_VALUE (Enhanced Mid-Range) . movlw C_VALUE_LSB . addwf R_TEMP_LSB ; R_TEMP_LSB += C_VALUE_LSB . movlw C_VALUE_MSB . addwfc R_TEMP_MSB ; R_TEMP_MSB += C_VALUE_MSB avec report Carry . . ; Addition sur 16 bits R_TEMP += C_VALUE (Mid-Range) . movlw C_VALUE_LSB . addwf R_TEMP_LSB ; R_TEMP_LSB += C_VALUE_LSB . skpnc . incf R_TEMP_MSB ; Report de la retenue . movlw C_VALUE_MSB . addwf R_TEMP_MSB ; R_TEMP_MSB += C_VALUE_MSB |
|||||
Notes : – Le codage [11 1101 dfff ffff] occupe la place laissée libre de l’instruction SUBLW de la famille Mid-Range [11 110x dfff ffff] avec x = 1. – Permet d’implémenter une arithmétique 16 bits et plus (report de la retenue) avec un gain en terme de souplesse et de performance. |
ASRF f,d | Arithmetic Right Shift | 11 0111 dfff ffff | |||
Description : Décalage à droite d’une position avec le bit source<7> inchangé et le bit source<0> -> (C) | |||||
Équivalent avec les instructions PIC16 / Mid-Range : . clrc ; A priori bit R_TEMP_1<7> à 0 . btfsc R_TEMP_1,7 . setc ; Bit R_TEMP_1<7> à 1 . rrf R_TEMP_1 ; Décalage avec Carry = R_TEMP_1<7> |
|||||
Notes : – Le codage [11 0111 dfff ffff] occupe la place laissée libre de l’instruction RETLW dee la famille Mid-Range [11 01xx kkkk kkkk] avec xx = 11. – Permet d’implémenter une arithmétique 16 bits et plus (division par 2 de nombres signés) avec un gain en terme de souplesse et de performance. |
LSLF f,d | Logical Left Shift | 11 0101 dfff ffff | |||
Description : Décalage à gauche d’une position avec le bit source<7> -> (C) et 0 -> bit source<0> | |||||
Équivalent avec les instructions PIC16 / Mid-Range : . clrc ; Raz carry . rlf R_TEMP_1 ; Décalage avec Carry |
|||||
Notes : – Le codage [11 0101 dfff ffff] occupe la place laissée libre de l’instruction RETLW de la famille Mid-Range [11 01xx kkkk kkkk] avec xx = 01. – Permet d’implémenter une arithmétique 16 bits et plus (multiplication par 2 de nombres signés) avec un gain en terme de souplesse et de performance. |
LSRF f,d | Logical Right Shift | 11 0110 dfff ffff | |||
Description : Décalage à droite d’une position avec le bit source<0> -> (C) et 0 -> bit source<7> | |||||
Équivalent avec les instructions PIC16 / Mid-Range : . clrc ; Raz carry . rrf R_TEMP_1 ; Décalage avec Carry |
|||||
Notes : – Le codage [11 0110 dfff ffff] occupe la place laissée libre de l’instruction RETLW de la famille Mid-Range [11 01xx kkkk kkkk] avec xx = 10. – Permet d’implémenter une arithmétique 16 bits et plus (division par 2 de nombres non signés) avec un gain en terme de souplesse et de performance. |
SUBWFB f,d | Subtract with Borrow W from f | 11 1011 dfff ffff | |||
Description : Soustraction avec le bit de retenue ; (f) – (W) – (C) -> destination | |||||
Équivalent avec les instructions PIC16 / Mid-Range : . ; Soustraction sur 16 bits R_TEMP -= C_VALUE (Enhanced Mid-Range) . movlw C_VALUE_LSB . subwf R_TEMP_LSB ; R_TEMP_LSB -= C_VALUE_LSB . movlw C_VALUE_MSB . subwfb R_TEMP_MSB ; R_TEMP_MSB -= C_VALUE_MSB avec report Carry . . ; Soustraction sur 16 bits R_TEMP -= C_VALUE (Mid-Range) . movlw C_VALUE_LSB . subwf R_TEMP_LSB ; R_TEMP_LSB -= C_VALUE_LSB . skpc . decf R_TEMP_MSB ; Report de la retenue . movlw C_VALUE_MSB . subwf R_TEMP_MSB ; R_TEMP_MSB -= C_VALUE_MSB |
|||||
Notes : – Le codage [11 1011 dfff ffff] n’est pas utilisé dans la famille Mid-Range. – Permet d’implémenter une arithmétique 16 bits et plus (report de la retenue) avec un gain en terme de souplesse et de performance. |