COURS 2.TXT/fr
******************************************************************
* *
* 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