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