Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Annexe page n° 1
2. MODES D'ADRESSAGE
Le jeu d'instruction du 80C196KC peut être exprimé par 6 modes d'adressage différents.
LDB 40H,20H ; charge le registre octet d'adresse 20H dans le registre octet d'adresse 40H
40H 20H
Annexe page n° 2
ADD 40H,20H,08H ; ajoute le registre mot d'adresse 21H/20H au registre mot d'adresse
; 09H/08H et range le résultat aux adresses 41H/40H
21H 20H
09H 08H
+
41H 40H
=
Attention:
Lorsque vous travaillez sur des registres mots ( 16 bits ), vous devez spécifier une adresse paire.
Lorsque vous travaillez sur des registres longs ( 32 bits ), vous devez spécifier une adresse divisible par 4.
31H 30H
=
MULU 40H,#8000H ; multiplie en non signé une valeur immédiate sur 16 bits ( pour l'exemple
; 32768 en décimal ) par le wreg d'adresse 41H, 40H et range le résultat
; dans le lreg d'adresse 43H, 42H, 41H, 40H
41H 40H
x 8000H
43H 42H 41H 40H
=
CONSTANTE EQU 3AH ; l'instruction charge la valeur 3AH dans le breg
Annexe page n° 3
LDB 3AH,#CONSTANTE ; d'adresse 3AH
3AH
00111010 ( 3AH )
Remarque:
La directive EQU est interprétée par l'assembleur ASM96 comme suit:
Lorsqu'il assemble votre code source à chaque fois qu'il rencontrera dans le programme l'étiquette
CONSTANTE, il la remplacera par la valeur 3AH.
Nous aurions également pu écrire :
REGISTRE EQU 3AH
CONSTANTE EQU 3AH
LDB REGISTRE,#CONSTANTE
ou encore:
LDB 3AH,#3AH.
L'intérêt de la directive EQU est grand. Elle autorise dans votre code source, l'écriture d'instructions faisant
référence à des étiquettes, plutôt qu'à une suite de symboles hexadécimaux. Si ces étiquettes sont
judicieusement choisies par le programmeur, l'effet mnémotechnique est certain.
Annexe page n° 4
Exemples:
LD 18H,#0E000H
LDB 47H,3[18H] ; charge le registre 47H avec le contenu de l'adresse E0000 + 3
LDB 21H,1[18H] ; charge le registre 21H avec le contenu de l'adresse E000 + 1
47H 32H
E004H 45H
21H A6H
E003H 32H
E002H B8H
+3
E001H A6H
19H E0H E000H FFH [BASE]
18H 00H
RAM EXTERNE
RAM INTERNE
REGISTRE
POINTEUR EQU 18H ; affectation d'une mémoire interne pour sauvegarder les valeurs
; prises par le pointeur.
LD POINTEUR,#0E000H ; initialise le pointeur en début de table.
LDB 46H,2[POINTEUR]; charge le registre 46H avec le contenu de l'adresse E000 + 2
LDB 47H,3[POINTEUR]; charge le registre 47H avec le contenu de l'adresse E000 + 3
47H 32H
46H B8H
E004H 45H
E003H 32H
E002H B8H
E001H A6H +2 +3
19H E0H E000H FFH [BASE]
18H 00H
RAM EXTERNE
RAM INTERNE
REGISTRE
ou encore
LD 46H,2[POINTEUR] ; charge le registre mot 47H/46H avec le contenu
; de l'adresse E000 + 3/E000 + 2
Annexe page n° 5
2.4. mode d'adressage étendu
Ce mode permet de spécifier l'adresse absolue d'un opérande.
Les deux formes rencontrées sont:
♦ Mnem Dest,Adr[0]
♦ Mnem Dest,Src1,Adr[0]
ou:
♦ Adr peut prendre les valeurs allant de 0000H à FFFFH
L'écriture ressemble à celle de l'indexé, à l'exception près que cette fois la base est obligatoirement définie
par le wreg d'adresse 00H. Or, à la construction, le contenu des adresses 01H et 00H a été imposé à zéro.
Donc Adr représente l'adresse physique ou absolue de l'opérande puisque la base est nulle.
Exemples:
LDB 22H,1E03H[0] ; charge dans le breg 22H, le contenu de 1E03H
22H 13H
1E03H 13H
12H
1E02H A9H
01H 00H
00H 00H
RAM EXTERNE
RAM INTERNE
REGISTRE
ACCA EQU 12H ; définit un mon pour le registre d'adresse 12H
MASQUE EQU 1E02H ; définit un mon pour l'adresse mémoire 1E02H
LDB ACCA,#0C1H ; charge ACCA avec la valeur C1H
ANDB ACCA,MASQUE[0] ; effectue un et logique entre ACCA et l'adresse masque
12H
C1H
1E02H
ET A9H
12H
= 81H
Annexe page n° 6
2.5. mode d'adressage indirect
Ce mode est utilisé pour accéder à un opérande dont l'adresse est placée dans un wreg. Dans l'instruction,
on ne spécifie que l'adresse du wreg concerné. Le wreg sert d'adresse indirecte pour accéder à un
opérande, d'où l'appellation. Il existe une variante à ce mode; c'est le mode indirect avec post incrémentation.
Dans ce cas, le contenu de wreg est automatiquement incrémenté de 1 si l'instruction concerne un byte ou
de 2 si l'instruction concerne un word.
Remarque: le mode indirect est identique au mode indexé mais avec un offset nul.
Les trois formes rencontrées sont:
♦ Mnem [base]
♦ Mnem [base]+
♦ Mnem Dest,[base]
♦ Mnem Dest,[base]+
♦ Mnem Dest,Src1,[base]
♦ Mnem Dest,Src1,[base]+
ou:
♦ Base définit un registre mot ( wreg ) dans lequel se trouve l'adresse de l'opérande concernée
par l'instruction.
Exemples:
INCB [80H] ; incrémente l'octet d'adresse 0A000H
A000H
81H A0H A001H 2BH
FFH
80H 00H A000H FFH
+ 00000001
A000H
INDIRECTION
PAR 81H/80H = 00H
A001H A000H
81H
80H
A0H
00H
A001H
A000H
2BH
FFH } 2BH FFH
+ 00000000 00000001
A001H A000H
INDIRECTION
PAR 81H/80H = 2CH 00H
L'instruction précédente est équivalente dans ses effets et avec ces valeurs à:
INCB [80H]+ ; incrémente le contenu de l'adresse A000H incrémente le contenu de l'adresse 80H
INCB [80H] ; incrémente le contenu de l'adresse A001H
Annexe page n° 7
XOR 32H,[A0]+ ; réalise un ou exclusif entre le registre 33H/32H et l'adresse B801H/B800H
; et incrémente l'adresse indirecte de 2
AVANT
33H 32H
A1H
A0H
B8H
00H
B801H
B800H
66H
8CH } 4BH B5H
B801H B800H
+ 66H 8CH
33H 32H
= 2DH 39H
33H
32H
4BH
B5H }
+2
APRES
A1H B8H
A0H 02H
33H
32H
2DH
39H }
2.6. mode d'adressage relatif
Ce mode est exclusivement réservé aux instructions de branchement ( saut de programme ) conditionnel ou
non. La condition de branchement résulte de l'état d'un ou de plusieurs indicateurs tels que Zéro, Carry,
Négatif pour les plus courants. Puisque l'instruction ne précise que l'amplitude du saut ( nombre d'octets )
que le compteur programme doit faire, cela sous-entend que l'adresse absolue de destination est calculée
relativement à la valeur courante de PC à l'endroit du saut; d'où l'appellation de mode relatif.
Résumons:
SI la condition est vraie ALORS ( PC )= ( PC ) + saut
SINON poursuivre.
Les instructions de branchement sont génériques. Les instructions réelles sont générées par l'assembleur
qui tient compte de la longueur du saut à effectuer.
Le format des instructions concernées est:
♦ Mnem Saut ( Saut = adresse d'arrivée - adresse de départ )
Remarques:
Les indicateurs de saut conditionnels sont mémorisés par le micro-contrôleur dans un registre interne
particulier et non adressable. Il est nommé PSW de Program Status Word
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PSW Z N V VT C PTS I ST
♦ Z résultat nul
♦ N = 1 si le MSB d'un résultat = 1
♦ V débordement en arithmétique signée
♦ VT mémoire de V = 1; remis à 0 par les instructions CLRVT, BNVT, BVT.
♦ C retenue sur ADD ou SUB
♦ PTS masque les interruptions servies par le Péripheral Transaction Server
♦ I masque maître de toutes les interruptions
♦ ST positionné si la variable testée a un nombre pair de 1
Annexe page n° 8
3. JEU D'INSTRUCTIONS
On peut classer le jeu d'instruction du 80C196KC en sept familles:
♦ Famille des instructions arithmétiques
♦ Famille des instructions logiques
♦ Famille des instructions de branchement
♦ Famille des instructions de mouvement
♦ Famille des instructions pour interruptions
♦ Famille des instructions qui utilisent la pile
♦ Famille des instructions diverses
Pour la suite:
♦ Dest, Src1 désignent des registres mot ou octet.
♦ Src désigne une mémoire quelconque exprimée dans un mode d'adressage quelconque.
Annexe page n° 9
MULTIPLICATION
♦ sur des octets ou mots
♦ avec choix ou non de l'adresse du résultat
♦ peut porter sur des nombres signés ou non
On dispose ainsi de huit formes possibles:
" sur bytes "
signé
MULB Dest,Src
MULB Dest,Src1,Src
non signé
MULUB Dest,Src
MULUB Dest,Src1,Src
Dest Src
2BH FFH 00H
x
Dest Src1 Src
2BH FFH 00H 00H
x
" sur words "
signé
MUL Dest,Src
MUL Dest,Src1,Src
non signé
MULU Dest,Src
MULU Dest,Src1,Src
Dest Src
x
Dest Src1 Src
Annexe page n° 10
DIVISION
♦ signée ou non signée
♦ 32 bits/16 bits ou 16 bits/8 bits
" sur bytes "
DIVB Dest,Src
DIVUB Dest,Src
Dest Src
2BH FFH 00H
quotient
reste
" sur words "
DIV Dest,Src
DIVU Dest,Src
Dest Src
quotient
reste
CHANGEMENT DE SIGNE
♦ change le signe d'un opérande mot ou octet
" sur bytes "
NEGB Dest
" sur words "
NEG Dest
EXTENSION DE SIGNE
♦ étend un octet signé en un mot signé
♦ étend un mot signé en un mot long signé
" sur bytes "
EXTB Dest
Dest + 1 Dest
Annexe page n° 11
" sur words "
EXT Dest
Dest + 3 Dest
COMPARAISON
♦ compare 2 octets ou 2 mots ou 2 mots longs.
♦ permet de positionner uniquement les indicateurs ( Z, N, C, V ) sans modifier les opérandes. Précède
pour cette raison souvent une instruction de branchement conditionnel.
CMPB Dest,Src
CMP Dest,Src
CMPL Dest,Src
Annexe page n° 12
DECREMENTATION
♦ décrémente un registre octet ou mot ( breg ou wreg )
DECB Dest
DEC Dest
MISE A ZERO
♦ mets à zéro un registre octet ou mot ( breg ou wreg )
CLRB Dest
CLR Dest
MISE A ZERO OU UN DU BIT CARRY
♦ utile en arithmétique lorsqu'il y a retenue initiale ou pas.
CLRC
SETC
MISE A ZERO DU BIT VT
♦ il s'agit d'une mémoire associée au bit V ( overflow ) indicateur de débordement
CLRVT
DECREMENTATION ET BRANCHEMENT SI RESULTAT NON NUL
♦ décrémente un registre mot ou octet.
♦ effectue un saut si le registre est non nul.
DBNZ Dest,Saut
DBNZW Dest,Saut
Dest: registre byte ou word.
Saut: nombre d'adresses à franchir si Dest ≠ 0
Très utile pour les boucles d'attente.
Remarque: c'est une instruction générique. La séquence d'instructions réelle correspondante est générée
automatiquement par l'assembleur suivant l'amplitude du saut ( + 127 - 128 )( + 1023 - 1024 ) ( +32767-
32768 )
Annexe page n° 13
DECALAGE LOGIQUE
♦ à gauche ou à droite.
♦ peut porter sur un registre octet, mot, ou mot long.
à gauche
SHLB Dest,Src SHLB Dest,#Valeur
SHL Dest,Src SHL Dest,#Valeur
SHLL Dest,Src SHLL Dest,#Valeur
Carry Dest
0
MSB LSB
à droite
SHRB Dest,Src SHRB Dest,#Valeur
SHR Dest,Src SHR Dest,#Valeur
SHRL Dest,Src SHRL Dest,#Valeur
Dest Carry
0
MSB LSB
MSB LSB
ECHANGE
♦ échange le contenu d'un registre mot ou octet avec une mémoire de taille correspondante adressée
selon un des 5 modes possibles.
XCHB Dest,Src
XCH Dest,Src
Annexe page n° 14
3.3. famille des instructions de branchement
Elles se rencontrent souvent après une comparaison entre 2 opérandes; ce sont des instructions génériques.
CMP Dest,Src
BRANCHEMENTS CONDITIONNELS
BC Saut ; si C = 1 alors ( PC ) = ( PC ) + Saut
BNC Saut ; si C = 0 alors ( PC ) = ( PC ) + Saut
Annexe page n° 15
3.4. famille des instructions de mouvement
On distingue les mouvements vers ou hors du micro-contrôleur.
CHARGEMENT
♦ chargement d'un registre destination de 00Hà FFH ( Dest ) par une case mémoire quelconque
de 0000H à FFFFH ( Src ).
LDB Dest,Src
LD Dest,Src
♦ il existe 2 variantes qui étendent sur 16 bits le signe ou non de l'opérande Src de type breg.
LDBSE Dest,Src
étend le signe de l'octet Src si Src < 80 ( Dest ) = ( 00Src ) si Src > ou = 80 ( Dest ) = ( FFSrc )
LDBZE Dest,Src
étend sur 16 bits l'octet non signé Src ( Dest ) = ( 00Src )
♦ pour ces 2 instructions, Dest est nécessairement un wreg, donc situé à une adresse paire.
RANGEMENT
♦ rangement d'une case mémoire quelconque de 0000H à FFFFH ( Src ) vers un registre
destination de 00Hà FFH ( Dest ).
STB Src,Dest
ST Src,Dest
L'instruction Store ou Store Byte est la seule du jeu pour laquelle la Destination est définie à droite de
l'instruction.
Annexe page n° 16
3.6. famille des instructions qui utilisent la pile
On distingue, parmi les instructions utilisant automatiquement la pile:
APPELS/RETOUR SOUS PROGRAMME
♦ les appels/retour de sous programme
CALL Saut
exécute un saut relatif sans condition, et mémorise dans la pile pointée par SP l'adresse de départ
puis ( SP ) = ( SP ) - 2
RET
exécute un saut relatif à l'adresse pointée dans la pile par SP puis ( SP ) = ( SP ) + 2
EMPILAGE/DEPILAGE D'INFORMATIONS
♦ l'empilage/dépilage d'informations
PUSHF
sauve sur la pile le mot d'état PSW puis le force à 0 puis ( SP ) = ( SP ) - 2 toutes les interruptions
sont ainsi masquées.
POPF
fait le contraire de PUSHF.
PUSHA
fait le même travail que PUSHF, mais sauve en plus le mot IMASK1/WSR puis ( SP ) = ( SP ) - 2
POPA
fait le contraire de PUSHA.
PUSH "Adresse"
sauve sur la pile le mot adressé par "Adresse" selon un des 5 modes d'adressage puis ( SP ) = ( SP ) - 2.
POP "Adresse"
fait le contraire de PUSH "Adresse"
Annexe page n° 17
DEPLACEMENT DE BLOQUE DE DONNEES
BMOV lreg,wreg
instruction spécifique qui permet de déplacer un bloc de données. lreg, wreg indique au micro-contrôleur,
l'adresse de destination l'adresse source ( lreg ), et le Nombre de mots à déplacer ( wreg ).
Exemple:
BMOV 40H,20H
♦ déplace 5 mots ( 16 bits ) en partant de l'adresse E800H à E804H, 43H F0H
aux adresses F000H à F004H. 42H 00H
41H E8H
Cette instruction peut durer très longtemps si le nombre de mots à 40H 00H
déplacer est important. Au cas où une interruption intervient pendant
ce temps, elle ne sera servie qu'à la fin de l'instruction ce qui peut
être intolérable. A cet effet, le constructeur a prévu une variante, soit:
20H 05H
BMOVI lreg,wreg
♦ le fonctionnement est le même, mais l'instruction est interruptible
RAM INTERNE
MODE FAIBLE CONSOMMATION REGISTRE
IDLPD #Valeur
♦ lorsque le micro-contrôleur exécute cette instruction, il se met en mode " standby ". C'est-à-dire qu'il
libère certains bus, désactive certaines fonctions et passe en faible consommation. Pour plus de
détail, voir le data book.
TEST MSB REEL
NORML lreg,breg
Utilisée en arithmétique sur nombre réel. Décale à gauche lreg jusqu'à ce que le MSB = 1 . Le nombre de
décalages est rangé dans breg. Si lreg = 00000000000000, au bout de 31 décalages, le micro-contrôleur
passe à l'instruction suivante.
SAUT COMPLEXE
TIJMP TBASE,[INDEX],# INDEX_MASK
♦ cette instruction permet de faire un saut ( JMP )
à une adresse définie par une table ( T ) et N+6 Adresse Dest 3
identifiée par un index ( I ), d'où l'appellation. N+4 Adresse Dest 2
N+2 Adresse Dest 1
les 3 opérandes définissent: N Adresse Dest 0 TBASE
♦ TBASE est un wreg, qui contient l'adresse de
début de la table des sauts ( adresse N )
TABLE DES SAUTS
♦ [ INDEX ] est un wreg, qui contient l'adresse d'un
opérande 8 bits servant d'index pour explorer la table.
♦ # INDEX_MASK est une donnée immédiate sur 8 bits servant de masque à l'index.
Le saut relatif dans la table est calculé comme suit par le micro-contrôleur:
OFFSET = 2 * [[ INDEX ] AND INDEX_MASK ]
Adresse Dest = TBASE + OFFSET.
Annexe page n° 18
LISTE DES INSTRUCTIONS
ADDITION
ADD Dest,Src .........................................................................................................9
ADD Dest,Src1,Src.................................................................................................9
ADDC Dest,Src.......................................................................................................9
ET
AND Dest,Src .........................................................................................................12
AND Dest,Src1,Src.................................................................................................12
BRANCHEMENTS CONDITIONNELS
BC Saut ..................................................................................................................15
BNC Saut................................................................................................................15
BE Saut ..................................................................................................................15
BNE Saut................................................................................................................15
BGE Saut................................................................................................................15
BGT Saut................................................................................................................15
BLE Saut ................................................................................................................15
BLT Saut.................................................................................................................15
BH Saut ..................................................................................................................15
BNH Saut................................................................................................................15
BNST Saut..............................................................................................................15
BST Saut ................................................................................................................15
BNV Saut................................................................................................................15
BV Saut ..................................................................................................................15
BNVT Saut..............................................................................................................15
BVT Saut ................................................................................................................15
BBS breg,bit_n°,Saut..............................................................................................15
BBC breg,bit_n°,Saut .............................................................................................15
BRANCHEMENTS INCONDITIONNELS
BR Saut ..................................................................................................................15
BR [wreg]................................................................................................................15
DEPLACEMENT DE BLOQUE DE DONNEES
BMOV lreg,wreg .....................................................................................................18
BMOVI lreg,wreg ....................................................................................................18
APPELS SOUS PROGRAMME
CALL Saut ..............................................................................................................17
MISE A ZERO
CLR Dest ................................................................................................................13
MISE A ZERO DU BIT CARRY
CLRC......................................................................................................................13
MISE A ZERO DU BIT VT
Annexe page n° 19
CLRVT....................................................................................................................13
COMPARAISON
CMP Dest,Src.........................................................................................................12
DECREMENTATION ET BRANCHEMENT SI RESULTAT NON NUL
DBNZ Dest,Saut .....................................................................................................13
DECREMENTATION
DEC Dest................................................................................................................13
INTERDICTION DES INTERRUPTIONS
DI ............................................................................................................................16
DPTS ......................................................................................................................16
DIVISION
DIV Dest,Sr.............................................................................................................11
DIVU Dest,Src ........................................................................................................11
VALIDATION DES INTERRUPTIONS
EI ............................................................................................................................16
EPTS ......................................................................................................................16
EXTENSION DE SIGNE
EXT Dest ................................................................................................................11
MODE FAIBLE CONSOMMATION
IDLPD #Valeur........................................................................................................18
INCREMENTATION
INC Dest .................................................................................................................12
CHARGEMENT
LD Dest,Src ............................................................................................................16
LDBSE Dest,Src .....................................................................................................16
LDBZE Dest,Src .....................................................................................................16
MULTIPLICATION
MUL Dest,Src .........................................................................................................10
MUL Dest,Src1,Src.................................................................................................10
MULU Dest,Src.......................................................................................................10
MULU Dest,Src1,Src ..............................................................................................10
CHANGEMENT DE SIGNE
NEG Dest ...............................................................................................................11
PAS
NOT Dest ...............................................................................................................12
OPERATION NULLE
NOP........................................................................................................................17
Annexe page n° 20
NORML lreg,breg ...................................................................................................18
OU
OR Dest,Src ...........................................................................................................12
EMPILAGE/DEPILAGE D'INFORMATIONS
PUSHF ...................................................................................................................17
POPF......................................................................................................................17
PUSHA ...................................................................................................................17
POPA......................................................................................................................17
PUSH "Adresse".....................................................................................................17
POP "Adresse" .......................................................................................................17
RETOUR SOUS PROGRAMME
RET ........................................................................................................................17
RESET SOFT
RST ( reset soft ) ....................................................................................................16
MISE A UN DU BIT CARRY
SETC ......................................................................................................................13
DECALAGE LOGIQUE
SHL Dest,Src..........................................................................................................14
SHR Dest,Src .........................................................................................................14
DECALAGE ARITHMETIQUE A DROITE
SHRA Dest,Src.......................................................................................................14
OPERATION NULLE
SKIP breg ...............................................................................................................17
RANGEMENT
ST Src,Dest ............................................................................................................16
SOUSTRACTION
SUB Dest,Src .........................................................................................................9
SUB Dest,Src1,Src .................................................................................................9
SUBC Dest,Src.......................................................................................................9
SAUT COMPLEXE
TIJMP TBASE,[INDEX],# INDEX_MASK ...............................................................18
ECHANGE
XCH Dest,Src .........................................................................................................14
OU EXCLUSIF
XOR Dest,Src .........................................................................................................12
Annexe page n° 21