Académique Documents
Professionnel Documents
Culture Documents
Microprocessor
Microprocessor
Sommaire
1
Introduction ......................................................................................... 3
1.1
1.2
4.1
4.2
Laffichage .................................................................................... 13
4.3
4.4
Le clavier ..................................................................................... 16
4.5
Le processeur ..................................................................................... 18
5.1
5.2
5.3
Le saut ........................................................................................ 22
5.4
5.5
5.6
5.7
5.8
5.9
A laide .............................................................................................. 44
Cest mga......................................................................................... 44
1 Introduction
A la prhistoire de linformatique, il y a un peu plus de 30 ans, les ordinateurs
taient de grosses machines boutonneuses. Loprateur rglait le monstre
laide dune ribambelle de boutons, et lordinateur communiquait avec
dimpressionnantes ranges de lumires clignotantes.
2 Binaire et hexadcimal
Un ordinateur moderne est compos de plusieurs milliards de transistors, qui ont
la particularit de fonctionner en tout ou rien . Un transistor conduit
llectricit ou ne la conduit pas. Linformation vhicule par un fil peut donc
prendre deux tats : 0 ou 1. On parle de systme binaire.
Linformation la plus petite gre par un ordinateur est le bit, qui peut prendre
les tats 0 ou 1. Un bit permet de reprsenter deux valeurs. Par exemple, on
pourrait utiliser un bit pour dterminer si un personnage est vert ou rouge. Si le
bit est zro, le personnage est vert, et sil est un, il est rouge :
0 Vert
1 Rouge
Trfle
Carreau
Pique
Cur
Lundi
Mardi
Mercredi
Jeudi
Vendredi
Samedi
Dimanche
Inutilis
En fait, lajout dun bit double chaque fois le nombre de valeurs possibles. Avec
seulement huit bits, on arrive dj reprsenter 256 valeurs, ce qui est suffisant
pour dfinir un caractre (lettre minuscule ou majuscule, chiffre, signe de
ponctuation, etc.). En informatique, un ensemble de huit bits est appel un octet
(byte). Cest une grandeur souvent utilise.
La notation binaire nest pas pratique, car on crit de longues suites de 0 et de 1.
Par exemple, le nombre 250 scrit 11111010. On prfre une notation
condense appele hexadcimal. Les bits y sont regroups par quatre. Un groupe
de quatre bits permet de reprsenter 16 valeurs. On utilise les chiffres 0 9 pour
les dix premires, puis les lettres A F pour les six dernires :
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Par exemple, le nombre dcimal 250 (quivalent binaire de 1111 1010) scrit FA
en hexadcimal. Le nombre dcimal 19 (quivalent binaire de 0001 0011) scrit
13 en hexadcimal. Afin dviter les confusions, on prcde gnralement un
nombre dcimal de D et un nombre hexadcimal de H . Donc, le nombre
dcimal D19 scrit H13 en hexadcimal. Si rien nest prcis, il sagit dun
nombre dcimal.
Prenons par exemple une mmoire de 32 bits. Les mmoires sont souvent
regroupes en octets. Notre mmoire sera donc compose de 4 octets (4 octets
de 8 bits chacun, ce qui donne bien 4x8 = 32 bits).
On peut considrer cette mmoire comme une commode ayant 4 tiroirs. Les
tiroirs sont numrots de 0 3, et chaque tiroir contient 8 bits.
Note :
Une impulsion sur le premier fil crit la valeur prsente sur le bus de
donnes dans le tiroir dsign par le bus dadresse.
Une impulsion sur le deuxime fil place le contenu du tiroir choisi par le
bus dadresse sur le bus de donnes; on lit la mmoire.
10
11
12
Contenu
Mmoire vive
Mmoire morte
Priphriques
Ecran bitmap
Abrviation
RAM
ROM
PER
DIS
Signification
Random access memory
Read only memory
Display
Lorsque nous utilisons les bus pour crire une adresse comprise entre H000 et
H7FF, nous accdons la mmoire vive (RAM). Pour interagir avec un
priphrique, il suffit dutiliser une adresse comprise entre HC00 et HC0F. Cest
aussi simple que cela.
4.2 Laffichage
1. Slectionnez ladresse HC00 (1100 0000 0000) avec les interrupteurs du
bus dadresse.
2. Slectionnez la donne H07 (0000 0111) avec les interrupteurs du bus de
donnes.
3. Pressez sur le bouton poussoir [W] (write = crire) en bas gauche. Une
sorte de J apparat sur lafficheur de gauche.
13
14
15
Donne
HF0 (1111 0000)
H90 (1001 0000)
H90 (1001 0000)
HF0 (1111 0000)
4.4 Le clavier
Le clavier correspond ladresse HC07 (1100 0000 0111). Cela na aucun sens
(et aucun effet) dcrire une donne cette adresse. On lutilise uniquement en
lecture.
1. Slectionnez ladresse HC07 (1100 0000 0111) avec les interrupteurs du
bus dadresse.
2. Cliquez sur la touche [6] du clavier dans le panneau infrieur droite.
3. Pressez sur le bouton poussoir [R] (read = lire) en bas gauche. La valeur
H86 (1000 0110) apparat tant que le bouton est maintenu press. Une
deuxime pression sur [R] affiche H06. Etrange, non ?
Lorsquune touche [0] [7] est clique, le bit 7 (valeur H80 ou 1000 000 en
binaire) est mis un ladresse HC07. Si la touche est relche avant que
quelquun ne lise cette adresse, elle y reste mmorise. Ds que ladresse HC07
est lue, le bit 7 est remis zro. Cette astuce est ncessaire pour viter de
16
17
5 Le processeur
Le processeur tudi dans ce manuel nexiste pas dans la ralit. Il sagit dun
processeur didactique baptis PSI30.
Au chapitre prcdent, nous avons accd la mmoire avec le panneau de
contrle. Cest lui qui a pris le contrle des bus dadresse et de donnes. Pendant
ces oprations, le processeur tait arrt. Mais lorsque lordinateur fonctionne,
cest le processeur qui prend le contrle des bus.
18
19
20
Pour la suite des exercices, cliquez sur le bouton [CPU+MEM]. Ceci modifie les
panneaux de contrle, qui montrent maintenant lintrieur des deux composants
principaux dun ordinateur : le processeur (Central Processing Unit) et la
mmoire. Il y a 30 ans, cela ntait hlas pas possible raliser avec un vritable
Dauphin !
21
PC : Le nom du registre.
029 : La valeur hexadcimale (H029) contenue actuellement dans le
registre. Vous pouvez diter cette valeur.
Deux petits triangles pour ajouter ou soustraire un au contenu.
X : Une croix pour remettre le registre zro.
11..0 : La reprsentation du registre en binaire. Les cases rouges
correspondent aux bits un. Vous pouvez cliquer sur ces petits boutons
pour changer ltat dun bit.
5.3 Le saut
Vous avez dj compris le fonctionnement de linstruction NOP . Nous allons
maintenant tudier une premire instruction vritablement utile, linstruction de
saut (jump). On parle parfois aussi dinstruction de branchement (branch).
Certaines instructions simples telles que NOP sont codes avec un seul octet.
Dautres instructions plus complexes ncessitent deux, trois ou quatre octets.
Linstruction JUMP demande trois octets.
22
23
lhabitude dcrire son programme sous une autre forme, sur une simple feuille
de papier. De cette faon, notre programme scrirait ainsi :
Adr.
000
001
002
003
004
Donne
00
00
10
03
A0
Instruction
NOP
NOP
JUMP
H3A0
Commentaire
Ne fait rien
Ne fait rien
Saute ladresse H3A0
Donne
00
00
00
00
10
00
00
Instruction
NOP
NOP
NOP
NOP
JUMP
H000
24
Commentaire
Ne fait rien
Ne fait rien
Ne fait rien
Ne fait rien
Saute ladresse H000
Initialiser un registre avec une valeur fixe (ce que lon appelle une
constante).
Copier le contenu dun octet en mmoire dans un registre.
25
Donne
50
12
51
05
84
10
00
04
Instruction
MOVE
#H12, A
Commentaire
Copie la valeur H12 dans le registre A
MOVE
#H5, B
ADD
JUMP
B, A
H004
Ajoute B au contenu de A
Saute ladresse H004
Donne
50
01
58
0C
00
30
10
00
02
Instruction
MOVE
#H1, A
MOVE
A, HC00
RL
JUMP
A
H002
Commentaire
Copie la valeur 1 dans le registre A
(premier segment vertical suprieur droite)
Copie la valeur dans A ladresse HC00,
cest--dire dans lafficheur de gauche
Dcale A dun bit vers la gauche
Saute ladresse H002
26
Linstruction RL (rotate left) dcale tous les bits dune position vers la
gauche. Le 7me et dernier bit de gauche revient dans le premier bit de droite.
Ainsi, le registre A prendra les valeurs H01, H02, H04, H08, H10, H20, H40,
H80, H01, H02, etc.
27
Pour cela, il faut ajouter deux nouvelles instructions, aux adresses H006 et
H008 :
Adr.
000
001
002
003
004
005
006
007
008
009
00A
00B
00C
00D
Donne
50
01
58
0C
00
30
74
3F
12
00
00
10
00
02
Instruction
MOVE
#H1, A
Commentaire
Copie la valeur 1 dans le registre A
MOVE
A, HC00
RL
AND
A
#H3F, A
JUMP,ZS H000
JUMP
H002
28
Donne
54
0C
07
Instruction
MOVE
HC07, A
Commentaire
Lecture du clavier dans A
003
004
005
006
007
008
009
00A
00B
00C
00D
D4
07
12
00
00
58
0C
00
10
00
00
TCLR
A:#7
JUMP,EQ H000
MOVE
A, HC00
JUMP
H000
Revient au dbut
29
faut comprendre que cette valeur H03 a lquivalent binaire 0000 0011. Elle
signifie donc allumer les segments correspondant aux bits 0 et 1 , cest--dire
les deux segments verticaux de droite, qui semblent ainsi former le chiffre 1 .
Pour afficher le chiffre 3, il faudrait allumer cinq
segments avec la valeur H67 (0110 0111 en
binaire).
Pour afficher une valeur ayant la mme apparence que la touche clique, il faut
compliquer notre programme :
Adr.
000
001
002
003
004
005
006
007
008
009
00A
00B
00C
00D
00E
00F
010
011
012
013
014
015
016
017
018
019
01A
01B
01C
01D
Donne
54
0C
07
D4
07
12
00
00
74
07
42
54
10
16
58
0C
00
10
00
00
FF
08
3F
03
6D
67
53
76
7E
23
Instruction
MOVE
HC07, A
Commentaire
Lecture du clavier dans A
TCLR
A:#7
JUMP,EQ H000
AND
#H07, A
MOVE
MOVE
A, X
H016+{X}, A
MOVE
A, HC00
JUMP
H000
Revient au dbut
TABLE
#8
BYTE
BYTE
BYTE
BYTE
BYTE
BYTE
BYTE
BYTE
#H3F
#H03
#H6D
#H67
#H53
#H76
#H7E
#H23
Digits
Digits
Digits
Digits
Digits
Digits
Digits
Digits
Copie A dans X
Copie la valeur contenue la Xme
position de la table ladresse H016
dans A
Copie la valeur lue dans la table
dans lafficheur de gauche
pour
pour
pour
pour
pour
pour
pour
pour
le
le
le
le
le
le
le
le
chiffre
chiffre
chiffre
chiffre
chiffre
chiffre
chiffre
chiffre
0
1
2
3
4
5
6
7
(0011
(0000
(0110
(0110
(0101
(0111
(0111
(0010
1111)
0011)
1101)
0111)
0011)
0110)
1110)
0011)
Les adresses H016 H01D contiennent une table de huit valeurs, qui donnent
les combinaisons exactes de bits pour allumer les segments permettant de
reprsenter les chiffres 0 7.
30
Donne
51
00
01
08
03
01
08
0C
29
10
00
02
Instruction
MOVE
#H00, B
Commentaire
Commence sur le digit de gauche
CALL
H803
CALL
H80C
INC
JUMP
B
H002
_WaitKey
Attente et lecture du clavier dans
A
_DisplayHexaDigit
Affiche le digit contenu dans A
sur lafficheur dtermin par B
Passe lafficheur suivant (+1)
Revient au dbut
31
souhaitez entrer dans la routine, il faut placer le commutateur [OVER INTO] sur
INTO (over signifie par-dessus et into signifie dans ).
Ecrivons un programme qui fait rebondir une petite balle sur les bords gauche et
droite de lcran bitmap. La balle fera un mouvement horizontal de va-et-vient.
32
Donne
22
23
51 01
72 1F
14 00 0B
51 FF
72 00
17 00 12
51 01
86
01 08 1B
50 0A
01 08 06
01 08 1B
10 00 04
Instruction
CLR
X
CLR
Y
MOVE
#H01, B
COMP
#H1F, X
JUMP,LO H00B
MOVE
#HFF, B
COMP
#H00, X
JUMP,HI H012
MOVE
#H01, B
ADD
B, X
CALL
H81B
MOVE
#H0A, A
CALL
H806
CALL
H81B
JUMP
H004
Commentaire
Position horizontale ( gauche)
Position verticale (en haut)
Direction (de gauche droite)
Touche le bord droite ?
Non -> saute ladresse H00B
Nouvelle direction (de droite gauche)
Touche le bord gauche ?
Non -> saute ladresse H012
Nouvelle direction (de gauche droite)
Avance ou recule X horizontalement
_NotPixel allume le nouveau point
Copie la dure attendre dans A
_WaitSec attend
_NotPixel teint lancien point
Recommence
Ce programme est bas sur la routine H81B _NotPixel qui inverse sur lcran
bitmap le point dont on donne les coordonnes x;y dans les registres de mmes
noms X et Y. Comme lcran bitmap mesure 32 x 24 points, le registre X doit
varier entre 0 et 31 (H00 et H1F).
La direction est stocke dans le registre B. Elle vaut 1 (H01) de gauche droite
ou -1 (HFF) de droite gauche. Linstruction ADD B, X augmente ou diminue
de un le contenu de X. Au dpart, X prend les valeurs 0, 1, 2, , 30 et 31. A ce
moment, la balle touche le bord droite. La direction est alors inverse en mettant
la valeur -1 dans B. Les prochaines valeurs de X seront donc 30, 29, 28, etc.
33
34
adresses H00B, H012 et H004 utilises pour les sauts ne sont plus
correctes, ce qui est mis en vidence par les points dexclamation sur fond
jaune.
Pour que le programme fonctionne nouveau, il faut corriger manuellement les
adresses des sauts :
1. Cliquez sur linstruction JUMP,LO H00B ladresse H007, et corrigezla en JUMP,LO H00C .
2. Cliquez sur linstruction JUMP,HI H012 ladresse H00E, et corrigez-la
en JUMP,HI H013 .
3. Cliquez sur linstruction JUMP H004 ladresse H01F, et corrigez-la en
JUMP H005 .
Le programme devrait maintenant fonctionner la perfection, avec le petit point
dessin au milieu de lcran.
5.12 Bonjour
Ce petit programme fait dfiler le mot HELLO sur les afficheurs. Il illustre
bien la puissance des registres X et Y du processeur PSI30.
35
Donne
52 00
53 00
54 30 20
58 2C 00
2B
73 04
14 00 04
50 03
01 08 06
2A
72 08
16 00 02
10 00 00
FF 0C
00
00
00
5B
7C
1C
1C
3F
00
00
00
00
Instruction
MOVE
#H00, X
MOVE
#H00, Y
MOVE
H020+{X}+{Y}, A
MOVE
A, HC00+{Y}
INC
Y
COMP
#H04, Y
JUMP,LO H004
MOVE
#H03, A
CALL
H806
INC
X
COMP
#H08, X
JUMP,LS H002
JUMP
H000
TABLE #H0C
BYTE
#H00
BYTE
#H00
BYTE
#H00
BYTE
#H5B
BYTE
#H7C
BYTE
#H1C
BYTE
#H1C
BYTE
#H3F
BYTE
#H00
BYTE
#H00
BYTE
#H00
BYTE
#H00
Commentaire
Rang de la lettre
Rang du digit
Cherche la lettre
Affiche la lettre sur le digit
Digit suivant
4me digit atteint ?
Si non, saute en H004
Si oui, attend 1.5 secondes
_WaitSec
Lettre suivante
Dernire lettre atteinte ?
Si non, saute en H002
Si oui, saute au dbut
Dbut dune table de 12 octets
Caractre espace
Caractre espace
Caractre espace
Caractre H (0101 1011)
Caractre E (0111 1100)
Caractre L (0001 1100)
Caractre L (0001 1100)
Caractre O (0011 1111)
Caractre espace
Caractre espace
Caractre espace
Caractre espace
36
Pour la suite des exercices, nous allons utiliser une ultime mthode, encore plus
souple : lassembleur dinstructions.
Vous ditez un texte qui dcrit les instructions sous une forme la plus
claire possible. Ce texte est appel source .
Un outil appel assembleur traduit ce texte en instructions binaires.
37
MOVE
#1, A
MOVE
RL
AND
JUMP,ZS
JUMP
A, _DIGIT0
A
#H'3F, A
START
LOOP
;
;
;
;
;
START:
LOOP:
allume le bon segment
dcale le bit gauche
masque les bits inutiles
si plus rien -> START
recommence linfini
38
0
X
#12, Y
#1, B
; X gauche
; Y au milieu
; de gauche droite
LOOP:
COMP
#31, X
JUMP,LO RIGHT
MOVE
#-1, B
COMP
#0, X
JUMP,HI LEFT
MOVE
#1, B
ADD
CALL
B, X
_NotPixel
; avance ou recule X
; allume le nouveau point
MOVE
CALL
#10, A
_WaitSec
; dure attendre
; attend...
CALL
JUMP
_NotPixel
LOOP
RIGHT:
LEFT:
39
Le dessin de la balle seffectue par les deux instructions CALL _NotPixel , qui
inversent simplement un pixel dans lcran. Mais rien nempche de remplacer
lappel de cette routine en ROM par une routine dfinie dans la mmoire RAM,
par votre programme.
La routine qui dessine une balle de huit points scrit ainsi :
; Inverse la balle.
; in X position horizontale
;
Y position verticale
; out ; mod F
NOTBALL:
PUSH
X
PUSH
Y
DEC
CALL
INC
CALL
INC
INC
CALL
INC
CALL
DEC
INC
CALL
DEC
CALL
DEC
DEC
CALL
DEC
CALL
Y
_NotPixel
X
_NotPixel
X
Y
_NotPixel
Y
_NotPixel
X
Y
_NotPixel
X
_NotPixel
X
Y
_NotPixel
Y
_NotPixel
POP
POP
RET
Y
X
; A
; B
; C
; D
; E
; F
; G
; H
Les cinq premires lignes qui commencent par un point-virgule sont facultatives.
Il sagit de commentaires destins faciliter la comprhension du
fonctionnement de la routine. Cest une bonne habitude que de prciser ce
quutilise une routine en entre (in), ce quelle fournit ventuellement en sortie
(out), et les registres quelle modifie (mod).
Une routine est toujours termine par linstruction RET (return).
40
0
X
#11, Y
#1, B
; X gauche
; Y au milieu
; de gauche droite
LOOP:
COMP
#29, X
JUMP,LO RIGHT
MOVE
#-1, B
COMP
#1, X
JUMP,HI LEFT
MOVE
#1, B
ADD
CALL
B, X
NOTBALL
; avance ou recule X
; allume nouvelle balle
MOVE
CALL
#10, A
_WaitSec
; dure attendre
; attend...
CALL
JUMP
NOTBALL
LOOP
RIGHT:
LEFT:
NOTBALL:
etc
RET
Si vous souhaitez aller plus loin, ouvrez le programme rebond4.dolphin, qui fait
rebondir une balle 45 degrs sur les quatre bords de lcran bitmap. Il a suffit
de quelques instructions supplmentaires pour grer le dplacement vertical.
41
5.15 La pile
Pour comprendre le fonctionnement du programme du chapitre prcdent,
quelques explications sur la pile (stack) simposent.
La pile est une zone mmoire pointe par le registre SP (stack pointer). Au
dpart, SP est initialis juste aprs la fin de la RAM, ladresse H800. Lappel
dune routine sauvegarde ladresse de retour sur la pile la fin de la RAM.
Supposons que ladresse H011 contienne linstruction CALL H050 . Lors de
son excution, le processeur effectue les tches suivantes :
1. Le registre SP est diminu de 2. Il vaut donc H7FE.
2. Ladresse de retour H014 est sauvegarde sur la pile. Cest ladresse de
linstruction qui suit le CALL .
3. Saut au dbut de la routine appele, ladresse H050.
42
La routine se termine par linstruction RET , qui effectue les tches suivantes :
1. Ladresse de retour H014 est rcupre sur la pile.
2. Le registre SP est augment de 2. Il vaut donc nouveau H800.
3. Saut ladresse de retour H014.
Les instructions PUSH et POP sauvegardent et restituent des registres sur
la pile. PUSH effectue les tches suivantes :
1. SP est diminu de 1.
2. La valeur contenue dans le registre est sauvegarde sur la pile.
POP effectue les tches suivantes :
1. La valeur rcupre sur la pile est copie dans le registre.
2. SP est augment de 1.
43
6 A laide
7 Cest mga
Les divers chiffres qui caractrisent les ordinateurs modernes sont tellement
grands quon a pris lhabitude de parler de kilos, de mgas et de gigas.
Abrviation
K
M
G
T
Nom
kilo
mga
giga
tra
Quantit
mille
un million
un milliard
un billion
Valeur approximative
1000
1'000000
1'000000000
1'000000000000
Valeur exacte
1024
1'024 kilos
1'024 mgas
1'024 gigas
Capacit
1.4 mga octet
700 mga octets
1 giga octet
9 giga octets
200 giga octets
Abrviation
1.4 Mo
700 Mo
1 Go
9 Go
200 Go
44