Académique Documents
Professionnel Documents
Culture Documents
1
Source: Notes du cours du professeur Gilbert Arbez
Sujets de discussion
◼ Architectures CISC et RISC
Référence: RISC - Article du Wikipedia
(http://en.wikipedia.org/wiki/RISC)
◼ Jeu d’instruction du CPU12
Catégories d’instructions
Catégories de transfert de données
Catégories de modification de données
Catégories de la prise de décision
Catégories de branchement et d’interruption
Autres catégories
◼ Lecture: Chap 7 du texte, CPU12RG/D – CPU12
Reference Guide (for HCS12 and original M68HC12)
◼ S.V.P. amenez en classe le guide de référence (CPU12
Reference Guide)
2
Architecture CISC
◼ Architecture c’est l’architecture du jeu d’instruction (ISA
– Instruction Set Architecture)
◼ Le premiers ISA d’UCT contenaient des instructions
complexes
La mémoire était une ressource coûteuses, petite et lente
Les compilateurs n’existaient pas encore
La programmation se faisait avec des assembleurs (code
machine)
Attitude: la conception du matériel était plus facile que la
conception de logiciel
◼ Le terme CISC (complex instruction set computer)
Les processeurs RISC (reduced instruction set computer)
simplifiaient les ISAs.
Le terme CISC a été utilisé pour distinguer les premiers ISAs
des ISAs RISC plus simples
Même si les processeurs RISC offraient des avantages sur les
processeurs CISC, ils ne sont devenus populaire tel que prévu,
particulièrement dans le marché des ordinateurs personnels
3
Architecture CISC
◼ La conception des UCTs a été influencée par plusieurs
facteurs
Avec des instructions plus complexes, les programmes étaient
plus petits
La tâche du programmeur était simplifiée.
Peu de registres internes
◼ La mémoire interne était coûteuse
◼ Un grand nombre de registres internes agrandit la grandeur de
l’instruction qui agrandit la grandeur du programme
Une instruction accomplissait plus de travail: charger les
données dans un registres, additionner les valeurs, et stocké le
résultat en mémoire
◼ Toutes les modes d’adressage étaient disponibles avec toutes les
instructions
◼ Exemples des processeurs CISC: VAX, PDP-11,
processeurs 68000 du Motorola, et les UCTs
X86/Pentium d’Intel
◼ Le microcontrôleur HCS12 contient un processeur CISC
4
Motivation pour l’architecture RISC
◼ IBM démontre vers la fin des années 70s que la majorité
des modes d’adressage n’étaient pas utilisés
Un effet de l’utilisation des compilateurs à la place des
assembleurs
Les compilateurs ne prenaient pas avantages de toutes les
instructions complexes des UCTs CISC
◼ Certaines opérations complexes CISC étaient plus lente
qu’un nombre d’instructions plus simples
Exemple: l’instruction INDEX du VAX roulait plus lentement que
l’utilisation d’une boucle qui donnait le même résultat
◼ Les UCTs devenaient plus rapide que la mémoire
Peut avoir plus de registres internes (devient la cache)
◼ Les UCTs CISC ont été démontré trop complexes
Exemple: Andrew Tanenbaum montre que 98% des constantes
utilisées par les UCT contiennent moins de 13 bits
En réduisant le nombres de bits dans les instructions, on réduit
la longueur des instructions en diminuant le nombre d’octets
d’opérande (y comprit l’ajout des l’opérandes dans l’opcode) 5
La philosophie de la conception RISC
Le nom RISC (reduced instruction set computer) découle de l’utilisation d’un nombre
réduit des modes d’adressage et instructions
En fait, le jeu d’instruction peut devenir assez grand
La vraie différence était le nombre de registre internes où le travail se fait.
Besoin de beaucoup de chargement et stockage de données – un aspect qu’on nomme load-
store
◼ Codes d’opération plus petits
Donne plus d’espace dans l’instruction pour les opérandes
◼ Désavantages
Séries d’instructions sont nécessaire pour compléter les tâches même les plus simples
◼ Mène à de plus grands programmes et plus d’E/S avec la mémoire
◼ N’était pas claire au début que la conception RISC amenait une meilleure performance
6
L’amélioration de la performance
◼ Vers la fin des années 80s, plusieurs idées améliorent beaucoup la performance
◼ Le traitement en pipeline est une de ces idées
L’idée est d’exécuter les étapes de plusieurs instructions en même temps
◼ Une autre approche était d’avoir plusieurs éléments d’exécutions pour faire rouler
plusieurs instructions en même temps
Mais difficile de compléter une instruction qui dépend des résultats d’autres instructions
◼ Ces techniques ajoutent de la complexité au circuit de l’UCT
L’espace des puces est limitée
Les UCTs RISC, plus simples, peuvent adopter ces techniques
Bientôt deviennent plus performant que les UCTs CISC
Mais les UCTs CISC sont capable éventuellement d’incorporer les mêmes techniques
7
L’utilisation de l’espace de puce dans un UCT RISC
8
Les caractéristiques générales RISC
9
RISC versus CISC
◼ Les processeurs RISC communs comprennent ARM, l’alpha de DEC, le
SPARC, et le PowerPC
◼ Le SPARC de Sun Microsystems fait son chemin dans le monde des stations de
travails (workstation)
◼ MIPS Computer Systems crée le R2000 (un puce MIPS) qui est utilisé dans les
consoles de jeu PlayStation et Nintendo 64
◼ IBM crée le PowerPC qui se retrouve dans les ordinateurs Apple MacIntosh et
souvent utilisé dans les applications de voiture
◼ La majorité des fournisseurs développe des UCTs RISC, y compris Intel (i860 et
i960 vers la fin des années 1980s) et Motorola (88000 et éventuellement se joint
à IBM dans le développement du PowerPC)
◼ Mais RISC fait peu de chemin dans le marché des ordinateurs personnels et les
serveurs.
10
RISC versus CISC
◼ La plateforme X86 d’Intel demeure dominant dans le marché du PC
pour 3 raisons principales
Le x86 appuie une grande base d’applications propriétaires
Intel investit les sous nécessaires pour améliorer les UCTs CISC afin d’être
plus performant que les UCTs RISC
Intel (et AMD) intègre des philosophies RISC dans leurs UCTs
◼ Par exemple, le PentiumPro réalise les instructions CISC en utilisant des opérations
RISC simple à l’interne de l’UCT.
◼ Depuis 2004, les puces x86 sont les processeurs les plus rapides
sur le marché
11
Sujets de discussion
◼ Architectures CISC et RISC
Référence: RISC - Article du Wikipedia
(http://en.wikipedia.org/wiki/RISC)
◼ Jeu d’instruction CPU12
Catégories d’instructions
Catégories de transfert de données
Catégories de modification de données
Catégories de la prise de décision
Catégories de branchement et d’interruption
Autres catégories
12
Le jeu d’instructions du CPU12
◼ Contient au-delà de 1000 instructions
◼ Les instructions comprennent 188 opérations
◼ Se divisent en 18 différentes catégories
◼ La programmation comprend
Déterminer la catégorie de l’instruction selon l’opération désirée
Sélectionner le mode d’adressage
Doit gérer les ressources de l’UCT (le modèle de programmation)
◼ Le Manuel de référence “S12CPU12V2 Reference Manual (S12CPUV2/D) “
offre une description complète du jeu d’instruction
◼ Le Guide de référence offre une présentation plus compacte du jeu d’instruction
13
Le modèle de programmation du CPU12
14
L’architecture de l’UCT
15
Le cycle d’instruction – l’automate fini
Prise en Prise en
Écriture de
charge de charge de
l’opérande
l’instruction l’opérande
Opérandes Résultats
multiples multiples
Calcul de Calcul de
Calcul de Décodage de
l’adresse Opération l’adresse
l’adresse l’opération
de de donnée de
d’instruction d’instruction
l’opérande l’opérande
Retour pour chaîne
ou vecteur
Instruction complétée,
charger prochaine
instruction
16
Cycle de prise en charge (fetch)
17
• Mise à charge (Fetch)
• Le PC contient l'adresse de l'instruction suivante
• L’adresse est mise vers MAR (Memory Address Register)
• L’adresse est placée sur le bus d'adresses
• L'unité de contrôle demande de lire la mémoire
• Le résultat est placé sur le bus de données, copié sur le MBR
(Memory Buffer Register), puis sur IR (Instruction Register)
• Simultanément, le PC est incrémenté de 1
18
Cycle d’exécution
19
Cycle d'exécution
◼ Peut prendre de nombreuses formes
◼ Dépend de l'instruction en cours d'exécution
◼ Peut inclure
Lecture/écriture de mémoire
Entrée/sortie;
Transfertsde registre;
Opérations ALU.
20
Rappel des modes d’adressage du CPU12
22
Sujets de discussion
◼ Architectures CISC et RISC
Référence: RISC - Article du Wikipedia
(http://en.wikipedia.org/wiki/RISC)
◼ Jeu d’instruction M68HC12
Catégories d’instructions
Catégories de transfert de données
Catégories de modification de données
Catégories de la prise de décision
Catégories de branchement et d’interruption
Autres catégories
23
Catégories du jeu d’instructions (18)
◼ Catégories de transfert de données
Charger un registre
Sauvegarder un registre
Transfert/échange entre registres
Déplacer le contenu de la mémoire
◼ Catégories de modification de données
Décrémenter et incrémenter
Mise à zéro et mise à un
Rotation et décalage de bits
Arithmétique
Logique
Codes d’états 24
Catégories du jeu d’instructions
◼ Catégories de prise de décisions
Test de données
Branchement conditionnel
Branchement si bit mise à un, si bit mise à 0
Bouclage primitive
◼ Catégories de branchement et d’interruption
Saut et branchement inconditionnel
Interruption
◼ Autres catégories
Logique floue et math spécialisé (ne sera pas étudié dans ce cours)
Divers
25
Sujets de discussion
◼ Architectures CISC et RISC
Référence: RISC - Article du Wikipedia (http://en.wikipedia.org/wiki/RISC)
◼ Jeu d’instruction CPU12
Catégories d’instructions
Catégories de transfert de données
Catégories de modification de données
Catégories de la prise de décision
Catégories de contrôle de flux
Autres catégories
26
Sommaire des instructions de transfert
◼ Catégorie - Charger un registre
Transférer une donnée de la mémoire à un registre d’UCT
Transférer une donnée de la pile à un registre d’UCT
Peut aussi charger une adresse effective dans les registres X,Y,
et SP
◼ Catégorie – Sauvegarder un registre
Transférer une donnée d’un registre d’UCT à la mémoire
Transférer une donnée d’un registre d’UCT à la pile
◼ Catégorie - Transfert/échange entre registres
Transférer et échanger les données entre 2 registres
◼ Catégorie – Déplacer la mémoire
Déplacer une donnée d’un emplacement de mémoire à un autre
27
Instruction pour charger un registre
◼ Deux premières instructions chargent 8 bits dans un des accumulateurs
◼ Les autres instructions chargent 16-bits de données
Notez l’ordre des octets sauvés en mémoire
28
Modes d’adressage des instructions pour charger un registre
29
Instructions pour sauvegarder un registre
31
Exemple de charger une adresse effective
Instruction Résultat
LEAX 10,X X = X + 10 = $1234 + $000A = $123E
LEAX $10,Y X = Y + $10 = $1000 + $0010 = $1010
LEAS -10,SP SP = SP - 10 = $0A00 - $000A = $09F6
32
L’utilisation des instructions de pile
◼ La pile est un endroit de stockage temporaire
Pour sauvegarder les données des registres (souvent utiliser
dans un sous-programme pour préserver le contenu de registre).
Pour sauvegarder l’adresse de retour lors de l’appel d’un sous-
programme
Pour alloué de l’espace afin de passer des données au sous-
programme
Pour alloué de l’espace servant à des variables temporaires
dans un sous-programme
Préserver l’état de l’UCT lors d’une interruption
Étudieront ces techniques prochainement
◼ Le pointeur de pile doit adresser à du RAM et les
opérations de pile doivent toujours être balancées
Besoin d’initialiser le pointeur de pile
33
Les instructions de rangement sur la pile
◼ Pour ranger le contenu de registres sur la pile
Utilise un adressage de registre (inhérent)
Aucun opérande requis
N’affecte pas le bits CCR
Notez que le SP est décrémenté AVANT de transférer la donnée
Les opérations de rangement sont normalement balancées avec
des opérations de dépilement
34
Les instructions de dépilement de la pile
◼ Pour dépiler le contenu de la pile à un registre
Utilise un adressage de registre (inhérent)
Aucun opérande requis
N’affecte pas le bits CCR
Notez que le SP est incrémenté APRÈS le transférer la donnée
Les opérations de dépilement sont normalement balancées avec des
opérations de rangement
Les dépilements se font à l’inverse des rangements
35
Le pointeur de pile (Stack Pointer, SP)
SP = le registre d'adresse de pile Dépose (PUSH) un nouvel élément sur
68HCS12 SP indique l'élément la pile => Le SP grandit (vers les petites
supérieur de la pile - A08 adresses) pointant vers l'adresse de la RAM
nouvelle élément. A03
psha A04
A03 RAM
A = 55 B 2 A05
A04
X = 1234 A06
A = 55 B A05 1
Y A07 55
X = 1234 A06
SP = 0A07 A08
Y A07
A09
SP = 0A08 A08 S
1. Le SP est décrémenté pour A0A
A09 T pointer vers le premier
SP des autres A0B
microprocesseurs peut A0A A emplacement de mémoire libre
A0C
pointer vers le premier A0B C
emplacement libre au- K 2. Le contenu de l'accumulateur A est copié dans
A0C
dessus de l'élément la PILE à cet emplacement de mémoire libre
supérieur de la pile (A07)! Example: psha
;1. SP <- (SP)-1 , i.e.,(SP)=A07
;2. m[SP] <- (A) , i.e., m(A07)=55
36
PUSH - PULL
RAM A03 RAM
pshx A03
pulx 1 A04
A04
A05 12
A = 55 B 2 A05 12 A = 55 B
34
A06 34 X = 1234 A06
X = 1234 55
Y 1 A07
55 Y 2 A07
A08 S SP = 0A07 A08 S
SP = 0A07
A09 T A09 T
1. Le SP est décrémenté pour A0A A 1. Le contenu de l'emplacement A0A A
pointer vers le premier
A0B C de STACK pointé par le SP est A0B C
emplacement de mémoire copié pour enregistrer X A0C K
libre A0C K
2. Le contenu du registre X est 2. SP est incrémentée pour libérer la pile, à
copié dans le PILE savoir, pour pointer vers l'élément suivant
38
Le sous-programme
◼ Une séquence d’instructions appeler de divers endroits
dans un programme
◼ Permet la même opération mais avec différents
paramètres
◼ Simplifie la programmation en permettant un structure de
modules (verront plus tard en détails)
39
Exécuter un sous-programme
.
caller .
.
jsr subroutineX
.
.
.
subroutineX .
.
.
.
.
rts
40
41
Programme (MAIN) appelle le sous-programme (SUBROUTINE)
RAM 1. SP (SP) - 2 SP=$0A06
MAIN 2. m(SP) (PC) m(A06)=08
…. m(A07)=07
3
0804 JSR #$80C 3. PC ea PC=080C
0807 …. RAM
A03 A03 RAM
A04 A04
A B A05 A05
A B
X A06 A06 08
X
Y A07 A07 07
Y
SP = 0A08 A08 S A08 S
SP = 0A06
A09 T A09 T
PC = 0807 1 PC = 080C
A0A A A0A A
A0B C A0B C
A0C K 2 A0C K
Registres et mémoire avant d'exécuter de JSR Registres et mémoire après d'exécuter de JSR
42
RAM
Subroutine 1. PC [m(SP)] PC=0807
0816 NOP 2. SP (SP)+2 SP=$0A08
0817 RTS
0818 …. A03 RAM A03 RAM
A04 A04
A B A05 A B A05
X A06 08 X A06
1
A07 07 A07
Y Y
SP = 0A06
2 A08 S SP = 0A08 A08 S
PC = 080D A09 T PC = 0807 A09 T
A0A A A0A A
A0B C A0B C
A0C K A0C K
Registres et mémoire avant d'exécuter de RTS Registres et mémoire après d'exécuter de RTS
Le sous-programme et l’adresse de retour
43
Exemple de sous-programme
◼ Quelle erreur se retrouve dans le sous-programme
suivant?
45
Instructions de transfert et d’échange entre
registres
46
Instructions de transfert et d’échange entre
registres
47
Notes: instructions de transfert et d’échange
entre registres
◼ Lors du transfert (TFR) du contenu d’un registre de 8-
bits à un registre de 16-bits, le signe est étendue
Un mnémonique alternatif est disponible SEX
Par exemple, SEX A,X est la même chose que TFR A,X
◼ Lors de l’échange du contenu entre un registre de 8-bits
et un registre de 16-bits
L’octet inférieur du registre de 16-bits est transféré au registre de
8-bit
L’octet supérieur du registre de 16-bits sera mìs à $00
◼ Lors du transfert du contenu d’un registre de 16-bits à un
registres de 8-bits, seulement l’octet inférieur de registre
de 16-bits est transféré.
48
Mnémonique de transfert du CPU12
49
Exemples – Instructions de transfert
based on what? - the previous instruction?
oprx0_xysp represents one of the following indexing modes: oprx5,xysp oprx3,-xys+ abd,xysp
51
Sujets de discussion
◼ Architectures CISC et RISC
Référence: RISC - Article du Wikipedia (http://en.wikipedia.org/wiki/RISC)
◼ Jeu d’instruction M68HC12
Catégories d’instructions
Catégories de transfert de données
Catégories de modifications de données
Catégories de la prise de décision
Catégories de contrôle de flux
Autres catégories
52
Catégories modification de données
◼ Décrémentation et incrémentation
Décrémente et incrémente registres par 1
◼ Mise à zéro et à un
Mettre à zéro la mémoire et les registres
Mise à zéro et à un les bits dans la mémoire et le registres
◼ Rotation et décalage
Déplacer les données d’un bit dans la mémoire et les registres
◼ Arithmétique
Addition et soustraction de 8 et 16 bits, et l’ajustement décimal
Multiplication et division de 8 et 16 bits (avec et sans signe)
Négation
◼ Logique
Opérations ET, OU, OUX, et complément à un
◼ Codes d’états
Opérations pour manipuler les bits dans le CCR 53
Instructions de décrémentation et
d’incrémentation
54
Instructions de décrémentation et
d’incrémentation
Mnemonic Operand Syntax CCR
Extended Indexed Indexed-
Indirect N Z V C
INC,DEC opr16a oprx5,xysp [oprx16,xysp] -
oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+
DECA, -
DECB,
INCA,
INCB
DEX, DEY, - - -
INX, INY
55
Incrémente et décrémente
◼ Le bit report (carry) n’est pas affecté afin de pouvoir utiliser l’opération avec
l’arithmétique multi précision
◼ DECS et INCS se traduisent à LEAS -1,SP et LEAS 1,SP respectivement
◼ Exemple – Utilisation de la mémoire pour réaliser un compteur
57
Instructions de mis à 0 et mis à 1
Mnemonic Operand Syntax CCR
Direct Extended Indexed Indexed-
Indirect N Z V C
CLR opr16a oprx5,xysp [oprx16,xysp] 0 1 0 0
oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+
BSET, opr8a,msk8 opr16a,msk8 oprx5,xysp,msk8 0 -
BCLR oprx9,xysp,msk8
oprx16,xysp,msk8
abd,xysp.msk8
oprx3,-xys+,msk8
CLRA, 0 1 0 0
CLRB
The operand msk8 is an 8-bit mask.
58
Instructions de décalage et de rotation
◼ Deux types d’instructions de décalage
Arithmétique
◼ Décalage à la gauche: ASL, ASLA, ASLB, ASLD
◼ Décalage à la droite: ASR, ASRA, ASRB, ASRD
Logique
◼ Décalage à la gauche: LSL, LSLA, LSLB, LSLD (assemblé comme
un décalage arithmétique à la gauche)
◼ Décalage à la droite: LSR, LSRA, LSRB, LSRD
◼ Instructions de rotation
Rotation à la gauche: ROL, ROLA, ROLB
Rotation à la droite: ROR, RORA, RORB
◼ Toutes les instructions affectent les bits dans le CCR
Le bit report (carry) participe dans le décalage/rotation
59
Instructions de décalage arithmétique
◼ Vers la gauche
◼ Vers la droite
60
Instructions de décalage logique
◼ Vers la gauche
◼ Vers la droite
61
Instructions de rotation
◼ Vers la gauche
◼ Vers la droite
62
Instructions de décalage de 16-bits
◼ LSRD
63
Opérandes pour ASL, ASR, LSL, LSR, ROL,
ROR
Mnemonic Operand Syntax CCR
Direct Extended Indexed Indexed-
Indirect N Z V C
ASL, ASR, opr16a oprx5,xysp [oprx16,xysp]
ROL, ROR oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+
LSL, LSR opr16a oprx5,xysp [oprx16,xysp] 0
oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+
64
Exemples d’opérations de décalage et de rotation
65
La multiplication avec des instructions de décalage
66
Instructions arithmétiques
◼ Additions et soustractions
8-bit: ABA, ADDA, ADDB, SBA, SUBA, SUBB
◼ Avec bit report: ADCA ADCB SBCA SBCB
16-bit: ADDD SUBD
◼ LEAX, LEAY, LEAS peut être considéré comme addition de 16-bits
◼ Arithmétique décimale: DAA (pour codes BCD)
◼ Négation et extension de signes: NEG, NEGA, NEGB,
SEX
◼ Multiplication
8-bit sans signe: MUL
16-bit avec et sans signe: EMUL, EMULS
◼ Division
32/16 bits avec et sans signe: EDIV, EDIVS
16/16 bits avec et sans signe: IDIV, IDIVS
Division fractionnaire: FDIV
67
Instructions d’addition et de soustraction
68
Opérandes d’addition et de soustraction
◼ Opérations 8-bit affectent aussi le bit H
◼ Mnémoniques ABX et ABY sont traduites à LEAX B,X et
LEAY B,Y respectivement
69
Addition à précision multiple
1: ; Octets inférieurs d’abord
2: 0000 96 0D ldaa DATA1+1 ; Octet inférieure
3: ; de DATA1 à 16-bit
4: 0002 9B 0F adda DATA2+1 ; additionne octet inférieure
5: ; de DATA2 à 16-bits
6: 0004 5A 11 staa DATA3+1 ; Sauvegarder
7: ; Le bit report contient maintenant le report de
8: ; l’octet inférieur. Il doit être comprit
9: ; dans l’addition de l’octet supérieur.
10: ; Notez que STAA ne change pas le bit report.
11: 0006 96 0C ldaa DATA1 ; ldaa n’affecte pas
12: ; le bit report
13: 0008 99 0E adca DATA2 ; Additionner l’octet supérieur
14: ; ainsi que le bit report
15: 000A 5A 10 staa DATA3
16:
17: 000C +0002 DATA1: DS 2 ; Endroit de stockage
18: 000E +0002 DATA2: DS 2
19: 0010 +0002 DATA3: DS 2
70
L’arithmétique décimale
◼ L’instruction DAA ajuste les résultats d’une
addition binaire de nombres décimaux
ABA, ADDA, ADCA affecte le bit H dans le CCR et
laisse le résultat de l’addition dans l’accumulateur A
Si les opérandes de l’addition représentaient des
valeurs BCD (Binary Coded Decimal), le résultat
sera incorrect
DAA corrigera le résultat dans A
Décimal Code BCD
34 0011 0100
29 0010 1001
0101 1100 (pas un code BCD)
0000 0110 Correction fait par DAA
63 0110 0011
71
Négation
72
Exemple de négation
◼ Étant donnée que A contienne les données suivantes avant
une instruction NEGA, quel sera le résultat dans A et les bits
N,Z,V à l’exécution de NEGA pour chaque octet?
A = $00, $7F, $01, $FF, $80
________Après______
Avant Registre A N Z C V Commentaire
73
Multiplication
◼ Le bit report sert pour faire de l’arrondissement
MUL met C à 1 quand le bit 7 du résultat =1
EMUL et EMULS mettent C à 1 quand le bit 15 du résultat = 1
◼ EMUL et EMULS affectent aussi les bits N et Z du CCR
◼ Notez que la multiplication de 8 bits avec signe n’existe
pas
Comment faire une multiplication de 8-bit avec signe?
74
Multiplication de 32 bits
16-bit 16-bit 16-bit 16-bit
Address P ~ P+1 P+2 ~ P+3 P+4 ~ P+5 P+6 ~ P+7 Final product M × N
msb lsb
75
Division
76
Division
◼ EDIVS et IDIVS sont respectivement des divisions avec
signe de 32-bits et de 16-bits
À la division par 0, C est mis à 1
Produit un quotient et un restant
◼ EDIV, IDIV sont des opérations sans signe
À la division par 0, C est mis à 1
Dans le cas de IDIV, X (quotient) contiendra $FFFF
Produit un quotient et un restant
◼ FDIV fait la division fractionnaire, prend pour acquis que
le numérateur est plus petit que le dénominateur
À la division par 0, C est mis à 1
V est mis à 1 quand le numérateur est plus grand que le
dénominateur
La base est à la droite du MSB puisque la base est supposée
être dans la même position pour le numérateur et le
dénominateur
FDIV correspond à la division 32/16 suivante:
numérateur*216/dénominateur (i.e. le EDIV)
77
Exemple IDIV (4-38)
◼ Étant donnée 17610 dans D et X=1010, que sera dans A,
B et X avant et après l’exécution de l’instruction IDIV?
◼ Solution:
Solution:
Avant l’instruction FDIV:
D = 10010 = $0064, donc A = $00, B = $64
X = 30010 = $012C
Après l’instruction FDIV :
10010/30010 = 0.333328247070312510 avec un restant de
100, donc
X = 0.33332838 = $5555, D = $0064, A = $00, B = $64.
(division (EDIV) de 00640000 par 012C)
79
Arithmétique de fractions
0.50 .1000 0.75 .1100
+0.25 +.0100 -0.25 -.0100
0.75 .1100 0.50 .1000
0.50 .1000
x 0.25 x.0100 0.375/0.5 = 0.75
0.125 0000
0000
1000 .0110 .1100
0000 .1000 1000)0110.0000
.00100000
80
Arrondissement avec arithmétique de fractions
81
Instructions logiques
82
Opérations logiques
Mnemonic Operand Syntax CCR
Imm Direct Ext Indexed Indexed-
Indirect N Z V C
ANDA, ANDB, #opr8i opr8a opr16a oprx5,xysp [oprx16,xysp] 0 -
EORA, EORB, oprx9,xysp [D,xysp]
ORAA, ORAB oprx16,xysp
abd,xysp
oprx3,-xys+
ANDCC #opr8i
ORCC #opr8i
COM opr16a oprx5,xysp [oprx16,xysp] 0 1
oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+
COMA, COMB 0 1
83
Convertir BCD à ASCII
LS_MASK: EQU %00001111 ; Least sig nibble mask
;
tfr a,b ; Save the BCD number in B
; Need to print the most significant nibble first
lsra ; Shift 4 bits to right
lsra
lsra
lsra
oraa #$30 ; Convert to ASCII
jsr PRINT ; Go print it
tfr b,a ; Get the original back
anda #LS_MASK ; Set most sig bits to 0
oraa #$30 ; Convert to ASCII
jsr PRINT ; Print it
; ---
; Dummy subroutine
PRINT: rts 84
Instructions pour code d’états
86
Catégories de prise de décisions
◼ Catégorie - Test de données
Instructions pour tester les registres et la mémoire –
change seulement les bits du CCR.
◼ Catégorie - Branchement conditionnel
Branchement selon les valeurs de bits CCR
◼ Catégorie - Branchement si bit mise à un, si bit
mise à 0
Branchement selon les valeurs de bits d’octets en
mémoire
◼ Catégorie - Bouclage primitive
Instruction complexe qui modifie un registre et fait un
branchement selon le résultat de la modification
87
Instructions de test de données
◼ Ces instructions n’affectent pas le contenu de registres
mais vont simplement modifier les bits du CCR selon
l’opération de l’instruction.
88
Instructions de test de données
Mnemonic Operand Syntax CCR
Imm Direct Ext Indexed Indexed-
Indirect N Z V C
BITA, BITB #opr8i opr8a opr16a oprx5,xysp [oprx16,xysp] 0 -
oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+
CBA
CMPA, CMPB, #opr8i opr8a opr16a oprx5,xysp [oprx16,xysp]
CPD, CPX, oprx9,xysp [D,xysp]
CPY, CPS oprx16,xysp
abd,xysp
oprx3,-xys+
TST opr16a oprx5,xysp [oprx16,xysp] 0 0
oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+
TSTA, TSTB 0 0
89
Exemple d’une instruction de test
de données
1: =00000002 BIT_1: EQU %00000010 ; Mask for Bit-1
2: =00000024 PORTH: EQU $24 ; Offset to Port C
3: ; ---
4: ; IF BIT_1 is zero
5: 0000 86 02 ldaa #BIT_1
6: 0002 95 24 bita PORTH ; Test Bit-1, Port H
7: 0004 26 02 bne do_if_one ; Do the one part
8: ; THEN
9: ; This is the code to do if the bit is a zero
10: ; ---
11: 0006 20 00 bra end_if ; Skip the next part
12: 0008 do_if_one:
13: ; This is the code to do if the bit is a one
14: ; ---
15: 0008 end_if:
90
Instructions de branchement conditionnel
◼ Format des instructions de branchement:
Branchement court: OPCODE rel8
◼ Décalage varie entre -128 ($80) et 127 ($7F)
Branchement long: OPCODE rel16
◼ Décalage varie entre -32,768 ($8000) et 32,767 ($7FFF)
N’affecte pas les bits CCR
◼ Branchement se fait lorsque la condition testée est vraie
Voir prochains acétates
◼ Si le branchement se fait, le décalage sera additionné au
PC qui pointe à l’instruction suivant l’instruction de
branchement
Voyez le dernier exemple (dernière instruction de test)
91
Branchement simple
Mnémonique
Long Court Opération Condition
92
Branchement avec et sans signe
◼ Sans signe
◼ Avec signe
93
L’utilisation de branchement long
1: ; ---
2: 0000 81 FF cmpa #$FF ; Compare and Set CCR
3:
4: 0002 1826 00FE lbne DO_NOT_EQUAL
5: 0006 DO_EQUAL:
6: ; This is the code for the DO IF EQUAL part. The
7: ; DS 250 simulates more than 127 bytes of code.
8: 0006 +00FA DS 250
9: ;
10: 0100 1820 00FA lbra OVER_NEXT
11: 0104 DO_NOT_EQUAL:
12: ; This is the code to be done if A does not equal
13: ; $FF. The DS 250 simulates more than 127 bytes
14: ; of code.
15: 0104 +00FA DS 250
16: 01FE OVER_NEXT:
94
Branchement si bit mise à un, si bit mise à un
95
Instructions de bouclage primitif
◼ Décrémente ou incrément un registre et branche qui une
condition est VRAI
◼ Format de l’instruction: OPCODE abdxys,rel9
Une instruction de trois octets qui contient un décalage de 9-
bits (varie entre -256 et 255)
N’affecte pas les bits CCR
96
Instructions de bouclage primitif
97
Exemple avec une instruction de bouclage
primitif
1: ; Comparing the loop primitive and "normal"
2: ; decrement and branch instructions
3: ;
4: =000000FF COUNT: EQU 255 ; Counter value
5:
6: 0000 C6 FF ldab #COUNT ; Initialize counter
7: ; ---
8: 0002 LOOP: ; Here is the repetitive code
9: ; ---
10: 0002 04 31 FD dbne b,LOOP ; Using the DBNE instruction
11: ; The alternative is to do the following:
12: 0005 53 decb ; But this sets the CCR bits
13: 0006 26 FA bne LOOP
98
Sujets de discussion
◼ Architectures CISC et RISC
Référence: RISC - Article du Wikipedia
(http://en.wikipedia.org/wiki/RISC)
◼ Jeu d’instruction M68HC12
Catégories d’instructions
Catégories de transfert de données
Catégories de modification de données
Catégories de la prise de décision
Catégories de contrôle de flux
Autres catégories
99
Sauts et branchements inconditionnels
◼ JMP – utilise une adresse effective de 16-bit (selon le mode d’adressage)
◼ JSR – utilise aussi une adresse effective de 16-bit (selon le mode d’adressage)
Range aussi sur la pile une adresse de retour (l’adresse de l’instruction qui suit le JSR)
◼ BSR – utilise un décalage de 8-bit
Range sur la pile une adresse de retour
LBSR n’existe pas, utilise “JSR opr16a”
◼ Le RTS revient d’un sous-programme
◼ BRA, LBRA (branche toujours) utilise un décalage de 8-bit et 16-bits respectivement
◼ BRN, LBRN ne branchent jamais
◼ CALL et RTC sont utilisés pour appeler des sous-programmes lors de l’utilisation de la mémoire
paginée
◼ Règles pour les sous-programmes
La pile doit être initialisé à une région de RAM
Jamais, jamais utiliser un JMP pour commencer un sous-programme
Jamais, jamais quitter un sous-programme avec un JMP
100
Instructions de saut et de d’appel au sous-programme
101
Syntaxes des opérandes pour l'instruction
de saut et de d’appel au sous-programme
Mnemonic Operand Syntax
Relative Direct Ext Indexed Indexed-
Indirect
JMP opr16a oprx5,xysp [oprx16,xysp]
oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+
JSR opr8a opr16a oprx5,xysp [oprx16,xysp]
oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+
BSR,BRA,BRN rel8
LBRA, LBRN rel16
CALL opr16a, page oprx5,xysp, page [oprx16,xysp]
oprx9,xysp, page [D,xysp]
oprx16,xysp, page
abd,xysp, page
oprx3,-xys+, page
102
Exemple – saut à partir d’un sous-programme
◼ Où est l’erreur dans le programme suivant:
103
Instructions pour les interruptions
104
Instructions d’interruption
106
Autres catégories
◼ Logique floue et mathématique spécialisé
Ne sera pas étudié dans ce cours
◼ Divers
NOP – pas d’opération
◼ Pour de la minuterie – un cycle est utilisé
◼ Ajouter des NOPs dans un programme lors du
débogage pour éviter un re-assemblage
◼ BRN et LBNR sont aussi des instructions NOP
108