Compteur de programmes , ou compteur ordinal, c'est un compteur de 16bits contenant l'adresse courante de l'instruction qui sera exécuté.
Ce compteur est important dans l’univers des microprocesseurs (donc micro-contrôleur) .
C’est lui qui gère ce que le microprocesseur exécute.
C’est compteur qui gère une adresse , qui permet d’empiler des données.
Mnémonique en rapport avec cette pile dans le msp430
PUSH, POP , CALL , RET , RETI
Les flags d'état du MSP430:
Carry : Bit 0 (poids 1)
Zero : Bit 1 (poids 2)
Negative : Bit 2 (poids 4)
oVerflow : Bit 8 (poids 64)
Vérifier que les mnémoniques affectent bien les flags en question.
C , est la Carry , donc la retenue de l'opération qui vient d'être exécutée ,vérifier que l'instruction affecte bien ce flag.
Par exemple:
mov #0xFF, R4
inc R4
(mspdebug) step
( PC: 0c002) ( R4: 0ffff) ( R8: 00000) (R12: 00000)
( SP: 00000) ( R5: 00000) ( R9: 00000) (R13: 00000)
( SR: 00000) ( R6: 00000) (R10: 00000) (R14: 00000)
( R3: 00000) ( R7: 00000) (R11: 00000) (R15: 00000)
0xc002:
0c002: 14 53 INC R4
0c004: 03 43 NOP
0c006: ff 3f JMP 0xc006
0c008: ff ff ff ff AND.B @R15+, 0xffff(R15)
0c00c: ff ff ff ff AND.B @R15+, 0xffff(R15)
0c010: ff ff
(mspdebug) step
( PC: 0c004) ( R4: 00000) ( R8: 00000) (R12: 00000)
( SP: 00000) ( R5: 00000) ( R9: 00000) (R13: 00000)
( SR: 00003) ( R6: 00000) (R10: 00000) (R14: 00000)
( R3: 00000) ( R7: 00000) (R11: 00000) (R15: 00000)
0xc004:
0c004: 03 43 NOP
0c006: ff 3f JMP 0xc006
0c008: ff ff ff ff AND.B @R15+, 0xffff(R15)
0c00c: ff ff ff ff AND.B @R15+, 0xffff(R15)
0c010: ff ff ff ff AND.B @R15+, 0xffff(R15)
(mspdebug)
On voit bien que SR=3 donc le Bit0 es bien a 1 après l’incrémentation , apparition de la retenue
0xFFFF + 1 = 0x0000 + C =1
.msp430
.org 0xC000
mov #0xFFFF, R4
inc R4
nop
jmp $
.org 0xFFFE
dw 0xC000
.end
Z, le bit Zero , affecté quand la dernière opération si elle affecte le flag est mis a jour si on rencontre la valeur 0 .
Dans l'exemple précédent avec inc R4 ,on rencontre aussi la valeur 0 ! donc Z est aussi a 1
SR = 3, Z = 1 et C = 1
N , comme Negative
Ce flag est mis a un si on rencontre une valeur qui puisse être identifiable a un nombre négatif si on parle complément à 2.
Le complément à 2 permet de manipuler des nombres négatif. Le bit de poids le plus fort étant le bit de signe , si il est a 1 c'est un nombre négatif si nous sommes en complément a 2.
Attention: .B valeur sur 8 bits , donc b7 est le bit de signe , et .W valeur sur 16 bits , b15 devient le bit de signe.
V comme oVerflow (pas confondre O et 0 ... donc on a pris V)
Flag positionné à 1 quand une opération arithmétique dépasse les capacités des registres utilisés
soit 8 bits ou 16 bits ici.
8 bits => -128 < N < 127
16 bits => -32768<N<32767
Réservé au µC
Disponibles pour nos programmes, variables d'usage générales