Vous êtes sur la page 1sur 108

CEG3536 – Architecture d’ordinateur II

Professeur: Mohamed Ali Ibrahim, ing., Ph.D.

Module 4 – Architecture du jeu d’instruction

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

◼ La logique du cœur RISC demande moins de transistors


◼ Les concepteurs peuvent utiliser l’espace libérée
 Pour accroître l’ensemble des registres et ajouter de grandes caches
 Prendre des mesures pour augmenter le parallélisme interne
 Ajouter d’autre fonctions tel que l’E/S ou de la minuterie (microcontrôleur)
 Ne rien faire et utiliser la puce dans des applications qui limitent l’espace

8
Les caractéristiques générales RISC

◼ Codage uniforme des instructions


 Par exemple, le code opérationnel occupe toujours les mêmes bits dans chaque instruction
qui est toujours 16-bits de long
 Permet un décodage plus rapide
◼ Jeu d’instruction plus homogène
 Utilise n’importe quel registre dans n’importe quel contexte
◼ Modes d’adressages simples
 Les modes d’adressages complexes sont remplacés par des instructions simples
d’arithmétique
◼ Peu de types de données
 Certains UCTs CISC manipulaient des chaînes de caractères, des polynômes, des nombres
complexes, etc.

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

Prise en charge Exécution

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

Adressage immédiat opcode #opr8i


opcode #opr16i
Adressage direct opcode opr8a
Adressage étendu opcode opr16a
Adressage indexé avec décalage constant avec opcode oprx5,xysp
signe de 5-bits, 9-bits, ou 16-bits opcode oprx9,xysp
opcode oprx16,xysp
Adressage indexé avec décalage de registre opcode abd,xysp
Adressage indexé avec incrémentation ou décrémentation opcode oprx3,-yxs+
Adressage indexé indirect avec décalage constant opcode [oprx16,xysp]
de 16-bit ou de registre D opcode [D,xysp]
Adressage relatif opcode rel8
opcode rel16 21
Syntaxe des opérandes
◼ opr8i et opr16i: données immédiates de 8-bit et 16-bit
◼ opr8a et opr16a: adresses 8-bit et 16-bit
◼ oprx5, oprx9 et oprx16: décalage constant de 5-bit, 9-bit, et 16-bit pour
l’adressage indexé
◼ oprx3: valeur d’incrémentation ou décrémentation de 3-bit
◼ xysp: Registres X, Y, SP, ou PC
◼ xys: Registres X, Y, ou SP
◼ abd: Registres A, B, ou D
◼ rel8, rel9 et rel16: Décalage de 8-bit, 9-bit et 16 bit relatif au PC pour
l’adressage relatif
◼ Dans guide de référence, oprx0_xysp, représente,
 oprx3, ± xys; oprx3,yxs±; oprx5,xysp; abc,xysp

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

Mnemonic Operand Syntax CCR


Immediate Direct Extended Indexed Indexed-
Indirect N Z V C
LDAA, #opr8i opr8a opr16a oprx5,xysp [oprx16,xysp]   0 -
LDAB oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+
LDD, LDX, #opr16i opr8a opr16a oprx5,xysp [oprx16,xysp]   0 -
LDY, LDS oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+

29
Instructions pour sauvegarder un registre

Mnemonic Operand Syntax CCR


Immediate Direct Extended Indexed Indexed-
Indirect N Z V C
STAA, opr8a opr16a oprx5,xysp [oprx16,xysp]   0 -
STAB, oprx9,xysp [D,xysp]
STD, STX, oprx16,xysp
STY, STS abd,xysp
oprx3,-xys+
30
Charger une adresse effective

Mnemonic Operand Syntax CCR


Immediate Direct Extended Indexed Indexed-
Indirect N Z V C
LEAS, oprx5,xysp - - - -
LEAX, oprx9,xysp
LEAY oprx16,xysp
abd,xysp
oprx3,-xys+

31
Exemple de charger une adresse effective

◼ Supposons que X = 1234 $, Y = 1000 $ et


SP = 0A00 $. Donnez le contenu de chaque
registre affecté par les instructions
suivantes:

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

Exemple: pshx Exemple: pulx


;1. SP <- (SP)-2, i.e.,(SP)=A05 ;1. X <- m[SP, SP+1], i.e., X=[m(A05),m(A06)]
;2. m[SP, SP+1]<- (X) ;2. SP <- (SP)+2, i.e.,(SP)=A07
37
Exemple des instruction PSH et PUL
◼ Assembler ASM12 V1.22 Build 137 for WIN32 (x86) - Wed Aug 03 11:51:28 2005

1: =00002000 STACK: EQU $2000 ; Equate the stack pointer


2: ; initialization value.
3: 0000 CF 2000 lds #STACK ; Init the stack pointer.
4: ; ---
5: 0003 36 psha ; Put the A register on stack
6: 0004 34 pshx ; Put the X register on stack
7: ; ---
8: 0005 30 pulx ; Must pull the data in the
9: 0006 32 pula ; reverse order

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

SUBROUTINE retourne le contrôle à MAIN

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

◼ Les instructions “JSR SUB” et “BSR SUB” rangent le


contenu du PC sur la pile
 L’effet est de sauvé l’adresse suivant l’instruction JSR ou BSR
◼ L’instruction RTS dépile l’adresse de retour dans le PC
 Que veut dire ceci si des opérations de pile sont utilisées dans
un sous-programme

43
Exemple de sous-programme
◼ Quelle erreur se retrouve dans le sous-programme
suivant?

SUB: pshx ; Sauver les registres


psha
; ---
; ---
pshb ; Savez des données temporairement
; ---
; ---
pula ; Dépiler les registres
pulx
rts
44
Transférez des données à un sous-programme
◼ Exemple 4-13 – envoyer un tableau de données à un sous-
programme pour être additionner
◼ Notes:
 Initialiser le SP
 Boucle pour pousser les données sur la pile
 Utilise le leas pour enlever les données de la pile
 Utilise le leax pour accéder les données
◼ Question: Quelle serait une bonne pratique dans le sous-
programme par rapport au registre X?
◼ Encore plus au sujet de la pile au Module 5

45
Instructions de transfert et d’échange entre
registres

46
Instructions de transfert et d’échange entre
registres

Mnemonic Operand Syntax CCR


Inherent
N Z V C
TAB, TBA   0 -
TAP    
TFR, EXG (abd or ccr or xys), (abd or ccr or xys) - - - -*
* When the CCR is the destination register, all flags will be set accordingly.

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

M68HC11 Opcode Symbolic MC68HC12


Operation Operation Instruction
Transfer SP to X TSX (SP)  X TFR SP,X
Transfer SP to Y TSY (SP)  Y TFR SP,Y
Transfer X to SP TXS (X)  SP TFR X,SP
Transfer Y to SP TYS (Y)  SP TFR Y,SP
Exchange D and X XGDX (D)  (X) EXG D,X
Exchange D and Y XGDY (D)  (Y) EXG D,Y

49
Exemples – Instructions de transfert
based on what? - the previous instruction?

◼ Que sera dans A, B, et bits NZVC après l’exécution de la


séquence suivante d’instructions?
LDAA #$AA
TAB
◼ Que sera dans le pointeur de pile et le registre Y après
l’exécution de la séquence suivante d’instructions?
LDX #$1234
TXS
TSY

◼ Solution: A = $AA B = $AA NZVC = 100-


◼ Solution: S = $1234 Y=$1234 (error in textbook)
50
L’instruction Move
◼ Important avec un UCT ayant un petit ensemble de registres
◼ Voyez l’exemple 4-17 – Reverser l’ordre des données dans un
tableau de 100 octets

Mnemonic Operand Syntax


Imm → Imm → Ind Ext → Ext → Ind Ind → Ext Ind → Ind
Ext Ext
MOVB #opr8i, #opr8i, Opr16a, opr16a, oprx0_xysp, oprx0_xysp,
opr16a oprx0_xysp opr16a oprx0_xysp opr16a oprx0_xysp

MOVW #opr16i, #opr16i, Opr16a, opr16a, oprx0_xysp, oprx0_xysp,


opr16a oprx0_xysp opr16a oprx0_xysp opr16a oprx0_xysp

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

1: =0000001A COUNT: EQU 26


2: ; Initialise le compteur en mémoire
3: 0000 180B 1A 000A movb #COUNT,Cnter
4: 0005 LOOP:
5: ; ---
6: ; ---
7: 0005 73 000A dec Cnter
8: 0008 26 FB bne LOOP
9: ; ---
10: 000A +0001 Cnter: DS 1 ; compteur de 8 bits
56
Instructions de mis à 0 et mis à 1
◼ Instructions de mis à 0 charge des 0s dans le registre ou la mémoire
◼ BCLR et BSET peut mettre à zéro et à un (respectivement) des bits
en mémoire
 Utilise un masque de 8 bits
 Noter l’opération du BCLR, comment interprétez-vous le masque?
 Utile pour manipuler les bits de ports de périphérique – voyez l’exemple
dans la Figure 4-4.

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

◼ LSLD (ou ASLD)

◼ 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

Étant donnée la valeur $A9 dans A. Quel sera le résultat de


chacune des instructions suivantes? ASLA, ASRA, LSLA,
LSRA, ROLA, RORA.

◼ Before After C A Register Comments


◼ 10101001 ASLA 1 01010010 Zero shifted into bit-0.
◼ 10101001 ASRA 1 11010100 Sign bit is preserved.
◼ 10101001 LSLA 1 01010010 Same result as ASLA.
◼ 10101001 LSRA 1 01010100 Different than the ASRA.
◼ 10101001 ROLA 1 0101001C Carry bit is rotated into bit-0.
◼ 10101001 RORA 1 C1010100 Carry bit is rotated into bit-7.

65
La multiplication avec des instructions de décalage

1: 0000 5C 07 std TEMP ; Sauvez dans TEMP


2: 0002 59 asld ; X2
3: 0003 59 asld ; X2 encore = X4
4: 0004 D3 07 addd TEMP ; additionner valeur. X5
5: 0006 59 asld ; X2 = X10
6:
7: 0007 +0002 TEMP: DS 2 ; mémoire temporaire

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

Mnemonic Operand Syntax CCR


Imm Direct Ext Indexed Indexed-
Indirect N Z V C
ADDA, ADDB, #opr8i opr8a opr16a oprx5,xysp [oprx16,xysp]    
SUBA, SUBB, oprx9,xysp [D,xysp]
ADCA, ADCB, oprx16,xysp
SBCA, SBCB, abd,xysp
ADDD, SUBD oprx3,-xys+

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

Mnemonic Operand Syntax CCR


Imm Direct Ext Indexed Indexed-
Indirect N Z V C
NEG opr16a oprx5,xysp [oprx16,xysp]    
oprx9,xysp [D,xysp]
oprx16,xysp
abd,xysp
oprx3,-xys+
NEGA, NEGB    

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

$00 $00 0100 Negating zero gives us zero


$7F $81 1000 Negating +127 gives -127
$01 $FF 1000 Negating +1 gives -1
$FF $01 0000 Negating -1 gives +1
$80 $80 1001 Negating -128 gives overflow

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

upper half lower half partial product MLNL

upper half lower half partial product MHNL

upper half lower half partial product MLNH

upper half lower half partial product MHNH

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:

Avant l’instruction IDIV:


D = 17610 = $00B0, donc A = $00, B = $B0
X = 1010 = $000A
Après l’instruction IDIV:
17610/1010 = 1710 avec un restant de 610, donc
X= =$ ,D= =$ ,A=$ ,B=$ .
78
Exemple FDIV
◼ Étant donné 10010 dans D et X = 30010, , que sera dans
A, B, et X avant et après l’exécution de l’instruction
FDIV?

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

◼ L’instruction MUL produit un résultat de 16 bits


 Pour arrondir à un résultat de 8-bit (ignore l’octet inférieur) et
utilise le bit report
 Le bit C égale la valeur du bit 7, donc avec ADCA #0, arrondit
l’octet supérieur
◼ Le bit report sert aussi pour arrondir les résultats de
EMUL et EMULS

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

◼ Déjà vue ANDCC et ORCC


◼ CLC se traduit à ANDCC #$FE
◼ CLV se traduit à ANDCC #$FD
◼ SEC se traduit à ORCC #$01
◼ SEV se traduit à ORCC #$02
85
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

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

Le branchement est utile après les instructions qui affectent les


codes de CCR correspondants
Exemple: BCS, BCC: après CMPA, CMPB, etc.
BMI, BPL, BEQ, BNE: après TSTA, TSTB, etc.

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

◼ Un masque, mm. Est fournie dans l’instruction


 E.g. BRSET opr8, msk8, rel8
 opr8 donne l’adresse direct de M
 msk8 est le masque mm
 rel8 donne l’adresse relative pour le branchement

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:

2: 0800 16 0804 jsr SUB ; Allons au sous-prog.


3: 0803 A7 BACK: nop ; Le prochain opcode
4: ; ---
5: ; ---
6: ; ---
7: 0804 A7 SUB: nop ; Ici, le sous-prog.
8: ; ---
9: 0805 06 0803 jmp BACK ; Retourner au principal

103
Instructions pour les interruptions

104
Instructions d’interruption

◼ CLI et SEI sont utilisé pour mettre à 0 et mettre à 1 le bit


d’interruption dans le CCR (traduit à ANDCC #$EF et
ORCC #$10 respectivement)
◼ Étudiez ces instructions davantage lorsque vous
étudierez les interruptions
105
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

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

 BGND – active une fonction de débogage


(Voir chapitre 20 pour plus de détails)
107
Références
◼ Fredrick M. Cady, Software and Hardware Engineering: Assembly and C
Programming for the Freescale HCS12 Microcontroller
◼ S12CPUV2, Rev. D, Reference Manual, Freescale Semiconductor Inc.
◼ CPU12 Reference Guide (for HCS12 and original M68HC12), CPU12RG/D
Rev. 2, 11/2001
◼ Les textes ci-dessus sont les sources pour la majorité des illustrations,
tableaux, et exemples dans ce module.
◼ RISC et CISC:
 http//en.wikipedia.org/wiki/RISC

108

Vous aimerez peut-être aussi