COURS 2.TXT
Jump to navigation
Jump to search
******************************************************************
* *
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST *
* *
* par Le F‚roce Lapin (from 44E) *
* *
* Cours num‚ro 2 *
* *
******************************************************************
LES CHIFFRES 'MAGIQUES'
Voyons d'abord d'une fa‡on simple comment marche un ordinateur, en
nous pla‡ant dans la situation suivante: nous devons fournir des
messages … une personne dont nous sommes s‚par‚s (par exemple,
message de nuit entre des gens ‚loign‚s).
Nous avons une lampe de poche, que nous pouvons donc allumer, ou
‚teindre, c'est tout. Nous pouvons donc donner 2 messages 1)la
lampe est ‚teinte (par ex. tout va bien) 2)la lampe est allum‚e
(par ex. vla les flics!)
Approfondissons les 2 ‚tats de la lampe:
Allum‚e Eteinte
qui revient …: du courant pas de courant
ou: Du courant ? OUI NON
Valeur du courant ? 1 0
Les tests seront donc not‚s par 0 ou 1 suivant l'allumage ou non
de la lampe.
Comme nous sommes riches, nous achetons une 2 Šme lampe.
Nous avons donc 4 possibilit‚s de message
LAMPE 1 LAMPE2
‚teinte ‚teinte
allum‚e ‚teinte
‚teinte allum‚e
allum‚e allum‚e
En comptant avec 3,4,5,6 ... lampes, nous nous rendons compte
qu'il est possible de trouver une relation simple entre le nombre
de lampes et le nombre de possibilit‚s.
Nombre de possibilit‚s = 2 … la puissance nombre de lampes.
Nous obtenons donc le tableau suivant
Les remarques sont justes l… pour mettre la puce … l'oreille !
Lampes Possibilit‚s Remarques
1 2
2 4
3 8 Il y a des ordinateurs 8 bits ...
4 16 et des 16 bits...
5 32 Le ST est un 16/32 bits
6 64 Amstrad CPC... 64!!
7 128 ou Commodore 128 ?
8 256 En informatique le codage des caractŠres
(lettres chiffres.. grƒce au code ASCII)
permet d'avoir 256 caractŠres !
9 512 Un 520 a 512 Ko de m‚moire et
Amstrad vend un PC1 512
10 1024 La taille m‚moire de mon 1040!
11 2048 Celle du m‚ga 2 de mon frŠre
12 4096 Celle d'un m‚ga 4. Aussi le nbr de
couleurs affichables avec un Amiga.
etc...
16 65536 Dans le GFA, un tableau
ne peut avoir plus de 65536 ‚l‚ments.
Si mes 4 lampes sont ‚teintes (0000) je suis donc … la possibilit‚
0. Si elles sont allum‚es (1111) je suis donc … la 15 (car de 0 …
15 ‡a fait bien 16) donc 0000 --> 0 et 1111 --> 15
J'ai donc un bouquin de 16 pages donnant les possibilit‚s des 16
allumages possibles, et mon correspondant a le mˆme. Comment faire
pour lui envoyer le message de la page 13 ?
Le chiffre le plus petit ‚tant … droite (on note les chiffre dans
l'ordre centaines, dizaines, unit‚s), pla‡ons les lampes.
Lampe num‚ro: 4 3 2 1
a) je n'ai qu'une lampe (la 1) elle est allum‚e donc j'obtiens la
valeur 1. (je ne peut obtenir que 0 ou 1)
b)j'ai 2 lampes (1 et 2), allum‚es toutes les deux, j'obtiens la
4Šme possibilit‚ . J'ai donc la valeur 3 (puisque je compte les
valeurs 0,1,2 et 3, ce qui en fait bien 4) Puisque la lampe 1 vaut
au maximum la valeur 1, j'en d‚duis que la lampe 2 vaut … elle
seule au maximum la valeur 2.
En effet lampe 1 allum‚e --> valeur 1
Lampe 2 allum‚e --> valeur 2
Donc les 2 allum‚es ensemble --> valeur 3 = 4 possibilit‚s.
La lampe 2 peut donc donner une 'augmentation' de 0 ou de 2.
Lampe num‚ro 4 3 2 1
'augmentation' 8 4 2 1
Pour envoyer le message 13, il faut donc allumer la lampe 4
(valeur de 8), la lampe 3 (valeur de 4) et la 1 (valeur de 1)
Lampe 4 3 2 1
Etat de la lampe 1 1 0 1
Valeur 8 + 4 + 0 + 1 = 13
Nous sommes donc en train de compter en binaire.
En d‚cimal : d‚c signifie 10, car un chiffre peut prendre 10 va-
leurs (de 0 … 9).
En binaire :bi = deux car chaque chiffre ne peut prendre que 2 va-
leurs (0 ou 1).
L'informatique est un domaine Anglo-saxon. Un 'chiffre binaire',
en Anglais, ‡a se dit 'binary digit'. On garde la premiŠre lettre
et les 2 derniŠres, et on dit qu'un chiffe binaire c'est un BIT
!!! Un bit peut donc ˆtre … 0 ou 1. C'est la plus petite unit‚ in-
formatique,
car, le correspondant … qui nous envoyons des messages, c'est en
fait un ordinateur. Au lieu d'allumer des lampes, nous mettons du
courant sur un fil ou non. Un ordinateur 8 bits … donc 8 fil sur
lesquels on met ou non du courant !
Pour envoyer des messages nous allons donc pr‚parer des lampes
avec des petits interrupteurs puis, quand nos lampes seront prˆ-
tes, on actionnera l'interrupteur principal pour envoyer le cou-
rant et donc allumer d'un coup les lampes pr‚vues.
Nous allons donc, par l'interm‚diaire de nos 'lampes', envoyer des
messages au coeur de la machine (dans le cas du ST c'est un micro-
processeur 68000 de chez MOTOROLA) qui a ‚t‚ fabriqu‚ pour r‚pon-
dre d'une certaine maniŠre aux diff‚rents messages.
On pr‚pare donc nos lampes puis on allume. Nous, nous avons 16
lampes. En effet le 68000 Motorola
est un micro-processeur 16 bits.
Voici donc un 'programme' (c'est-…-dire une succession d'ordres)
tel qu'il est au niveau mise ou non de courant sur les 16 fils
Tout … gauche c'est la valeur du fil 16 et … droite celle du 1. 0
= pas de courant sur le fil, 1 du courant. Le microprocesseur est
entour‚ de multiples tiroirs (les cases m‚moire) et parmi les or-
dres qu'il sait ex‚cuter il y a 'va chercher ce qu'il y a dans tel
tiroir' ou bien 'va mettre ‡a dans tel tiroir'. Chaque tiroir est
rep‚r‚ par une adresse (comme chaque maison), c'est-…-dire par un
num‚ro.
Nous allons dire au microprocesseur: va chercher ce qu'il y a au
num‚ro 24576, ajoutes-y ce qu'il y a au num‚ro 24578 et mets le
r‚sultat au num‚ro 24580. On pourrait remplacer 'au num‚ro' par '…
l'adresse'.
Allumons donc les 16 lampes en cons‚quences, cela donne:
0011000000111000
0110000000000000
1101000001111000
0110000000000010
0011000111000000
0110000000000100
Une seule biarque s'impose, c'est la merde totale! Comment faire
pour s'y retrouver avec un programme comme ‡a, si on oublie d'al-
lumer une seule lampe, ‡a ne marche plus, et pour rep‚rer l'erreur
dans un listing pareil, bonjour !
la merde !!!!
On a donc la possibilit‚ de marquer ‡a non pas en binaire, mais en
d‚cimal. Malheureusement la conversion n'est pas commode et de
toute fa‡on, on obtient quand mˆme des grands chiffres (visuelle-
ment car leur taille en tant que nombre ne change pas, bien s–r!)
Ainsi la 3Šme ligne donne 53368. On va donc convertir autrement,
en s‚parant notre chiffres binaire en groupe de 4 bits.
REMARQUE DE VOCABULAIRE:
Nous ne parlerons qu'Anglais. Toutes les abr‚viations en informa-
tique sont des abr‚viations de mots ou d'expressions anglaises.
Les lire … la Fran‡aise impose d'apprendre par coeur leur signifi-
cation. En les lisant telles qu'elles DOIVENT ˆtre lues (en
Anglais), ces expressions donnent d'elles mˆmes leur d‚finition.
Un des exemples est T$ qui est lu syst‚matiquement T dollar ! Or,
$ n'est pas, dans le cas pr‚sent, l'abr‚viation de dollar mais
celle de string. T$ doit donc se lire ET SE DIRE T string. String
signifiant 'chaŒne' en Anglais, T est donc une chaŒne de carac-
tŠre. Evident, alors que lire T dollar ne signifie absolument rien
! Le seul int‚rˆt c'est que ‡a fait marrer Douglas, le joyeux bri-
tannique qui programme avec moi!
Une unit‚ binaire se dit donc BIT (binary digit)
4 unit‚s forment un NIBBLE
8 unit‚s forment un octet (que nous appellerons par son nom an-
glais c'est … dire BYTE)
16 unit‚s forment un mot (WORD)
32 unit‚s forment un mot long (LONG WORD)
Revenons donc … notre conversion en groupant nos 16 lampes (donc
notre WORD) en groupes de 4 (donc en NIBBLE)
0011 0000 0011 1000
Ces 4 nibbles forment notre premier word.
Comptons dons les valeur possibles pour un seul nibble.
‚tat du nibble 0000 valeur 0
0001 valeur 1
0010 valeur 2
0011 valeur 3
0100 valeur 4
0101 valeur 5
etc..
1010 valeur 10
STOP ‡a va plus ! 10 c'est 1 et 0 or on les a d‚j… uti-
lis‚s!
Ben oui mais … part 0,1,2,3,4,5,6,7,8,9 on n'a pas grand chose …
notre disposition... Ben si, y'a l'alphabet !
On va donc ‚crire 10 avec A, 11 avec B, 12 avec C, 13/D, 14/E et
15 avec F. Il y a donc 16 chiffres dans notre nouveau systŠme (de
0 … F). 'D‚c' signifiant 10 et 'Hex' signifiant 6 (un hexagone)
donc Hex + D‚c=16. D‚cimal = qui a 10 chiffres (0 … 9) hexad‚ci-
mal= qui en … 16!!!
Notre programme devient donc en hexad‚cimal:
$3038
$6000
$D078
$6002
$31C0
$6004
Plus clair mais c'est pas encore ‡a.
NOTE: pour diff‚rencier un nombre binaire d'un nombre d‚cimal ou
d'un hexad‚cimal, par convention un nombre binaire sera pr‚c‚d‚ de
%, un nombre hexad‚cimal de $ et il n'y aura rien devant un nombre
d‚cimal. $11 ne vaut donc pas 11 en d‚cimal, mais 17.
R‚fl‚chissons un peu. Nous avons en fait ‚crit:
'Va chercher ce qu'il y a'
'… l'adresse $6000'
'ajoute y ce qu'il y a' '… l'adresse $6002'
'met le r‚sultat'
'… l'adresse $6004'
Le microprocesseur peut bien s–r piocher dans les milliers de ca-
ses m‚moire qu'il y a dans la machine, mais en plus il en a sur
lui (des petites poches en quelque sorte, dans lesquelles il
stocke temporairement des 'trucs' dont il aura besoin rapidement).
Il a 17 poches: 8 dans lesquelles il peut mettre des donn‚es, et 9
dans lesquelles il peut mettre des adresses. Donn‚e =DATA et
adresse=ADRESS, ces poches seront donc rep‚r‚es par D0,D1,D2,
...D7 et par A0,A1...A7 et A7' (nous verrons plus tard pourquoi
c'est pas A8, et les diff‚rences entre ces types de poches).
NOTE: le ph‚nomŠne de courant/pas courant et le mˆme pour TOUS les
ordinateurs actuels. Le nombre de 'poche' est propre au 68000
MOTOROLA .
Il y a donc le mˆme nombre de 'poches' sur un Amiga ou un Mac
Intosh puisqu'ils ont eux aussi un 68000 Motorala. Sur un PC ou un
CPC, les caract‚ristiques (nombre de lampes allumables simultan‚-
ment, nombre de 'poches'...)sont diff‚rents, mais le principe est
le mˆme. C'est allum‚ OU c'est ‚teint.
Modifions notre 'texte', qui devient donc.
'd‚place dans ta poche D0'
'ce que tu trouveras … l'adresse $6000'
'ajoute … ce que tu as dans ta poche D0'
'ce que tu trouveras … l'adresse $6002'
'mets le r‚sultat de l'op‚ration'
'… l'adresse $6004'
La machine est trŠs limit‚e, puisque par conception, le r‚sultat
de l'op‚ration de la 3 Šme ligne ira lui mˆme dans D0, ‚crasant
donc ce qui s'y trouve. Pour garder la valeur qui s'y trouvait il
faudrait au pr‚alable la recopier par exemple dans la poche D1!!!
D‚placer se dit en Anglais MOVE
Ajoute se dit en Anglais ADD
Notre programme devient donc
MOVE ce qu'il y a en $6000 dans D0
ADD ce qu'il y a en $6002 … D0
MOVE ce qu'il y a maintenant dans D0 … $6004
C'est … dire:
MOVE $6000,D0
ADD $6002,D0
MOVE D0,$6004
Nous venons d'‚crire en clair un programme en langage machine.
La diff‚rence fondamentale avec un programme dans n'importe quel
autre langage, c'est que l…, chaque ligne ne correspond qu'… UNE
SEULE op‚ration du microprocesseur, alors que PRINT "BONJOUR" va
lui en faire faire beaucoup. Il est ‚vident que notre BASIC
n'‚tant qu'un traducteur 'm‚canique' sa traduction a toutes les
chances d'ˆtre approximative, et, bien qu'elle soit efficace, elle
utilise beaucoup plus d'instructions (pour le microprocesseur)
qu'il n'en faut r‚ellement.
Il faut bien aussi avoir une pens‚e ‚mue pour les premiers pro-
grammeurs du 68000 qui ont d'abord fait un programme avec des 1 et
des 0, programme qui ne faisait que traduire des chiffres hexad‚-
cimaux en binaires avant de les transmettre … la machine. Il ont
ensuite r‚alis‚, en hexad‚cimal des programmes traduisant des ins-
tructions du genre MOVE, ADD etc... en binaire...
Il suffisait ensuite de regrouper plusieurs instructions de ce
type sous une autre appellation (incomprise directement par la ma-
chine) et de faire les traducteurs correspondants, et cr‚er ainsi
les langages '‚volu‚s' (PASCAL, C, BASIC ...)
Nous allons donc nous int‚resser … la programmation ou plut“t … la
transmission d'ordre au 68000 Motorola. Combien d'ordres peut-il
ex‚cuter. Uniquement 56 !!!! (avec des variantes quand mˆme mais
‡a fait pas beaucoup). Des recherches (… un niveau bien trop haut
pour nous!) on en effet montr‚es qu'il ‚tait plus rapide d'avoir
peu d'instructions faisant peu de chose chacune et donc ex‚cuta-
bles rapidement les unes aprŠs les autres, plut“t que d'avoir
beaucoup d'instructions (le microprocesseur perdant sans doute du
temps … chercher celle qu'on lui a demand‚ de faire) ou bien des
instructions complexes.
Travail … faire: relire tout ‡a au moins 2 fois puis se reposer
l'esprit avant de lire la suite.
CONSEIL: ne commencez pas la suite tout de suite.
Avalez parfaitement TOUT ce qui est marqu‚, car la compr‚hension
du moindre d‚tail vous servira.
Une lampe, ce n'est pas grand chose, mais une de grill‚e et vous
comprendrez la merde que ‡a amŠne.
L…, c'est pareil. La plus petite chose incomprise et vous n'allez
rien comprendre … la suite. Par contre si tout est compris, la
suite sera aussi facile, et surtout aussi logique.
Back to ASM_Tutorial