Vous êtes sur la page 1sur 61

@ENICarthage - Cours Microcontroleur

Le jeu d’instruction
Chapitre 4- Cours microcontrôleur

1
Transformation d’un programme en
Assembleur en langage machine
• Programme simple

@ENICarthage - Cours Microcontroleur


• Programme modulaire sur plusieurs fichiers
Considère les différents
modules crées, défini les
adresses réelles de toutes les
instructions et des données

2
La structure d’une instruction

@ENICarthage - Cours Microcontroleur


3
Caractéristiques des instructions
1. Un microcontrôleur PIC MidRange:
• instructions codées sur un mot de 14 bits.

@ENICarthage - Cours Microcontroleur


2. Un microcontrôleur est de type RISC:
• jeu d’instruction réduit (35 instructions).

3. L’exécution d’une instruction occupe un cycle machine (4


périodes d’horloge) sauf :
• CALL,GOTO, RETFIE, RETLW et RETURN: demandent 2 cycles.
• BTFSC, BTFSS, DECFSZ, INCFSZ : demandent un ou deux cycles
4. N’importe quel bit d’un registre peut être accessible directement
5. On ne peut pas faire de transfert de données d’un registre à un
autre directement, il faut passer par W
4
Formats des instructions
• La structure d’une instruction dans n’importe quel
microcontrôleur a deux composantes:
• Le code opération (Operation Code: OP)

@ENICarthage - Cours Microcontroleur


• Les opérandes, ils peuvent être :
• Une adresse sur 7 bits dans la mémoire de données
• Une adresse sur 11 bits dans la mémoire programme
• Une données sur 8 bits (adressage littéral)
• L’adresse d’un bit d’un registre sur 3 bits dans la mémoire
de données
• La Destination (d) des résultats :
• Un bit indiquant où le résultat de l’instruction doit être stocké :
• Dans le registre W(si d=0) ou dans la mémoire de données (si
d=1). 5
Y1

Groupes d’instructions
1- Opérations orientés octets:
• f représente la désignation d’un registre SFR et permet de spécifier le
registre qui sera utilisé par l’instruction.

@ENICarthage - Cours Microcontroleur


• d représente la désignation de la destination et permet de spécifier
l’emplacement du résultat:
• Si d=0, le résultat est placé dans le registre de travail W;
• Si d=1, le résultat est placé dans le registre SFR spécifié dans
l’instruction.

6
Diapositive 6

Y1 Imprimer la représentation binaire des instructions et ajouter un transparent.


Imprimer le plan mémoire de la RAM pour le chapitre précédent
Imprimer la liste des instructions
Younes; 28/02/2015
Groupes d’instructions
2. Opérations orientés bit:
• b désigne un champ de type bit et permet de sélectionner
le nombre de bits affectés par l’opération.

@ENICarthage - Cours Microcontroleur


• f représente le numéro du registre dans lequel le bit est
localisé.

7
Groupes d’instructions
3. Opérations littérale et de contrôle :
• K représente une constante sur 8 ou 11 bits ou une valeur littérale.

@ENICarthage - Cours Microcontroleur


8
Jeu d’instructions: Instructions orientées octets
1. Premier groupe:

@ENICarthage - Cours Microcontroleur


9
Jeu d’instructions: instructions orientées Bits
2. Deuxième groupe:

@ENICarthage - Cours Microcontroleur


10
Jeu d’instructions: Instructions orientées Constantes
3. Troisième groupe:

@ENICarthage - Cours Microcontroleur


11
Jeu d’instructions: Autres Instructions
3. Troisième groupe:

@ENICarthage - Cours Microcontroleur


12
Les Opcodes binaires (1/2)

@ENICarthage - Cours Microcontroleur


13
Les Opcodes binaires (2/2)

@ENICarthage - Cours Microcontroleur


14
Plan de
RAM

@ENICarthage - Cours Microcontroleur


La banque est
sélectionnée selon deux
bits du registre STATUS :
RP0 et RP1

15
EXERCICES- A compléter
• Transformer en binaire quelques instructions assembleurs
• Désassembler un programme binaire en donnant son équivalent

@ENICarthage - Cours Microcontroleur


assembleur
• Vérifier avec MPLAB

16
@ENICarthage - Cours Microcontroleur
Instructions de transfert de
données

17
Instructions de transfert de données
Mnémonique Opération Bits affectés Cycles
movf f,d f => d Z 1

@ENICarthage - Cours Microcontroleur


movwf f w => f _ 1
movlw k k => w _ 1
clrf f 0 => f Z 1
clrw 0 => w Z 1

• W: le registre de travail WORK


• f : le registre de donnée
• k : une valeur littérale sur 8 bits
• d : définie la destination de l’instruction
• d=0 ou d=w, le résultat est dans W
• d=1 ou d=f, le résultat est le registre f donnée en paramètre
18
L’instruction « MOVF » (MOVe File)
• Syntaxe : movf f , d ; (f) -> (d)
• Bit du registre STATUS affecté
• Une fois de plus, seul le bit Z est affecté (si f vaut 0, Z vaut 1).

@ENICarthage - Cours Microcontroleur


• Exemple :

movf mavariable,w movlw mavariable


 charge le contenu de mavariable dans => L’assembleur remplace mavariable par
w. sa VALEUR.
L’assembleur remplace mavariable par sa La valeur, ce n’est pas le contenu.
valeur. Donc : L’assembleur va donc réaliser la
movf 0x0E , w substitution suivante :
charger le CONTENU de l’emplacement movlw 0x0E
0x0E dans w. ADRESSAGE IMMEDIAT. Le déroulement
ADRESSAGE DIRECT. est du type f -> (d)
Après cette instruction, W contient 0x50.
Le déroulement est du type (f) -> (d).
19
Instruction: movf
f,d

@ENICarthage - Cours Microcontroleur


20
L’instruction « MOVLW » (MOVe Literal to W)

• Cette instruction charge la valeur spécifiée (valeur littérale, ou


valeur immédiate), dans l’accumulateur W.

@ENICarthage - Cours Microcontroleur


• Syntaxe : movlw k ; k-> (w) : k représente une valeur de 0x00
à 0xFF.

• Bit du registre STATUS affecté : Aucun ( donc même si vous


chargez la valeur ‘0’.)

• Exemple : movlw 0x25 ; charge 0x25 dans le registre w

21
Instruction: movlw k
movwf : Copie le contenu de W dans f sans modifier les flags du registre
STATUS.

@ENICarthage - Cours Microcontroleur


22
Instruction: movwf reg

@ENICarthage - Cours Microcontroleur


23
Exercice ?
• movwf : Copie le contenu de W dans f sans modifier les flags du
registre STATUS.
• movf f,0 : Sert à copier le contenu de f dans W

@ENICarthage - Cours Microcontroleur


• movf f,1 : Sert à tester si le registre f contient 0
• Exemple :

movf REG1, W
movwf TEMP
movf REG2, W
movwf REG1
movf TEMP, W
movwf REG2

• Que fait ce programme ?  Échanger le contenu de REG1 et REG2


24
@ENICarthage - Cours Microcontroleur
Instructions arithmétiques et
logiques

25
Instructions arithmétiques et logiques
Arithmétique

@ENICarthage - Cours Microcontroleur


Logique

• C : Carry bit, débordement sur 8 bits


• DC : Digit carry bit, débordement sur 4 bits 26
Registre STATUS

27
Registre STATUS

28
Registre STATUS

29
Instructions arithmétiques et
logiques
• Instructions arithmétiques :
• Addition : addwf, addlw

@ENICarthage - Cours Microcontroleur


• Soustraction : subwf, sublw
• Incrémentation : incf
• Décrémentation : decf
• Ils affectent les bits C, DC et Z

30
L’instruction « INCF » (INCrement File)
• Cette instruction provoque l’incrémentation de l’emplacement
spécifié (appelé File).

@ENICarthage - Cours Microcontroleur


• Syntaxe : incf f,d
• Si d=0 -> Le résultat est stocké dans le registre w (work)
• Si d=1 -> Le résultat est stocké dans le registre f (le registre initial est
modifié)
• La formule est : (f) + 1 -> (d) : Les parenthèses signifient « le contenu
de »

• Bit STATUS affecté : Z si l’incrémentation crée un débordement et la


nouvelle valeur est 0.

31
Exemple : addwf
Exemple 1
movlw 253 ;charger 253 en décimal dans W

@ENICarthage - Cours Microcontroleur


addlw 4 ;Ajouter 4. W contient 1, Z vaut 0, C
vaut 1(déborde)
addlw 255 ;ajouter 255 W vaut 0, C vaut 1, Z vaut 1

Exemple 2
movlw 12 ; charger 12 dans W
movwf mavariable ; mavariable vaut maintenant 12
movlw 25 ; charger 25 dans W
addwf mavariable,f ; résultat : (W) + (mavariable), donc
25+12; résultat = 37 sauvé dans
mavariable (f).

32
Exemple : addwf
Exemple 1
movlw .253 ;charger 253 en décimal dans W

@ENICarthage - Cours Microcontroleur


addlw .4 ;Ajouter 4. W contient 1, Z vaut 0, C
vaut 1(déborde)
addlw .255 ;ajouter 255 W vaut 0, C vaut 1, Z vaut 1

Exemple 2
movlw .12 ; charger 12 dans W
movwf mavariable ; mavariable vaut maintenant 12
movlw .25 ; charger 25 dans W
addwf mavariable,f ; résultat : (W) + (mavariable), donc
25+12; résultat = 37 sauvé dans
mavariable (f).

33
Instructions addwf et addlw

addwf f,d addlw k

@ENICarthage - Cours Microcontroleur


34
Instruction: Subwf reg,d
d= reg - W

@ENICarthage - Cours Microcontroleur


35
W = K - W
Instruction sublw K

@ENICarthage - Cours Microcontroleur


36
Instructions arithmétiques et logiques
• Instructions logiques :
• ET logique : andwf, andlw
• Ou logique : iorwf, iorlw

@ENICarthage - Cours Microcontroleur


• OuExclusif : xorwf, xorlw
• Rotation gauche : rlf
• Rotation droite : rrf
• Complément: comf
• Inversion des quartets : swapf

37
Exemple : andwf, andlw
Exemple 1:
movlw 0b11001101 ; charger w
andlw 0b11110000 ; effectuer un ‘and’ (&)

@ENICarthage - Cours Microcontroleur


Exemple 2:
movlw 0xC8 ; charger 0XC8 dans w
movwf mavariable ; sauver dans mavariable
movlw 0xF0 ; charger le masque
andwf mavariable,f ; (mavariable) = 0xC0 (on a
éliminé le quartet faible)

38
Exemple : andwf, andlw
Exemple 1:
movlw b’11001101’ ; charger w
andlw b’11110000’ ; effectuer un ‘and’ (&)

@ENICarthage - Cours Microcontroleur


Exemple 2:
movlw 0xC8 ; charger 0XC8 dans w
movwf mavariable ; sauver dans mavariable
movlw 0xF0 ; charger le masque
andwf mavariable,f ; (mavariable) = 0xC0 (on a
éliminé le quartet faible)

39
RLF & RRF

@ENICarthage - Cours Microcontroleur


Instruction
RLF f,d ; rotation à gauche
RRF f,d ; rotation à droite

40
RLF & RRF

@ENICarthage - Cours Microcontroleur


Exemple: quel est le contenu du registre f
et du bit c ?
MOVLW .254
MOVWF 0x21
RRF 0x21,f
41
RLF & RRF

@ENICarthage - Cours Microcontroleur


Exemple: quel est le contenu du registre f
et du bit c ?
BSF STATUS,0
MOFLW .254
MOVWF 0x21
RRF 0x21,f 42
SWAPF

SWAPF f,d
Instruction

@ENICarthage - Cours Microcontroleur


43
SWAPF

@ENICarthage - Cours Microcontroleur


Exemple: quel est le contenu du registre f?
MOVLW 0xB4
MOVWF PORTB
SWAPF PORTB,W

44
Exemple :
addlw 1
Decrement W:
addlw 0xff

@ENICarthage - Cours Microcontroleur


Logic negation (1-complement):
xorlw 0xff
2-complement for W:
xorlw 0xff
addlw 1
Set several bits to 0, for example, bits 3, 2, 1,0:
andlw 0xf0
Set several bits to 1, for example, bits 3, 2, 1,0:
iorlw 0x0f

45
Exemple :
addlw 1
Decrement W:
addlw 0xff

@ENICarthage - Cours Microcontroleur


Logic negation (1-complement):
xorlw 0xff
2-complement for W:
xorlw 0xff
addlw 1
Set several bits to 0, for example, bits 3, 2, 1,0:
andlw 0xf0
Set several bits to 1, for example, bits 3, 2, 1,0:
iorlw 0x0f

46
Instruction: swapf reg,d

@ENICarthage - Cours Microcontroleur


Utilisation courante: sauvegarde du
contexte au cours des interruptions

47
Instruction comf reg,d
d= reg xor 0xFF

@ENICarthage - Cours Microcontroleur


48
Instructions Orientées BITS

@ENICarthage - Cours Microcontroleur


49
Instructions orientées BITS
• bcf Register,NUM_BIT : positionne à 0 le bit numéro
NUM_BIT de Register. NUM_BIT  [7..0]

@ENICarthage - Cours Microcontroleur


• bsf Register,NUM_BIT : postionne à 1 le bit numéro
NUM_BIT de Register. NUM_BIT  [7..0]
• btfsc Register,NUM_BIT : teste la valeur du bit numéro
NUM_BIT de Register. S’il est égal à 0, PC=PC+1, on saute
l’instruction suivante. Sinon l’instruction suivante (PC) sera
exécutée
• btfss Register,NUM_BIT : teste la valeur du bit numéro
NUM_BIT de Register. S’il est égal à 1, PC=PC+1, on saute
l’instruction suivante. Sinon l’instruction suivante (PC) sera
exécutée

50
bcf Register, Bit
Register = Register & (0x0FF ^ (1 << Bit))

@ENICarthage - Cours Microcontroleur


51
bsf Register, Bit
Register = Register | (1 << Bit)

@ENICarthage - Cours Microcontroleur


movlw 0xDF ;
movwf 0x20
bcf 0x20, 1 ;
bsf 0x20, 5 ;

La nouvelle valeur est 0xFD

52
bsf Register, Bit
Register = Register | (1 << Bit)

@ENICarthage - Cours Microcontroleur


movlw 0xDF ;
movwf 0x20
bcf 0x20, 1 ;
bsf 0x20, 5 ;

La nouvelle valeur est 0xFD

53
Adressage des Banques

@ENICarthage - Cours Microcontroleur


movlw 0x5A ; Value to write into registers
movwf 0x20 ; Store at address 0x20 in bank 0

bsf STATUS, RP0 ; Change execution to Bank 1


movwf 0x20 ; Write to offset 0x20 in Bank 1

54
Saut conditionnel: btfsc et btfss
• Tout saut conditionnel en PIC est un saut d’une seule instruction
réalisé par l’une des instructions suivantes:
• BTFSC: Bit Test File and Skip if Clear. Teste l’état du bit et sauter

@ENICarthage - Cours Microcontroleur


l’instruction suivante s’il est à 0
• BTFSS: Bit Test File and Skip if Set. Teste l’état du bit et sauter
l’instruction suivante s’il est à 1
• DECFSZ: Décrémenter le registre opérande et sauter l’instruction
suivante si le résultat est nul
• INCFSZ: Incrémenter le registre opérande et sauter l’instruction
suivante si le résultat est nul
• btfsc reg,num_bit
• btfss reg,num_bit
Formats des instructions
• decfsz reg,d des sauts conditionnels
• incfsz reg,d
55
Tests de comparaisons entre deux Nombres
On commence par faire : a-b

@ENICarthage - Cours Microcontroleur


Tests Bit Z Bit C

a ==b 1 1
a >b 0 0
a<b 0 1

56
Exemple de test utilisant
btfss et btfsc
if (a == b) {
// Instructions to execute if “a” equals “b”

@ENICarthage - Cours Microcontroleur


} else {
// Instructions to execute if “a” does NOT equal “b”

}
movf a, w ; “if (a != b) then goto ANotEqualb
subwf b, w
btfss STATUS, Z
goto aNotEqualb
// Instructions that execute if “a” equals “b”
goto ConditionEnd

aNotEqualb:
// Instructions that execute if “a” does NOT equal “b”
ConditionEnd:
57
Instructions équivalentes en 80x86

@ENICarthage - Cours Microcontroleur


58
INCFSZ et DECFSZ
• Autres que les instructions btfss et btfsc les instructions incfsz et
decfsz permettent aussi un saut conditionnel d’une instruction.

@ENICarthage - Cours Microcontroleur


incfsz Register, d et decfsz Register, d
Permettent de contrôler les boucles

movlw 37 ; Load the Count Register


movwf 0x20
Loop:
; Repeat for each iteration of the loop
; Instructions in the loop normally go here
decfsz 0x20,f ; Decrement the Count Register
goto Loop ; If not == zero, loop again

; Continue on with the Program

59
@ENICarthage - Cours Microcontroleur
Autres Instructions au besoin dans
leurs chapitres relatifs

60

Vous aimerez peut-être aussi